pytest实现多进程与多线程运行超好用的插件
本文详细介绍pytest实现并发测试的两种主流插件:pytest-parallel与pytest-xdist。重点解析pytest-parallel的多进程与多线程混合配置参数(--workers与--tests-per-worker),对比其与pytest-xdist在跨平台支持及功能上的差异,并针对Windows系统限制给出选型建议。
前言
若需实现用例的分布式执行,测试用例的设计必须严格遵循以下规范:
1、各用例间需保持完全独立; 2、禁止用例a依赖用例b的执行结果; 3、用例执行无需遵循特定先后顺序; 4、每个用例均需具备独立运行及重复运行的能力,且互不干扰。这与人工测试场景类似,用例相互独立,可随机分配给不同测试人员,不存在依赖关系或执行顺序限制。
一、pytest-parallel
安装方法:pip install pytest-parallel
常用参数配置说明如下:
- --workers=n:启用多进程运行需添加此参数,n代表进程数量,默认值为1。
- --tests-per-worker=n:启用多线程需添加此参数,n代表线程数量。
若同时配置上述两个参数,则实现进程并行,每个进程最多包含n个线程,总线程数为进程数乘以线程数。
注意:在Windows操作系统中,进程数始终固定为1。
必须使用 if __name__ == "__main__": 结构,直接在DOS命令行运行可能会报错。
#!/usr/bin/env python
# _*_ coding: utf-8 _*_
# @project : API_Service
# @File : test_1.py
# @Date : 2021/6/15 3:07 下午
# @Author : 李文良
# demo:
import pytest
def test_01():
print('测试用例1操作')
def test_02():
print('测试用例2操作')
def test_03():
print('测试用例3操作')
def test_04():
print('测试用例4操作')
def test_05():
print('测试用例5操作')
def test_06():
print('测试用例6操作')
def test_07():
print('测试用例7操作')
def test_08():
print('测试用例8操作')
if __name__ == "__main__":
pytest.main(["-s", "test_1.py",'--workers=2', '--tests-per-worker=4'])

二、pytest-xdist
安装方法:pip install pytest-xdist
该插件不支持多线程功能。
常用参数配置如下:
- -n=*:*代表进程数量。
多CPU并行执行用例时,直接添加-n参数即可,后续num参数指定并行数量,例如将num设置为3。
- -n auto:自动侦测系统中的CPU核心数量。
- -n num:指定运行测试的处理器进程数。
三、对比说明
相较于pytest-xdist,pytest-parallel更为易用且功能支持更全面。
pytest-xdist不支持多线程,而pytest-parallel支持Python 3.6及以上版本。若需在Linux或Mac上进行多进程并发测试,需注意在Windows上该功能无效(Workers=1);若进行多线程测试,Linux/Mac/Windows平台均支持,且进程数由workers参数值决定。
pytest-parallel常用配置命令示例如下:
- –workers (optional) *:启用多进程运行需添加此参数,*代表进程数,默认值为1。
- –tests-per-worker (optional) *:启用多线程运行,*代表每个worker运行的最大并发线程数,默认值为1。
pytest test.py --workers 3:使用3个进程运行 pytest test.py --tests-per-worker 4:使用4个线程运行 pytest test.py --workers 2 --tests-per-worker 4:使用2个进程并行,且每个进程最多包含4个线程运行,即总共最多8个线程运行。
四、特别注意
1、pytest-parallel的workers参数在Windows系统下始终为1,在Linux和Mac下可设置为不同值。 2、启用pytest-parallel的多线程处理后,最终执行时间取决于运行时间最长的线程。 3、在Windows环境下,若需多进程请选择pytest-xdist;若需多线程请选择pytest-parallel。
至此,关于pytest实现多进程与多线程运行的插件介绍完毕。如需了解更多pytest多进程与多线程运行插件相关内容,请搜索本站历史文章或继续浏览后续相关文章,感谢大家的支持!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









