简介: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/
安装:
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
执行结果:在远程服务器端会生成一份相应的项目数据,因为我们使用的是 ./ 即 把当前项目远程拷贝到目标服务器执行
感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取