python接口自动化-xdist(5)
一、 使用场景 在日常功能测试用例非常多时,比如有1千条用例,假设每个用例执行需要1分钟,如果单个测试人员执行需要1000分钟才能跑完 当项目非常紧急时,会需要协调多个测试资源来把任务分成两部分,于是执行时间缩短一半,如果有10个小伙伴,那么执行时间就会变成十分之一,大大节省了测试时间 为了节省项目测试时间,10个测试同时并行测试,这就是分布式执行 同样道理,当我们自动化测试用例非常多的时候, 一条条按顺序执行会非常慢,pytest-xdist的出现就是为了让自动化测试用例可以分布式执行,从而大大节省自动化测试执行的时间 pytest-xdist是属于进程级别的并发 1、分布式执行用例的设计原则(重点) 当然自动化测试用例要想能够分布式执行,还是要满足一些条件的: 2、分布式执行用例的设计原则(重点) 用例之间相互独立:保证用例之间没有依赖关系,用例可以完全独立运行 用例没有执行顺序:保证随机顺序的执行用例都可正常执行 用例之间互不影响:保证用例的运行结果不会影响到其他用例 3、
pip install pytest-xdist pytest -s -n 2(auto 自动检测cpu核数,最大量并发)
二、 失败重跑
1、安装插件:
pip3 install pytest-rerunfailures
在pytest.ini文件中添加: addopts = -vs --reruns=5 --reruns-delay=3 --reruns n(重新运行次数),--reruns-delay m(等待运行秒数)
实战代码
import pytest, requests class TestLogin: # 1.正确流程 def test_login01(self): response = requests.post(url=http://127.0.0.1:5000/user_login, data={"username": "xiaohua", "password": "a123456"}) res = response.json() print(res) assert {code: 1000, msg: 登录成功} == res # 2.用户名错误 def test_login02(self): response = requests.post(url=http://127.0.0.1:5000/user_login, data={"username": "xiaoniu1", "password": "a123456"}) res = response.json() print(res) assert "用户名或密码错误" in str(res) # 3.用户名为空 def test_login03(self): response = requests.post(url=http://127.0.0.1:5000/user_login, data={"username": "", "password": "a123456"}) res = response.json() print(res) assert res["msg"] == "用户名不能为空!" and res["code"] == "1003" # 断言响应结果中的value值是否和预期结果一致 # 4.密码错误 def test_login04(self): response = requests.post(url=http://127.0.0.1:5000/user_login, data={"username": "xiaoniu", "password": "a1234567"}) res = response.json() print(res) assert {code: 1005, msg: 用户名或密码错误!} == res # 5.密码为空 def test_login05(self): response = requests.post(url=http://127.0.0.1:5000/user_login, data={"username": "xiaoniu", "password": ""}) res = response.json() print(res) assert {code: 1004111, msg: 密码不能为空!} == res if __name__ == "__main__": # pytest.main([-vs, ./test_pytest04.py]) pytest.main([-vs, ./test_pytest04.py, -n=auto]) # 多线程执行