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

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

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

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

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

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

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

相关推荐
程序猿000001号20 分钟前
探索Python的pytest库:简化单元测试的艺术
python·单元测试·pytest
engchina1 小时前
如何在 Python 中忽略烦人的警告?
开发语言·人工智能·python
Dream_Snowar2 小时前
速通Python 第四节——函数
开发语言·python·算法
西猫雷婶2 小时前
python学opencv|读取图像(十四)BGR图像和HSV图像通道拆分
开发语言·python·opencv
汪洪墩2 小时前
【Mars3d】设置backgroundImage、map.scene.skyBox、backgroundImage来回切换
开发语言·javascript·python·ecmascript·webgl·cesium
程序员shen1616114 小时前
抖音短视频saas矩阵源码系统开发所需掌握的技术
java·前端·数据库·python·算法
人人人人一样一样4 小时前
作业Python
python
四口鲸鱼爱吃盐4 小时前
Pytorch | 利用VMI-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击
人工智能·pytorch·python
四口鲸鱼爱吃盐4 小时前
Pytorch | 利用PI-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击
人工智能·pytorch·python