Python接口自动化测试之之request
2022/4/27 17:12:49
本文主要是介绍Python接口自动化测试之之request,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、Python 之 request
主要方法解析 requests 是 python 实现的最简单易用的 HTTP 库,requests 库7 个主要方法:
举例:普通接口测试的接口之间没有关联性,所以直接定义变量去发起get、post 请求即可。
其中 POST 的请求常用的分为 json 和 formdata,两种方式请求的参数方式如截图所示;需要鉴权的,需要导入 auth 包,然后跟在请求方法后面。
1.url: 请求地址
2.data:字典,字节序列或文件对象,作为 Request 的内容
3.json: JSON 格式的数据,作为 Request 的内容
4.headers: 字典, HTTP 定制头
5.cookie: 字典或 CooKiJar, Request 中的 cookie
6.auth: 元祖,支持 HTTP 认证功能
7.files: 字典类型,传输文件
8.timeout: 设定超时时间,秒为单位
9.proxies: 字典类型,设定访问代理服务器,可以增加登录认证
10.allow_redirects: True/False,默认为 True,重定向开关
11.stream: True/False,默认为 True,获取内容立即下载开关
12.verity: True/False 默认 Ture,认证 ssl 证书开关
13.cert: 本地 ssl 证书路径
Response 返回方法详解:
1.response.status_code #返回的 http 响应状态码
2.response.content #返回的是 bytes 型也就是二进制的数据
3.response.headers # 返回的 http 请求头
4.response.json() # 返回响应中的 Json 数据
5.response.url # 返回 url
6.response.encoding # 返回响应的编码格式
7.response.cookies # 返回响应中的 cookie
8.response.text #返回的是 Unicode 型的数据。---文本
Session 详解:
对于需要前后接口依赖的接口测试,比如从上一个请求中获取token 用作下一个接口请求的参数去提交的话,用上面一种方法明显不合适,按照上面的方法需要定义很多变量,然后根据依赖去添加到对应的请求参数里,下面这种方法,使用session 会话的方式,贯穿前后,只要添加了一次,所有请求都能用到。(这里由于项目没有必要用到cookis,所以就放了个content-type和User-Agent)
import json import warnings import requests, unittest class TestCase_auto003(unittest.TestCase): def setUp(self) -> None: # 解决错误 ResourceWarning: Enable tracemalloc to get the object allocation traceback warnings.simplefilter('ignore', ResourceWarning) self.s = requests.session() # dict = json.dumps({"mobile": "18673844852", "pwd": "123456"}) # header = {"Accept": "*/*", "Accept-Encoding": "gzip, deflate, br", "Content-Type": "application/json", # "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1"} # rsp = self.s.post('http://192.168.1.173:28082/register/login/pws', data=dict, headers=header) # self.s.headers['Cookies'] = rsp.headers['Cookies'] self.s.headers['User-Agent'] = "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Mobile Safari/537.36" self.s.headers['Content-Type'] = "application/json" def testcase_auto001(self): dict = json.dumps({"mobile": "18673844852", "pwd": "123456"}) rsp = self.s.post('http://192.168.1.173:28082/register/login/pws', data=dict) print(rsp.text) self.assertEqual(200, rsp.status_code, msg='pass') def testcase_auto002(self): dict = json.dumps({"bid": 96497, "uid": 96497}) rsp = self.s.post('http://192.168.1.173:28082/versions/dynamic/personal', data=dict) print(rsp.text) if rsp.status_code == 200: print("pass") else: print("fail") def tearDown(self) -> None: pass if __name__ == "__main__": unittest.main() 解释: 1.这个是 cynthia 缺陷管理系统,登录的时候需要拿到响应里的cookie 作为下一个请求的 cookie,不然登录不上。 2.所以在 unittest 结构中,可以把登录操作放到 setup 里面,类似UI 自动化一样,登录放在初始化中。 3.在 setup 中把响应的 cookie 值,加入到请求的里面去了,同时添加了浏览器UA。 4.参数可以复用,从头到尾请求的变量都是 rsp,body 里的参数都是dict,编写简单方便。
1.定义一个变量 s 等于 requests 的 session 会话,后面都用这个s 的会话去发起请求。 2.定义一个变量等于 rsp 等于 s 去发起请求的结果。 3.s 会话请求的头文件中 cookie 需要添加 tokenid,不然登录不上,这个id 在rsp响应信息里。 4.因为响应信息是 json 字典格式,所以要添加到请求头里需要按照截图格式。 5.如果需要在字典中添加字段或者内容,按照截图的格式s.headers[‘xxx’]=“xxx”,如果字典中有这个 key:value,那么 value 值会直接更新,没有这个key 那么则会添加这个 key:value 到字典。 接口实战 使用 session 添加 token 到头文件中 在公司实际项目中,调接口首先需要获取 token,要先调用获取token 的请求,然后拿到 token 值之后,在后面接口中添加到头文件中。
self.session.headers.update({"token":rsp.json()['data']['token']})
通过在setup初始化方法中调用获取token,来拿到token的值,然后添加到整个session的 head 中去,后续请求中都不需要额外添加 head 了。
使用 ddt 对接口测试用例做参数化
ddt 数据驱动测试 首先 pip list ddt,安装第三方库,在代码最上方导入库中的data from ddt import ddt,data,在测试类前面声明 ddt,用@ddt
1、在测试用例前声明使用 data,用@data
运行结果中该用例执行了两次,分别输出的 test1 和 test2。
2、data 用法读取文件:
此方法需要解包,故需要用到 unpack 方法,在测试用例前声明@unpack 即可
解释
1:定义一个读取文件的方法,定义一个 list 数组,使用file 函数的open 方法,读取文件名为“txt1”的文件,以 read 的形式,编码格式为 utf-8,以for 循环的方式一直循环读取每一行,以\n 换行符为一行结尾,以逗号分隔每一个参数,最后返回data 值以便下方直接调用。
2:上面写了读取方法之后,在测试用例前,直接使用该方法即可,@data(*readfile())这种形式,接着使用@unpack 解包的方法即可。
三、request+unittest+HTMLTestRunner 生成测试报告
按照上述的方法编写好测试用例后,结合 unittest 框架生成报告的HTMLTestRunner来生成接口测试报告。
四、总结
这一篇教程只是接口测试中的小试牛刀,后续还有太多需要学习的,requests 库也不光可以用来做接口测试,包括爬虫之类的也是可以的,技术之路上永无止境,我们测试人员也需要多多努力。
这篇关于Python接口自动化测试之之request的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-03用FastAPI掌握Python异步IO:轻松实现高并发网络请求处理
- 2025-01-02封装学习:Python面向对象编程基础教程
- 2024-12-28Python编程基础教程
- 2024-12-27Python编程入门指南
- 2024-12-27Python编程基础
- 2024-12-27Python编程基础教程
- 2024-12-27Python编程基础指南
- 2024-12-24Python编程入门指南
- 2024-12-24Python编程基础入门
- 2024-12-24Python编程基础:变量与数据类型