使用背景:

  1. 大型测试套件:当你的测试套件非常庞大,包含了大量的测试用例时,pytest-xdist可以通过并行执行来加速整体的测试过程。它利用多个进程或计算机的计算资源,可以显著减少测试执行的时间。

  2. 高计算资源需求:某些测试场景可能需要大量的计算资源,例如进行复杂的计算、模拟或数据处理。在这种情况下,使用pytest-xdist可以将测试任务分发给多个进程或计算机,以充分利用计算资源,加快测试速度。

  3. 并行测试需求:当你需要并行执行多个测试用例时,pytest-xdist非常有用。它可以将测试用例分发给多个进程或计算机,同时运行多个测试,从而提高整体的测试效率。

使用前提:

  1. 测试用例独立性:确保测试用例之间相互独立,不会相互干扰或依赖。由于pytest-xdist并行执行测试用例,测试用例之间的顺序是不确定的。因此,每个测试用例应该独立于其他测试用例,能够以任意顺序执行而不会影响结果。

  2. 数据共享和同步:如果测试用例之间需要共享数据或进行某种形式的同步操作,确保在使用pytest-xdist时正确处理这些情况。例如,可以使用共享的数据库或文件系统来存储和访问共享数据,或者通过网络进行通信来实现进程或计算机之间的同步。

  3. 并发问题:并行执行测试用例可能会引发并发问题,例如资源竞争、死锁等。在设计测试用例时,要特别注意并发问题,并采取适当的措施来避免或解决这些问题,例如使用互斥锁、线程安全的数据结构等。

  4. 结果收集和报告:由于测试用例在多个进程或计算机上执行,因此结果收集和报告的过程可能会有所不同。确保使用适当的机制来收集和汇总测试结果,并生成全面和准确的测试报告。

  5. 资源合理的分配使用:并行执行测试用例可能会占用大量的计算资源和内存。确保在使用pytest-xdist时,计算资源和内存的分配是合理的,以避免资源耗尽或系统崩溃

使用快速入门:

  1. 插件安装

pip3 install pytest-xdist -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

2.  编写耗时大型用例

# content of test_example.py

import pytest

@pytest.mark.parametrize('input', [1, 2, 3, 4, 5])
def test_square(input):
result = input ** 2
assert result == input * input

定义了一个名为test_square的测试用例。它使用@pytest.mark.parametrize装饰器来指定多个输入值进行测试。在这个例子中,我们提供了输入值1、2、3、4和5

  3. 使用pytest-xdist进行分布式测试,需要在命令行中指定使用的进程数。例如,要使用4个进程进行分布式测试,可以运行以下命令:

pytest -n 4 test_example.py

  -n参数指定要使用的进程数。在这个例子中,我们使用了4个进程。当你运行上述命令时,pytest-xdist会将测试用例分发给4个进程,并在这些进程上并行执行测试。每个进程将负责执行一部分测试用例。

  4. pytest-xdist不仅可以在多进程上运行测试,还可以在多个计算机上进行分布式测试

    4.1 安装pytest-xdist插件:首先,确保在所有计算机上都安装了pytest-xdist插件。可以使用pip或conda等包管理工具进行安装。

    4.2 配置主机和从机:选择一台计算机作为主机,其他计算机作为从机。在主机和从机上创建一个配置文件(例如pytest.inipyproject.toml),并设置以下参数:

# pytest.ini

[pytest]
addopts = -n auto

    4.3 启动从机:在每台从机上运行以下命令,使其准备好接收测试任务:

pytest --dist=loadscope

    4.4 启动主机:在主机上运行以下命令,开始分布式测试:

pytest test_example.py

使用小结:

  1. 并不是并发进程数越多好,-n值越大越好,因为pytest-xdist的并发数量取决于多个因素,如CPU核数(主要),内存,io等计算资源。

  2. 测试用例很少,计算并不复杂,徒增繁琐。

  3.  测试套件很大时,合理利用pytest-xdist的并发数量将会节约约近一半的时间。

  4. pytest-xdist默认是无序执行的,可以通过 --dist 参数来控制顺序

 

分布式测试插件 pytest-xdist 使用详解的更多相关文章

  1. Vue插件编写、用法详解(附demo)

    Vue插件编写.用法详解(附demo) 1.概述 简单来说,插件就是指对Vue的功能的增强或补充. 比如说,让你在每个单页面的组件里,都可以调用某个方法,或者共享使用某个变量,或者在某个方法之前执行一 ...

  2. Sublime Text 编辑器 插件 之 "Sublime Alignment" 详解

    作者:shede333主页:http://my.oschina.net/shede333版权声明:原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | [Creative Commons BY- ...

  3. 【eclipse插件开发实战】 Eclipse插件开发6——eclipse在线翻译插件Translator开发实例详解

    Eclipse插件开发6--eclipse在线翻译插件Translator开发实例详解 在上一篇文章中讲到了一个简单的eclipse插件开发实例,主要是对插件工程的基本创建步骤进行了讲解,这篇文章当中 ...

  4. 【eclipse插件开发实战】 Eclipse插件开发5——时间插件Timer开发实例详解

    Eclipse插件开发5--时间插件Timer开发实例详解 这里做的TimeHelper插件设定为在菜单栏.工具栏提供快捷方式,需要在相应地方设置扩展点,最后弹出窗体显示时间. 在上一篇文章里创建好了 ...

  5. amazeui中的js插件有哪些(详解功能)

    amazeui中的js插件有哪些(详解功能) 一.总结 一句话总结: 二.amazeui中的js插件有哪些 1.UI 增强 警告框Alert 按钮交互Button 折叠面板Collapse 下拉组件D ...

  6. 《手把手教你》系列基础篇(八十)-java+ selenium自动化测试-框架设计基础-TestNG依赖测试-番外篇(详解教程)

    1.简介 经过前边几篇知识点的介绍,今天宏哥就在实际测试中应用一下前边所学的依赖测试.这一篇主要介绍在TestNG中一个类中有多个测试方法的时候,多个测试方法的执行顺序或者依赖关系的问题.如果不用de ...

  7. Pytest系列(16)- 分布式测试插件之pytest-xdist的详细使用

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 平常我们功能测试用例非常多时 ...

  8. WordPress代码高亮插件SyntaxHighlighter终极使用详解

    子曰: 工欲善其事,必先利其器.作为码农一枚,再加上站长这个已经不再光鲜的称呼,岂能没有一款经济实用.操作简单.而且功能必须强大.样式也必须好看的Wordpress代码高亮插件?!作为一个视代码如生命 ...

  9. Web性能压力测试工具之Apache AB 详解

    下载安装地址: http://httpd.apache.org/download.cgi yum install httpd-tools http://www.apachelounge.com/dow ...

  10. linux ab压力测试工具及ab命令详解

    原文链接:https://blog.csdn.net/qq_27517377/article/details/78794409 yum -y install httpd-tools ab -v 查看a ...

随机推荐

  1. ICLR 2018-A Simple Neural Attentive Meta-Learner

    Key 时序卷积+注意力机制(前者从过去的经验中收集信息,而后者则精确定位具体的信息.) 解决的主要问题 手工设计的限制:最近的许多元学习方法都是大量手工设计的,要么使用专门用于特定应用程序的架构,要 ...

  2. ubuntu搜狗输入法显示简体中文,输入却是繁体中文问题解决方案

    一.现场重现 我的ubuntu版本是20.04,搜狗输入法版本是2.4.在输入的时候发生了如下场景: 明明输入法上是简体中文,可是打出来就变成了繁体中文! 二.解决方案 1.尝试 网上许多答案都是按下 ...

  3. 程序员的 Windows 工具箱「GitHub 热点速览」

    如何精简 Windows 并快速配置开发环境呢?本周特推的 winutil 是一个程序员的 Windows 工具箱,它提供了开发工具的一键安装以及减少系统垃圾的功能,一切为了简洁.高效.同样高效的还有 ...

  4. pyinstaller打包exe

    1.执行环境说明 python版本3.7直接使用pip进行安装pywin32.pyinstallerpip install pywin32pip install pyinstaller 2.使用了第三 ...

  5. Java实现Kafka生产者和消费者的示例

    Kafka简介 Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.Kafka的目标是为处理实时数据提供一个统一.高吞吐.低延迟的平台. 文章持续更新,微信搜索「 ...

  6. 2个场景实例讲解GaussDB(DWS)基表统计信息估算不准的处理方案

    摘要:通过2个实例场景讲解GaussDB(DWS)运维解决方案. 本文分享自华为云社区<GaussDB(DWS)运维 -- 基表统计信息估算不准的常见场景及处理方案>,作者:譡里个檔. 场 ...

  7. java(方法定义、调用、重载)

    1.方法 Java方法是语句的集合,它们在一起执行一个功能 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 设计方法的原则:就是一个方法只完成一个功能, ...

  8. rust随笔

    # 第二章 语言精要 ​ 好读书,不求甚解:每有会意,便欣然忘食. **动手,动手,动手!!!** ## 语句与表达式 Rust 中语法可以分成两大类:语句 statement 和表达式 expres ...

  9. 基于Spark的大规模日志分析

    摘要:本篇文章将从一个实际项目出发,分享如何使用 Spark 进行大规模日志分析,并通过代码演示加深读者的理解. 本文分享自华为云社区<[实战经验分享]基于Spark的大规模日志分析[上进小菜猪 ...

  10. 区块链的Token机制如何理解?

    区块链的Token机制如何理解? 为了更好的理解区块链和Token的关系,今天专门基于互联网中的内容,做了下筛选过滤,从而可以让大家更好的理解,对于Token,如果是从事过开发的同学来说,比如容易理解 ...