前言
当测试用例数量上去以后,执行一遍所有测试用例,那么执行速度就会比较慢,除了多线程来提高效率外,pytest也提供pytest-xdist插件来做分布式执行,从而减少测试时间,它属于进程级别的并发
pytest-xidst安装
可以直接通过pip进行安装
pip install pytest-xdist
如果一直下载失败,推荐使用国内镜像源下载
pip install pytest-xdist -i http://pypi.douban.com/simple/
分布式测试用例的设计原则:
1、独立运行:用例之间互相独立,并且没有依赖关系,还可以完全独立运行
2、随机执行,用例执行不强制按顺序执行,支持顺序执行或随机执行
3、不影响其他用例:每个用例都能重复运行,运行结果不会影响其他用例
使用方法
1、设置运行cpu核数
pytest -n x
-n x:n:设置cpu核数参数 ,x:cpu核数个数(也可以设置auto,表示使用所有cpu核数运行,但此运行方式cpu使用率会占用很高)
直接上例子,对比运行时间能够提升多少
import time def test_01(): time.sleep(2) print('用例一执行') def test_02(): time.sleep(2) print('用例二执行') def test_03(): time.sleep(2) print('用例三执行') def test_04(): time.sleep(2) print('用例四执行')
pytest test_xdist.py -sv输出结果:
单进程4个测试用例执行时间为8.07s
那么接下来使用pytest test_xdist.py -n auto输出结果:
gw0、1、2、3表示用例执行的进程编号,这表示4个测试用分别在4个子进程中并行运行,性能为4.92s,可以看到远比单进程运行要效率很多,快整整3s左右
2、调试代码
pytest-xdist插件也提供--looponfail参数来帮助调试测试用例的代码,它会自动监视代码的修改。当执行到错误用例时,它会停住,并打印出错误用例和错误代码行数,等待你修改代码完毕后,会单独运行这个错误用例,如果错误用例执行通过后,会再次运行所有测试用例。所有用例都测试通过后,需要手动ctrl+c退出
示例代码:
import time def test_01(): time.sleep(2) print('用例一执行') def test_02(): time.sleep(2) print('用例二执行') def test_03(): time.sleep(2) assert 1 == 2 print('用例三执行') def test_04(): time.sleep(2) print('用例四执行')
cmd窗口当前路径下执行pytest test_xdist.py -sv --looponfail,输出结果如下:
出现waiting for changes就表示执行已经暂停住,这时候就可以对代码内容进行修改,这里报错提示test_03的断言错误,那么将assert 1 == 2 改为正确的 assert 2 == 2。当你修改完成后,重新回到cmd窗口才会开始执行,所以并不需要那么急地修改代码,pytest监测到代码内容已经更改,就会继续执行,将fail的测试用例重新运行,运行通过后,再将所有测试用例执行
总结
pytest-xdist插件帮助我们大大提高了测试用例执行效率,也提供更方便的代码调试参数,是一个功能十分强大的pytest的插件
标签:--,xdist,用例,pytest,time,test,执行 From: https://www.cnblogs.com/trystudy/p/17262435.html