pytest测试框架pytest-xdist插件并发执行测试用例

Pytest提供了丰富的插件来扩展其功能,本章介绍下插件pytest-xdist,主要是提供并行测试、分布式测试、循环测试等功能,可以加快测试速度。

pytest-xdist官方显示没有严格的python和pytest版本限制。

pytest-xdist安装

使用pip命令安装: pip install pytest-xdist (安装在pytest工程所运行的python环境,python的安装目录或者虚拟环境目录,可以参考之前文章查看pycharm配置pytest运行环境)

通过pycharm安装:打开设置,按照如下图中安装插件(windows系统)

pytest-xdist运行

执行时添加参数-n

  • 指定执行的并发数:-n 4,表示4个并发
  • 自动检测 CPU 的核心数并启动相应数量的进程,可以使用:-n auto

举例:测试文件有18个测试用例,每个测试用例通过time.sleep(1)沉睡1s

1)不填加-n参数执行

我们通过cmd窗口执行用例:

pytest.exe -v C:/Users/wsybb520/PycharmProjects/pytestProject2/test_dir1/test_case3.py

执行后结果显示18s完成

2) 添加参数-n auto通过多进程执行

pytest.exe -v -n auto C:/Users/wsybb520/PycharmProjects/pytestProject2/test_dir1/test_case3.py

执行结果如下图,显示4个workers 执行18个用例,用时7.27s,但是用例执行顺序也会被打乱。

通过以上示例可以看出并发执行会减少执行时间,提升测试效率,尤其用例很多的时候更加明显。

配合pytest-html插件生成测试报告,测试报告打开如下

pytest.exe -v -n auto --html=report.html C:/Users/wsybb520/PycharmProjects/pytestProject2/test_dir1/test_case3.py

执行时添加参数--dist

--dist参数用于控制测试用例的执行顺序和分组方式。

l --dist=load (默认) :将待处理的测试发送给任何可用的工作器,不保证任何顺序。

l --dist=loadscope:按照模块(module)和测试类(class)来分组,确保同一个组的测试用例在同一进程中执行。

l --dist=loadfile:按照文件名来分组,确保同一个文件中的测试用例在同一进程中执行。

l --dist=loadgroup:按照 xdist_group 标记分组。之前我们文章介绍使用@pytest.mark可自定义标记,此时使用@pytest.mark.xdist_group做标记,被标记的将分在同一个执行器执行。

举例:添加参数--dist=loadscope

测试文件函数级测试用例5个,测试类中测试用例18个,每个测试用例都使用time.sleep(1)沉睡1s,

预期结果:使用2个进程,添加参数时,因为测试类级用例要分在一个执行器中,整体大于18s;如果不带参数23条用例耗时肯定小于18s,在13s左右。

我们看结果:

添加执行参数--dist=loadscope,耗时时19.9s

不添加参数,耗时是13.7s

举例:添加参数--dist=loadgroup

测试文件函数级测试用例5个,测试类中测试用例18个,每个测试用例都使用time.sleep(1)沉睡1s,

预期结果使用2个进程,添加参数时,因为测试类级用例要分在一个执行器中,整体大于18s;如果不带参数23条用例耗时肯定小于18s,在13s左右。

我们看结果:

添加执行参数--dist=loadgroup,耗时时19.77s

pytest.exe -v -n 2 --dist=loadgroup --html=report/report.html C:/Users/wsybb520/PycharmProjects/pytestProject2/test_dir1/test_case6.py

不添加参数,耗时是13.61s

使用注意事项

因为多进程执行并且用例执行顺序会被打乱,因此大家使用时需要注意以下项目。

测试用例独立性:由于 pytest-xdist 并行执行测试用例,测试用例之间的顺序是不确定的。因此,如果测试用例之间需要共享数据或进行某种形式的同步操作,需要确保在使用 pytest-xdist 时正确处理这些情况。

并发和资源问题:并行执行测试用例可能会引发并发问题,如资源竞争、死锁,可能会占用大量的计算资源和内存。在设计测试用例时,要特别注意并发问题,并采取适当的措施来避免或解决这些问题。

共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”

-----指水滴不断地滴,可以滴穿石头;

-----比喻坚持不懈,集细微的力量也能成就难能的功劳。

----感谢读者的阅读和学习,谢谢大家。

---祝愿大家都能够龙腾虎跃,步步高升!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/735170.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

高中数学:数列-等差数列、等比数列的和与通项公式的关系

一、等差数列 1、通项公式与求和公式 2、性质 性质1 求和公式比上n,依然是一个等差数列。 性质2 等差数列中,每相邻m项和,构成的数列,依然是等差数列,公差:m2d 二、等比数列 1、通项公式与求和公式 a…

「GPT源码探索」:从ChatPaper到学术论文GPT的二次开发实践

前言 本文的前两个部分最早是属于此旧文的《学术论文GPT的源码解读与微调:从ChatPaper到七月论文审稿GPT第1版》,但为了每一篇文章各自的内容更好的呈现,于是我今天做了以下三个改动 原来属于mamba第五部分的「Mamba近似工作之线性Transfor…

数据库原理与安全复习笔记

1 概念 产生与发展:人工管理阶段 → \to → 文件系统阶段 → \to → 数据库系统阶段。 数据库系统特点:数据的管理者(DBMS);数据结构化;数据共享性高,冗余度低,易于扩充&#xff…

自动控制原理出射角计算

背景:突然发现自己出射角不会算 被减数是零点到极点的角度,减数是极点到极点的角度

毕业设计——可视化实验仿真平台

该程序用于毕业设计,架构为前后端分离技术,涉及技术包括vue3,SpringBoot,spring-secrity,Redis,需要者进群769119544进行相关咨询。 程序分为三个角色:学生、老师、管理员。使用了spring-secrit…

Vision Pro的3D跟踪能力:B端应用的工作流、使用教程和经验总结

Vision Pro的最新3D跟踪能力为工业、文博、营销等多个B端领域带来了革命性的交互体验。本文将详细介绍这一功能的工作流、使用教程,并结合实际经验进行总结。 第一部分:工作流详解 一、对象扫描 使用Reality Composer iPhone应用程序对目标对象进行3D扫描,如吉他或雕塑,…

从关键新闻和最新技术看AI行业发展(2024.6.3-6.16第二十五期) |【WeThinkIn老实人报】

写在前面 【WeThinkIn老实人报】旨在整理&挖掘AI行业的关键新闻和最新技术,同时Rocky会对这些关键信息进行解读,力求让读者们能从容跟随AI科技潮流。也欢迎大家提出宝贵的优化建议,一起交流学习💪 欢迎大家关注Rocky的公众号&…

一键智能整理TXT文档,高效删除连续行,轻松提升工作效率与数据管理效能

信息爆炸的时代,TXT文档作为我们日常工作中不可或缺的一部分,承载着大量的数据和信息。然而,随着文档内容的不断增加,连续重复的行数也逐渐增多,这不仅影响了文档的整洁度,还大大降低了我们处理数据的效率。…

idea添加文档注释

一、easy javadoc插件 在settings的plugins中下载easy javadoc插件。 安装完成后重启idea,再次打开settings界面。会出现easyDoc相关配置。 二、设置模版以及使用 类描述模版参考设置: /** * 类描述 -> * * Author: ywz * Date: $Date$ */ 方法描述…

Vue80-全局路由守卫:前置、后置

一、路由守卫的定义 二、需求 在第三步,做校验! 三、代码实现 3-1、前置路由守卫 注意,此时就不能将router一开始就暴露出去了! to和from是路由组件的信息。 写法一: 写法二: 缺点:若是路由…

马尔可夫聚类算法

马尔可夫聚类算法(Markov Clustering Algorithm,MCL)是一种用于图聚类的算法,广泛应用于生物信息学、社交网络分析、推荐系统等领域。 其核心思想是模拟随机游走过程,通过迭代地扩散和收缩图上的概率分布来识别图中的…

Python17 多进程multiprocessing

1.多进程与多线程的区别 在Python中,多线程(multithreading)和多进程(multiprocessing)是两种并行执行任务的方式,它们有一些关键的区别: 进程和线程的基本区别: 进程:进…

【ajax基础】回调函数地狱

一:什么是回调函数地狱 在一个回调函数中嵌套另一个回调函数(甚至一直嵌套下去),形成回调函数地狱 回调函数地狱存在问题: 可读性差异常捕获严重耦合性严重 // 1. 获取默认第一个省份的名字axios({url: http://hmaj…

第一次接触Swing

学习java版的HslCommunication发现使用的是Swing,所以了解了一下~ 了解: Swing是Java的标准库(Java Foundation Classes, JFC)的一部分,用于构建桌面应用程序的图形用户界面(GUI)。它是Java AWT…

Java程序之百鸡百钱问题

题目: 百钱买百鸡的问题算是一套非常经典的不定方程的问题,题目很简单:公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,用100文钱买一百只鸡,其中公鸡,母鸡,小鸡都必须要有,…

JWT介绍及其基本使用

JWT介绍及其基本使用 官网:https://jwt.io/ 什么是JWT 全称:JSON Web Token(JSON Web令牌) 一个开放标准(RFC 7519) ,它定义了一种紧凑和自包含的方式, 用于作为 JSON 对象在各方之间安全地传输信息。此信…

Day 30:100344. 使二进制数组全部等于1的最小操作次数Ⅰ

Leetcode 100344. 使二进制数组全部等于1的最小操作次数Ⅰ 给你一个二进制数组 nums 。 你可以对数组执行以下操作 任意 次(也可以 0 次): 选择数组中 任意连续 3 个元素,并将它们 全部反转 。 反转 一个元素指的是将它的值从 0 变…

云资源管理系统-项目部署

云资源管理系统-项目部署 大家好,我是秋意零。 今天分享个人项目同时也是个人毕设项目,云平台资源管理系统。该系统具备对OpenStack最基本资源的生命周期管理,如:云主机、云盘、镜像、网络。 该篇主要介绍,项目在Li…

idea2022激活

下载激活脚本 解压后,打开文件夹如下:ja-netfilter.jar 为激活补丁: 复制补丁所在的整个文件夹到硬盘某个位置 将 ja-netfilter补丁所在的整个文件夹移动到电脑上某个位置,我是放到了 D 盘下: (路径中不…

【职场人】职场故事:与邀功精的共舞

在我的职业生涯中,我遇到过一位特别引人注目的同事,我们都叫他李经理。他的工作能力并不差,但他有一个习惯,那就是喜欢邀功。他的这种习惯,不仅让我印象深刻,也让我在合作中学会了不少东西。 恶心的四件事 …