pytest-xdist:远程多主机 - 分布式运行自动化测试

简介: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/

历史攻略:

Pytest用例自定义 - 重复、并行、串行

Pytest+Yaml 数据驱动测试用例

pytest+allure安装和使用

pytest:并行和并发运行用例

python:消息推送 - 企业微信机器人推送

让你的pytest日志更有序:配置和使用技巧

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

执行结果:在远程服务器端会生成一份相应的项目数据,因为我们使用的是 ./ 即 把当前项目远程拷贝到目标服务器执行

相关推荐
bug404_4 小时前
分布式大语言模型服务引擎vLLM论文解读
人工智能·分布式·语言模型
lucky_syq5 小时前
Spark算子:大数据处理的魔法棒
大数据·分布式·spark
摸鱼仙人~5 小时前
ImportError: cannot import name ‘FixtureDef‘ from ‘pytest‘
conda·pytest·fastapi
昔我往昔7 小时前
项目中分库分表的分布式ID如何生成
分布式
m0_748233648 小时前
【分布式】Hadoop完全分布式的搭建(零基础)
大数据·hadoop·分布式
roman_日积跬步-终至千里8 小时前
【分布式理论14】分布式数据库存储:分表分库、主从复制与数据扩容策略
数据库·分布式
薇晶晶9 小时前
如何安装Hadoop
大数据·hadoop·分布式
Jayden10 小时前
电商分布式场景中如何保证数据库与缓存的一致性?实战方案与Java代码详解
数据库·分布式·缓存·数据库缓存一致性
唐古乌梁海10 小时前
【pytest-jira】自动化用例结合jira初版集成思路
pytest·jira
LUCIAZZZ11 小时前
从Redis实现分布式锁的问题延伸到Redisson的使用入门
java·数据库·spring boot·redis·分布式·spring cloud