request的简单介绍和两种基本类型
requests接口测试
前提配置环境 pip install requests
两种方式,get,post
get无参数请求
r = requests.get('http://www.baidu.com')
get有参数请求
payload = {'key1': 'value1', 'key2': 'value2', 'key3': None}
r = requests.get('http://www.baidu.com ', params=payload)
post
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post("http://httpbin.org/post", data=payload)
响应及Request扩充
r.status_code 响应状态码
r.heards 响应头
r.cookies 响应cookies
r.text 响应文本
r.json() 响应的字典类型数据
r. encoding 当前编码
r. content 以字节形式(二进制)返回
1:添加等待时间
requests.get(url,timeout=1) #超过等待时间则报错
2:添加请求头信息
requests.get(url,headers=headers) #设置请求头
3:添加文件
requests.post(url, files=files) #添加文件
requests+ unittest + HtmlTestRunner
主要流程:读取文件中的数据
requests拿到数据请求接口返回状态码
通过断言验证返回的数据和预期结果
生成allure的测试报告
模块总览:dataDemo(存放数据)>> readDemo(读取数据)>> restDemo(发送请求生成报告)
需要导入的模块有,读取数据的模块,request模块
对字符串的转换用eval()函数
判断get还是post类型用if语句
eg:用变量a来介接收接口返回值
a=equest.get(url,params)
在测试用例中执行requests请求,验证预期结果和实际结果:
self.assertEqual(b.json()["error_code"],int(list_i[3]))
b.json()["error_code"]为字典里取值,
int(list_i[3]为返回列表里索引取值
最后在另一个包里创建生成测试报告的方法
如接口为post形式则吧params换为data,.get改为.post
requests+pytest+allure
流程同unittest,将单元测试中的unittest方法换成pytest
如何做接口自动化测试
首先我是用python+requests+unittest+htmltestrunner/pytest+allure实现了接口自动化测试
首先在数据包中存储接口的测试数据比如csv文件,excel文件等,实现数据和代码逻辑的分离
然后在读取数据的包中实现读取文件的获取数据的操作
接着在测试用例包中导入读取数据模块,通过requests的get/post方法获取该接口的返回数据的信息在单元测试模块(unittest/pytest)中通过断言验证返回的值和预期结果是否一致
最终结果打印在html类型的测试报告中
如何实现接口之间的关联
首先导入requests和unittest,模块
创建一个类,新增一个测试用例(放在方法里),在第一个接口中用字典取出第二个接口中所用的参数,放在方法外部设置为全局变量,在第一个中运用global修改全局变量参数,在第二个接口中引用实现接口关联
手机号码归属地和天气预报关联eg:
import requests,unittest
class Tii(unittest.TestCase):
city=""
def test001(self):
a="http://apis.juhe.cn/mobile/get"
b={"phone":"18256179322","key":"cb82dc216cbd59b235b7742aff1238ed"}
c=requests.get(url=a,params=b)
global city
city=c.json()["result"]["city"]
def test002(self):
a="http://apis.juhe.cn/simpleWeather/query"
b={"city":city,"key":"31a901ee32cffe1106ecc1fae6227a41"}
c=requests.get(url=a,params=b)
print(c.json())
if __name__ == '__main__':
unittest.main()
pytest数据驱动