pycharm中使用request和Pytest进行接口测试的方法


Posted in Python onJuly 31, 2020

安装request库
以火车的站站查询为例的post和get方法的接口测试
使用pytest测试接口

1、requests的请求机制

1、安装request库

pycharm中使用request和Pytest进行接口测试的方法
pycharm中使用request和Pytest进行接口测试的方法

2、以火车的站站查询为例的post和get请求方法

pycharm中使用request和Pytest进行接口测试的方法

2.1get请求

两种传参方式

1、_url = “网址+参数” = “网址?key1=value1&key2=value2”

response1 = request.get(url = _url)

2、字典拼接

_params = {
“key1” : “value1”,
“key2” : “value2”,
}
response2 = requests.get(url=“网址”, params = _params)
import requests

response = requests.get(url="https://api.binstd.com/train/station2s?start=北京&end=西安&ishigh=0&appkey=d737aad9a0d9dc97")
print(response.text)  #字符串格式
print(response.json()) #json,前提需要确保返回内容为json格式,否则报错

#字典方式拼接参数
print("-------------字典方式拼接参数---------------")
params = {
  "start" : "北京",
  "end" : "西安",
  "ishigh" : 0 ,
  "appkey" : "d737aad9a0d9dc97"
}
response1 = requests.get(url="https://api.binstd.com/train/station2s", params = params)
print(response1.text)
print(response1.json())

pycharm中使用request和Pytest进行接口测试的方法

2.2post请求
拼接参数方式传参

import requests

#字典方式拼接参数
data = {
  "start" : "北京",
  "end" : "西安",
  "ishigh" : 0 ,
  "appkey" : "d737aad9a0d9dc97"
}
response1 = requests.post(url="https://api.binstd.com/train/station2s", data = data)
print(response1.text)
print(response1.json())

#获取响应状态码
print(response1.status_code)

#获取原始模式
print(response1.raw)

常见的请求方法

请求方法 含义
requests.get() 获取html的主要方法
requests.head() 获取html头部信息的主要方法
requests.post() 向html网页提交post请求的方法
requests.put() 向html网页提交put请求的方法
requests.patch() 向html提交局部修改的请求
requests.delete() 向html提交删除请求

2、pytest测试接口

1、安装pytest
pip install pytest

2、使用pytest测试接口
在pytest框架中,有如下约束:
文件名要以test开头或者结尾(test_*.py / *_test.py),可以包含一个或多个test_开头的函数。
此时,在执行pytest命令时,会自动从当前目录及子目录中寻找符合上述约束的测试函数来执行。

4.1首先得到响应数据

import requests
def request_ticket():
  #返回接口响应结果
  url = "https://api.binstd.com/train/ticket"
  payload = {
    "start": "北京",
    "end": "西安",
    "date": "2019-10-1",
    "appkey": "d737aad9a0d9dc97"
  }
  #response = requests.get(url = _url, parms = payload)
  response = requests.post(url = url, data = payload)
  print(response.text)
  return response
request_ticket()

4.2为了方便查看将响应结果格式化:由于太长,部分用省略号代替

{
  "status": 0, 
  "msg": "ok", 
  "result": {
    "start": "北京", 
    "end": "西安", 
    "date": "2020-06-10", 
    "list": [
      {
        "trainno": "G667", 
        "type": "G", 
        "typename": "高铁", 
        "station": "北京西", 
        "endstation": "西安北", 
        "departuretime": "11:19", 
        ...
        "departstationcode": "BXP", 
        "terminalstationcode": "EAY", 
        "startdate": "20200610", 
        ...
      }, 
      {
        "trainno": "G659", 
        "type": "G", 
        "typename": "高铁", 
        "station": "北京西", 
        "endstation": "西安北", 
        "departuretime": "11:53", 
        ...
        "departstationcode": "BXP", 
        "terminalstationcode": "EAY", 
        "startdate": "20200610", 
        ...
      }, 
      {...}, 
      {...}, 
      ...
    ]
  }
}

pycharm中使用request和Pytest进行接口测试的方法

4.3取出数据
出发站(station)和到达站(endstation)在result中的list下,怎么取到呢?----[“result”] [“list”]
---- request_ticket().json()[“result”][“list”]

def test_departur_station():
  """
  始发站测试,测试接口返回的所有车次信息,他们的出发站,和到达站都符合参数约定
  :return:
  """
  #从响应中获取测试列表   
  trainSli = request_ticket().json()["result"]["list"]  #单个的车次信息
  #trainSli是取出来的list列表
  for trainInfo in trainSli:
    assert "北京" in trainInfo["station"]  #判断‘北京'是否是列表中‘station'的值
    assert "西安" in trainInfo["endstation"] #判断到达站是不是‘西安'

#调用函数
test_departur_station()

'''def test_train_date():
  """
  发车日期测试,接口返回的所有车次信息,发车日期,都符合参数约定
  :return:
  """
  #从响应中获取测试列表
  trainSli = request_ticket().json()["result"]["list"]  #单个的车次信息
  for trainInfo in trainSli:
    assert "20200610" in trainInfo["startdate"]
    
test_train_date()'''

4.4 运行

pycharm中使用request和Pytest进行接口测试的方法

4.5 查看结果

pycharm中使用request和Pytest进行接口测试的方法

如果该路径下有多个以test开头或者结尾的文件,则会一起检测两个文件中的接口

pycharm中使用request和Pytest进行接口测试的方法

如果出现ERROR则在文件中找错误原因

pycharm中使用request和Pytest进行接口测试的方法

总结

到此这篇关于pycharm中使用request和Pytest进行接口测试的文章就介绍到这了,更多相关pycharm使用request和Pytest接口测试内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python实现得到一个给定类的虚函数
Sep 28 Python
利用python批量检查网站的可用性
Sep 09 Python
Python获取指定字符前面的所有字符方法
May 02 Python
运用Python的webbrowser实现定时打开特定网页
Feb 21 Python
Python通用函数实现数组计算的方法
Jun 13 Python
pyqt 实现为长内容添加滑轮 scrollArea
Jun 19 Python
python 实现Flask中返回图片流给前端展示
Jan 09 Python
python如何获取apk的packagename和activity
Jan 10 Python
Mac PyCharm中的.gitignore 安装设置教程
Apr 16 Python
使用python编写一个语音朗读闹钟功能的示例代码
Jul 14 Python
python3实现飞机大战
Nov 29 Python
Python批量解压&压缩文件夹的示例代码
Apr 04 Python
django创建css文件夹的具体方法
Jul 31 #Python
Selenium之模拟登录铁路12306的示例代码
Jul 31 #Python
python的flask框架难学吗
Jul 31 #Python
使用PyCharm安装pytest及requests的问题
Jul 31 #Python
django和flask哪个值得研究学习
Jul 31 #Python
Windows下PyCharm配置Anaconda环境(超详细教程)
Jul 31 #Python
Python如何输出百分比
Jul 31 #Python
You might like
全国FM电台频率大全 - 2 天津市
2020/03/11 无线电
php设计模式 Interpreter(解释器模式)
2011/06/26 PHP
phpstorm编辑器乱码问题解决
2014/12/01 PHP
详解WordPress中的头像缓存和代理中的缓存更新方法
2016/03/01 PHP
详解PHP的Yii框架的运行机制及其路由功能
2016/03/17 PHP
PHP编程实现微信企业向用户付款的方法示例
2017/07/26 PHP
PHP实现数组的笛卡尔积运算示例
2017/12/15 PHP
几个javascript操作word的参考代码
2009/10/26 Javascript
JavaScript中yield实用简洁实现方式
2010/06/12 Javascript
jQuery Mobile 导航栏代码
2013/11/01 Javascript
js简单实现根据身份证号码识别性别年龄生日
2013/11/29 Javascript
SuperSlide2实现图片滚动特效
2014/06/20 Javascript
一个简单的jQuery计算器实现了连续计算功能
2014/07/21 Javascript
Node.js node-schedule定时任务隔多少分钟执行一次的方法
2015/02/10 Javascript
整理AngularJS框架使用过程当中的一些性能优化要点
2016/03/05 Javascript
JS排序算法之冒泡排序,选择排序与插入排序实例分析
2017/12/13 Javascript
Vue波纹按钮组件制作
2018/04/30 Javascript
Vue表单输入绑定的示例代码
2018/11/01 Javascript
jQuery实现简单弹幕制作
2020/12/10 jQuery
jQuery实现简单轮播图效果
2020/12/27 jQuery
[01:05]DOTA2完美大师赛趣味视频之选手教你打职业
2017/11/23 DOTA
[40:29]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第一场
2018/04/10 DOTA
python学习笔记之列表(list)与元组(tuple)详解
2017/11/23 Python
python3+PyQt5实现拖放功能
2018/04/24 Python
学习python可以干什么
2019/02/26 Python
wxpython布局的实现方法
2019/11/01 Python
django API 中接口的互相调用实例
2020/04/01 Python
Python 保存加载mat格式文件的示例代码
2020/08/04 Python
Python中Qslider控件实操详解
2021/02/20 Python
马来西亚在线健康商店:Medipal Malaysia
2020/04/13 全球购物
内部类的定义、种类以及优点
2013/10/16 面试题
办理信用卡工作证明
2014/09/30 职场文书
2014学生会工作总结报告
2014/12/02 职场文书
担保贷款承诺书
2015/04/30 职场文书
MySQL系列之十三 MySQL的复制
2021/07/02 MySQL
「玫瑰之王的葬礼」舞台剧主视觉图公开
2022/03/21 日漫