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

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

相关推荐
寻求出路的程序媛5 分钟前
分布式 & 高性能 & 高可用 体系、学习重点、面试点
分布式·后端·面试·性能优化
Tizzy JJ20 分钟前
Python + pytest 接口自动化测试框架实战:从零搭建企业级项目骨架
开发语言·python·pytest
东小黑1 小时前
mac安装RabbitMQ
分布式·rabbitmq
Tizzy JJ1 小时前
接口自动化测试实战:如何围绕真实业务场景设计高质量用例
python·自动化·pytest
zhougl9962 小时前
从ZooKeeper到微服务生态:分布式协调核心原理
分布式·微服务·zookeeper
FakeOccupational3 小时前
【p2p、分布式,区块链笔记 IPFS】网关+多地址+HTTP RPC API+kubo-rpc-client
分布式·区块链·p2p
bgy66663 小时前
Ceph 分布式存储完整实战指南:架构、部署与全场景运维
分布式·ceph·架构
夫唯不争,故无尤也18 小时前
分布式训练全栈地图
分布式·ddp·fsdp·ray·verl
国科安芯19 小时前
星载CAN总线通信网络中抗辐射MCU的通信可靠性设计分析
网络·人工智能·分布式·单片机·嵌入式硬件·架构
随遇而安zx1 天前
SpringCloud---Spring Cloud 分布式任务调度(XXL-Job / ElasticJob)
分布式·spring cloud