百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

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

myzbx 2025-03-20 16:58 10 浏览

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 时正确处理这些情况。

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

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

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

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

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

相关推荐

Nextoffer极客编程挑战#022:使用HTML5画布生成文字淡入淡出效果

给定如下HTML:<divid="container"><canvasid="MyCanvas"width="350"height="200">不支持HTML5画布&l...

AI在线智能问答+Python实现(ai问答机器人)

人生苦短,我用Python!嗨,我是浪仔,你的Python造梦师~今天让我们一起来开发一款AI智能问答小工具!本小工具是一款基于Python编程语言开发的AI在线智能问答平台,采用爬虫采集数据...

OpenAI发布新功能——Canvas,写作+编程能力超级提升

阅读此文前,麻烦您点击一下“关注”,方便您进行讨论和分享。此文仅在今日头条发布,任何平台不得搬运,搬运必究!OpenAI发布新功能——Canvas,写作+编程能力超级提升OpenAI的Canvas...

英伟达最新AI技术可将文字转化为逼真的图像

英伟达的GauGAN技术已经展示了它的能力--将简单的草图变成逼真的图像。从那时起,我们看到它被应用于NVIDIACanvas,但似乎这家GPU巨头正在用其人工智能(AI)瞄准更高的目标,其推出了一...

OpenAI技术直播第四弹!推出ChatGPT内置工具Canvas,有三大核心功能

每经编辑:毕陆名昨天的Sora掀起热潮,今天OpenAI又给我们带来了升级版Canvas。Canvas正式向所有用户开放,并与OpenAI的主要模型深度集成。Canvas内置在ChatGPT中,打开C...

怎样设置EditText内部文字被锁定不可删除和修改

在做项目的时候,我曾经遇到过这样的要求,就是跟百度贴吧客户端上的一样,在回复帖子的时候,在EditText中显示回复人的名字,而且这个名字不可以修改和删除,说白了就是不可操作,只能在后面输入内容。在E...

微信小程序canvas使用(小程序canvas生成图片并保存)

在微信小程序中,你可以通过以下步骤使用canvas:在index.wxml文件中添加canvas元素。例如:。在index.js文件中,通过wx.createSelectorQuery()获取canv...

我尝试了ChatGPT Canvas,让写作和编码变得更简单

#头条精品计划#快速导读ChatGPT画布界面旨在提升写作和编码体验,特别是为ChatGPTPlus和Team订阅者提供的功能。用户可以利用人工智能优化文本和代码,提高工作效率。画布界面...

ChatGPT推出Canvas界面:让编写和编码变得更容易

鞭牛士报道,10月5日消息,据外电报道,OpenAI为ChatGPT推出了全新的“Canvas”界面,允许用户在并排协作中调整聊天机器人生成的文本或代码部分。Canvas在现有的ChatG...

鸿蒙开发之绘制文字(fillText 和 stroke)

在HarmonyOS中,使用TS(TypeScript)语法进行画布(Canvas)开发时,fillText和strokeText是两个常用的方法,分别用于填充文本和绘制文本边框。以下是这两个方法的详...

Canvas编写Python代码也太好用了!

大家知道这个月OpenAI密集发布新产品,连续12天以短视频方式每天公布一个产品功能。这两天,OpenAI公布了新的功能Canvas,顾名思义,Canvas是画布的意思,这是一个使用ChatGPT协作...

五子棋游戏(五子棋游戏网页版)

完整的游戏功能:黑白双方轮流下棋自动判定胜负支持重新开始游戏美观的界面:标准的15×15棋盘棋盘带有网格线和五个星位点棋子使用渐变效果,看起来更立体状态显示清晰用户友好:实时显示当前回合信息有效的落子...

利用Photoshop制作专业展板的详细指南与技巧分享

怎么用PS做展板(HowtoCreateaDisplayBoardUsingPhotoshop)  在现代设计中,AdobePhotoshop(通常简称为PS)是一个强大的工具,广泛...

Android 开发中文引导-动画和图形概述

安卓系统提供了各种强大的API,用来将动画应用于界面元素和自定义2D和3D图形的绘制当中。下面的小节大概的描述了可用的API和系统功能并帮助你决定那个方案最适合你的需要。动画安卓框架提供了两种动画系统...

小白鞋过时了?早着呢!(小白鞋2020)

在巴黎待了好几天了。这次是受爱马仕邀请来看它家2017秋冬女装秀的。昨天看完,本想今天就来跟大家分享我秀场见闻。但今天还要参观爱马仕皮具工坊、新品陈列室,明天再一次性地跟你们分享吧。就先发之前准备好的...