pytest之多进程和多线程
若分布式执行用例,用例设计必须遵循以下原则:
1.用例之间都是独立的(不存在依赖关系);
2.用例执行无先后顺序要求;
一、 pytest-xdist多进程
pytest-xdist仅支持多进程,不支持多线程。
安装:pip install pytest-xdist
常用参数解析:
-n:进程数,也就是cpu个数。可以指定个数,最大值为当前机器cpu个数,也可以设置为auto,自动识别cpu个数。
如cmd命令行下执行:
pytest -s test_multiProcess.py -n=2 # 使用2个进程运行该py文件 pytest -s test_multiProcess.py -n=auto # 自动使用cpu个数运行该py文件
在PyCharm下执行:
# get_multithread.py import pytest from time import sleep def test_01(): sleep(2) # 通过延时,直观比较运行耗时 print("testcase_01.") def test_02(): sleep(3) print("testcase_02.") def test_03(): sleep(4) print("testcase_03.") if __name__ == "__main__": # pytest.main(['-s', __file__]) # 默认使用单进程执行;耗时9.01s # pytest.main(['-s', '-n=auto', __file__]) # 自动使用所有进程执行,耗时4.59s pytest.main(['-s', '-n=3', __file__]) # 使用3个进程执行,耗时4.44s
二、pytest-parallel
pytest-parallel使用多线程后,则最后执行时间是运行时间最长的线程的时间。
(注意:pytest-parallel目前暂不能和allure报告使用)
安装:
pip install pytest-parallel
常用参数解析:
–workers (optional) n:多进程运行, n是进程数。默认为1。
(注意:若为window平台,则该workers永远=1,在linux和mac下可以取不同值。)
–tests-per-worker (optional) n:多线程运行, n是每个worker运行的最大并发线程数。默认为1(该参数不受运行平台限制)。
(如果两个参数都配置了,就是进程并行,每个进程最多n个线程,总线程数:进程数 * 线程数)
在window下的cmd命令行执行:
pytest -s get_multithread.py --workers=2 --tests-per-worker=4 输出: pytest-parallel: 1 worker (process), 3 tests per worker (threads) testcase_01. .testcase_02. .testcase_03 . ================================================== 3 passed in 4.02s ==================================================
在PyCharm下执行:
if __name__ == "__main__": pytest.main(['-s', '--workers=2', '--tests-per-worker=3', __file__]) # 设定2个进程,每个进程3个线程,耗时4.02s
遇到的问题:
pytest-parallel在windows下执行失败及解决办法AttributeError: Can‘t pickle local object ‘pytest_addoption.<locals?
解决方法:
将pytest-parallel版本回退到0.0.10,参考:https://blog.csdn.net/qq_39214101/article/details/107914869
cmd命令行下卸载package包:
pip uninstall packageName
cmd命令行下安装特定版本的package包:
pip install packageName==version(如0.0.10)
附:
1、报错:E: Unable to locate package XXX ?
(1)首先update再upgrade: sudo apt-get update sudo apt-get upgrade 然后再试试:sudo apt-get install xxxxx (2)若以上都不行则尝试:sudo apt-get install aptitude 且成功以后使用:sudo aptitude install xxxxx
2、手动安装package包:python setup.py install
3、手动安装.whl包:pip3 install xxx.whl
4、pip install默认的安装包路径:xxx\Lib\site-packages