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

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

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

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

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

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

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

  • 相关阅读:
    vue+express+mysql+elementUI实现前后端交互增删改查
    【数据库应用-1】——CDA
    C++开发面试之——C++11新特性20问
    interface中的clocking
    IOS面试题object-c 21-30
    docker安装RabbitMQ及安装延迟插件
    kubesz(一键安装k8s)
    Spring DI(依赖注入)的实现方式:属性注入和构造注入
    华为云时习知&成都大学附属医院,打造“互联网+医疗”标杆
    数据结构与算法----栈和队列(Stack & Queue)
  • 原文地址:https://blog.csdn.net/kymppcds/article/details/139896548