简介:pytest-xdist插件使用新的测试执行模式扩展了pytest,最常用的是在多个CPU之间分发测试以加快测试执行,即
pytest -n auto
同时也是一个非常优秀的分布式测试插件,分别支持ssh和socket两种方式实现master和worker的远程通讯。需要特别注意的是rsync功能被弃用,因为它的实现在远程工作者中再现开发环境方面存在缺陷,而且没有明确的解决方案。出于这个原因,rsync计划在4.0版中删除,让团队专注于一组较小的功能。请注意,SSH和套接字服务器不是计划删除的,因为它们是execnet功能集的一部分。
测试用例分布式运行的优势:
1. 测试用例之间的运行是完全独立,没有依赖关系。
2. 既支持按顺序,也随机执行,测试用例执行不强制按照顺序执行。
3. 每个用例都可以重复执行,并且运行结果,都不会影响其他用例。
官方文档:
https://pytest-xdist.readthedocs.io/en/stable/
历史攻略:
Playwright - 04:pytest并行、并发、运行浏览器兼容性测试
安装:
pip install pytest-xdist
由于SSH的方式相对写得云里雾里。本文使用socket的方式演示。
原理:开启socket服务,服务间进行信息交换和传递
下载文件:socketserver.py
https://github.com/pytest-dev/execnet/blob/master/src/execnet/script/socketserver.py
# 官网的链接是下面这个,其实是错的,会报404错误 (估计是没更新或者不维护了)
# 应该是最上面这个链接。
https://raw.githubusercontent.com/pytest-dev/execnet/master/execnet/script/socketserver.py
case源码:test_case/test_demo.py
开启服务:
python socketserver.py
使用socket远程执行:
路径不好判断的话,直接使用 ./
最好使用 -n auto 不然传递文件很慢。单个work很慢。
pytest -n auto -d --tx socket=127.0.0.1:8888 --rsyncdir ./
# 在main.py 内 这些方式可能是无效的。
pytest.main(["-n", "auto", "-d" "--tx", "socket=127.0.0.1:8888", "--rsyncdir ./"])
云服务器开启socket服务案例:
python socketserver.py
执行结果:在远程服务器端会生成一份相应的项目数据,因为我们使用的是 ./ 即 把当前项目远程拷贝到目标服务器执行