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完成

  1. 添加参数-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 时正确处理这些情况。

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

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

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

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

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

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

相关推荐
天远API1 分钟前
零信任架构实战:基于天远企业股权变更构建自动化私募股权投后控制权穿透与异动预警网关
大数据·人工智能·架构·自动化
环境栈笔记11 分钟前
浏览器多开同步怎么做?先分清设置、登录态和窗口操作
前端·人工智能·后端·自动化
weixin_4404016918 分钟前
大数据技术-数据分析(EXcel+Python数据处理+SQL)
大数据·python·数据分析·excel
甜到心里的蛋糕25 分钟前
AI 生成 MV 音频异响排查:频谱定位、片段替换与 Nginx 缓存
人工智能·python·nginx·ffmpeg·音视频·音频处理
2601_9679801134 分钟前
python中的静态方法和类方法
python·静态方法·类方法·实例化·方法调用
智购科技无人售货机厂家41 分钟前
自动售货机物联网平台为什么会出现在线状态不一致?~YH
python·单片机·嵌入式硬件·django·pygame
飞Link9 小时前
什么是 AirSim?一文读懂无人机仿真平台
python·算法·无人机
收放扳机9 小时前
多机连线(In-Line)场景下,收放板机“缓存工位”的容量与架构选型参考
人工智能·科技·自动化·制造·pcb工艺
曲径海盗9 小时前
【Python 学习第 38 天】for 循环
python·学习笔记·编程入门
在世修行10 小时前
智学文枢:变式题生成引擎
python·ai·pyside·题目生成