编辑
2023-03-02
Pytest
00

目录

2023-2-25
pytest使用场景总结:多线程、多进程
pytest-xdist
pytest-parallel
pytest-multithreading
三个插件区别:
pytest-multithreading-allure
接口关联传参

2023-2-25

pytest使用场景总结:多线程、多进程

pytest-xdist

该插件只支持多进程运行用例,不支持多线程

shell
pip install pytest-xdist
python
addopts = -n=4 #此处为pytest.ini配置文件写法

-n指定进程数4,开启4个cpu运行用例,-n=auto的话自动探测cpu核数

pytest-parallel

shell
pip install pytest-parallel==0.0.10

截至今日windows系统必须安装此版本,高本版的会报错

python
AttributeError: Can't pickle local object 'pytest_addoption.<locals>.label_type.<locals>.a_label_type'

该插件有以下参数执行:

shell
addopts =--workers=1 --test-per-worker=4 #此处为pytest.ini配置文件写法

--workers=1指定运行的进程数1,默认1,windows系统只能为1,linux macos可指定

--test-per-worker=4指定运行的线程数4

两个参数都指定只能是数字,总线程数=进程数*线程数,上面例子1 * 4=4

pytest-multithreading

shell
pip install pytest-multithreading
python
addopts = -th=18 #此处为pytest.ini配置文件写法

-th=18指定线程数18个只能是数字

三个插件区别:

xdist太耗cpu,如果不是docker运行,容易拖累机器上其他应用

不支持fixtrue为session级别的外挂只运行一次的需要,典型场景获取token只需运行一次,但是multithreading插件session 级别的 fixture只会运行一次

parallel不持支allure生成报告。

使用下面的语法糖标记不并发用例

python
@pytest.mark.notconcurrent标记的用例不会参与并发运行,并发运行的用例会等这些被标记的用例运行结束后才开始并发运行

pytest-multithreading-allure

shell
pip install pytest-multithreading-allure

此插件解决不能兼容allure报告所用,但是截至今日python3.8环境,只兼容1.0.6版本

总结:并发用例

pytest-multithreading + pytest-multithreading-allure

接口关联传参

python
import 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阻塞,

内置列表字典容器都在内存操作速度更快。