该插件只支持多进程运行用例,不支持多线程
shellpip install pytest-xdist
pythonaddopts = -n=4 #此处为pytest.ini配置文件写法
-n指定进程数4,开启4个cpu运行用例,-n=auto的话自动探测cpu核数
shellpip install pytest-parallel==0.0.10
截至今日windows系统必须安装此版本,高本版的会报错
pythonAttributeError: Can't pickle local object 'pytest_addoption.<locals>.label_type.<locals>.a_label_type'
该插件有以下参数执行:
shelladdopts =--workers=1 --test-per-worker=4 #此处为pytest.ini配置文件写法
--workers=1指定运行的进程数1,默认1,windows系统只能为1,linux macos可指定
--test-per-worker=4指定运行的线程数4
两个参数都指定只能是数字,总线程数=进程数*线程数,上面例子1 * 4=4
shellpip install pytest-multithreading
pythonaddopts = -th=18 #此处为pytest.ini配置文件写法
-th=18指定线程数18个只能是数字
xdist太耗cpu,如果不是docker运行,容易拖累机器上其他应用
不支持fixtrue为session级别的外挂只运行一次的需要,典型场景获取token只需运行一次,但是multithreading插件session 级别的 fixture只会运行一次
parallel不持支allure生成报告。
使用下面的语法糖标记不并发用例
python@pytest.mark.notconcurrent标记的用例不会参与并发运行,并发运行的用例会等这些被标记的用例运行结束后才开始并发运行
shellpip install pytest-multithreading-allure
此插件解决不能兼容allure报告所用,但是截至今日python3.8环境,只兼容1.0.6版本
总结:并发用例
pytest-multithreading + pytest-multithreading-allure
pythonimport jsonpath
class Test:
self.temp = []
def test1(self):
......
extract = jsonpath.jsonpath(httpResponse.body, $.name)[0]
self.temp.append(extract)
......
def test2(self):
params = {"pay":self.temp[0]}
......
使用列表暂存变量,也可使用字典,网络教程普遍使用yaml文件来暂存,我认为时间复杂度高,要打开文件写入信息再关闭文件,而且是读写在硬盘,可能IO阻塞,
内置列表字典容器都在内存操作速度更快。