pytest教程-27-分布式执行用例插件-pytest-xdist

embedded/2024/9/24 8:22:09/

上一小节我们学习了pytest随机执行用例插件-pytest-random-order,本小节我们讲解一下pytest分布式执行用例插件pytest-xdist。

前言

平常我们手工测试用例非常多时,比如有1千条用例,假设每个用例执行需要1分钟。如果一个测试人员执行需要1000分钟才能执行完,当项目非常紧急的时候,

我们会用测试人力成本换取时间成本,这个时候多找个小伙伴把任务分成2部分,于是时间缩减一半。如果是十个人一起执行,1000个用例理论上只需100分钟就能完成,时间缩短到了1/10。大大节省的测试时间,为项目节省了时间成本。同样道理,当我们测试用例非常多的时候,一条条执行,很显然会比较慢,那么如何让测试用例并行执行呢,这就是我们接下来要讲的pytest分布式执行插件pytest-xdist。

什么是 pytest-xdist

pytest-xdist 是 pytest 测试框架的一个插件,它提供了多进程、多线程和分布式测试的支持。其中,多进程并发是其中一个引人注目的特性,它允许你同时在多个进程中运行测试用例,以加速整个测试过程。

分布式用例设计原则

  • 用例之间是独立的,用例之间没有依赖关系,用例可以完全独立运行【独立运行】
  • 用例执行没有顺序,随机顺序都能正常执行【随机执行】
  • 每个用例都能重复运行,运行结果不会影响其他用例【不影响其他用例】

安装插件

pip install pytest-xdist

基本使用

在安装了 pytest-xdist 之后,你可以在命令行中使用 -n 参数来指定并行执行的进程数。例如,如果你想要使用 4 个进程来运行测试,你可以这样做:

pytest -n 4

这将启动 4 个 worker 进程来并行执行测试。

控制执行顺序

默认情况下,pytest-xdist 是无序执行测试的。如果你需要按照一定的顺序执行测试,可以使用 --dist 参数。例如:

  • --dist=loadscope:按照模块(module)和测试类(class)来分组,确保同一个组的测试用例在同一进程中执行。
pytest -n 4 --dist=loadscope
  • --dist=loadfile:按照文件名来分组,确保同一个文件中的测试用例在同一进程中执行。
pytest -n 4 --dist=loadfile
  • --dist loadgroup: 测试按xdist_group标记分组。每组作为一个整体分配给可用的执行器。这保证了具有相同xdist_ group名称的所有测试都在同一个worker中运行。
@pytest.mark.xdist_group(name="group1")
def test1():passclass TestA:@pytest.mark.xdist_group("group1")def test2():pass 

使用示例

顺序执行

import time
import pytest
def test_01():print('case 1')time.sleep(2)assert 1 == 1
def test_02():print('case 2')time.sleep(2)assert 1 == 1
def test_03():print('case 3')time.sleep(2)assert 1 == 1
def test_04():print('case 4')time.sleep(2)assert 1 == 1
def test_05():print('case 5')time.sleep(2)assert 1 == 1
if __name__ == '__main__':# 顺序执行pytest.main(['-s', 'test_78.py'])

325b1c526987d50659b46096f6735a8a.png

并行执行:加-n参数后面数字是并行数

import time
import pytest
def test_01():print('case 1')time.sleep(2)assert 1 == 1
def test_02():print('case 2')time.sleep(2)assert 1 == 1
def test_03():print('case 3')time.sleep(2)assert 1 == 1
def test_04():print('case 4')time.sleep(2)assert 1 == 1
def test_05():print('case 5')time.sleep(2)assert 1 == 1
if __name__ == '__main__':# 并行执行 加-n参数后面数字是并行数pytest.main(['-s', 'test_78.py', '-n=4', '--html=report.html', '--self-contained-html'])

3a31e0378023cc87755da865d09b9c7b.png

主从分布式测试

pytest-xdist 还支持主从(master-slave)模式,你可以在多台计算机上运行测试。首先,你需要在所有计算机上安装 pytest-xdist。然后,你可以在主机(master)上启动测试,同时在从机(workers)上启动监听。

主机(Master)配置

在主机上,创建一个配置文件(例如 pytest.ini),并设置以下参数:

[pytest]
addopts = -n auto

然后,在主机上运行以下命令:

pytest --dist=loadscope

从机(Worker)配置

在每台从机上,运行以下命令来启动监听:

pytest --dist=loadscope

这将使从机准备好接收来自主机的测试任务。

示例项目结构

假设你有一个名为 MyPytestDemo 的项目,其结构如下:

MyPytestDemo/
|-- conftest.py
|-- test_module1.py
|-- test_module2.py

在 conftest.py 中,你可以定义 fixtures:

# conftest.py
import pytest@pytest.fixture(scope="session")
def setup():# 设置测试yield# 清理测试

在 test_module1.py 和 test_module2.py 中,你可以编写测试用例:

# test_module1.py
import pytestdef test_example1(setup):# 测试逻辑def test_example2(setup):
# 测试逻辑

运行分布式测试

在主机上运行分布式测试:

pytest --dist=loadscope -n auto MyPytestDemo/

这将在所有安装了 pytest-xdist 的计算机上并行执行测试。

cf67903e74b5404db5f6899add7c903a.jpeg


http://www.ppmy.cn/embedded/21881.html

相关文章

PotatoPie 4.0 实验教程(23) —— FPGA实现摄像头图像伽马(Gamma)变换

为什么要进行Gamma校正 图像的 gamma 校正是一种图像处理技术,用于调整图像的亮度和对比度,让显示设备显示的亮度和对比度更符合人眼的感知。Gamma 校正主要用于修正显示设备的非线性响应,以及在图像处理中进行色彩校正和图像增强。 以前&am…

2024/4/28 C++day5

有以下类&#xff0c;完成特殊成员函数 class Person { string name; int *age; } class Stu:public Person { const double score; } #include <iostream> #include <string> using namespace std; class Person { string name; int *age ; publi…

构建未来:利用服务器打造个性化创意项目和在线社区

在这个数字化快速发展的时代&#xff0c;服务器不仅仅是大型企业的专属。个人和小型团队也可以利用服务器的强大能力&#xff0c;开展各种创意项目和建立在线社区。这种趋势不仅推动了技术的民主化&#xff0c;还为个人提供了展示创意和构建影响力的新平台。本文将探讨如何利用…

【 AIGC 研究最新方向(下)】面向平面、视觉、时尚设计的高可用 AIGC 研究方向总结

目前面向平面、视觉、时尚等设计领域的高可用 AIGC 方向有以下 4 种&#xff1a; 透明图层生成可控生成图像定制化SVG 生成 本篇&#xff08;下篇&#xff09;介绍 3、4&#xff0c;上篇在&#xff1a;https://blog.csdn.net/weixin_44212848/article/details/138035279?spm…

常用的Git和Linux命令

Git命令&#xff1a; Git是一个分布式版本控制系统&#xff0c;它可以帮助开发者跟踪和管理代码的变化。 git init&#xff1a;初始化一个Git仓库 git clone&#xff1a;克隆一个已有的Git仓库到本地 git add&#xff1a;将当前目录下的修改添加到暂存区 git commit&#xff1…

Ansible自动化运维工具主机清单配置

作者主页&#xff1a;点击&#xff01; Ansible专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年4月24日12点21分 Ansible主机清单文件用于定义要管理的主机及其相关信息。它是Ansible的核心配置文件之一&#xff0c;用于Ansible识别目标主机并与其建立连接。 …

前端复习资料

前端复习资料 落叶的位置&#xff0c;谱出一首诗&#xff0c;时间在消逝&#xff0c;我们的故事。 这篇文章呢&#xff0c;整理写给需要的前端同学的。 核心知识&#xff0c;必须掌握的&#xff0c;也是最基础的&#xff0c;譬如浏览器模型&#xff0c;渲染原理&#xff0c;JS…

LabVIEW飞机机电系统综合测试平台

LabVIEW飞机机电系统综合测试平台 在现代航空领域&#xff0c;机电系统的准确性与可靠性对飞行安全至关重要。针对飞机机电管理计算机&#xff08;UMC&#xff09;复杂度增加、测试覆盖率低、效率不高等问题&#xff0c;开发了一套基于LabVIEW的机电系统综合测试平台。平台通过…