pytest使用过程中,我们遇到一种情况,测试框架中使用的test_001用例的接口返回值是test_002、test_003需要用到的入参。
这种情况下,该如何将所需的参数提取出来并在别处调用呢?
可以借助conftest.py文件实现设置多个全局级别参数,再需要的地方调用指定的参数:
原理:
字典里存放数据,可以通过:
dict1['num1'] = 10
设置字典中key所对应的value,像这样:
dict1 = {} # 先定义一个空字典
dict1['num1'] = 10 # 字典里设置一个key为num1 ,value为10
dict1['num2'] = 20
print(type(dict1))
print(dict1['num1'], dict1.get('num2'))
# 打印结果:
# <class 'dict'>
# 10 20
conftest.py中这样写:
global_data = {}
# 也可以写成@pytest.fixture()。默认的scope就是function级别
@pytest.fixture(scope='function')
def set_data():
def _set_data(key, value):
global_data[key] = value
return _set_data
@pytest.fixture()
def get_data():
def _get_data(key):
return global_data.get(key)
return _get_data
此处注意,conftest.py只针对同级package下的test_***.py文件生效,如图下,只会对test_002、test_003、test_004、test_005、test_006生效。
我们用test_006做演示:
006中的代码:
import pytest
class Test001:
def test_001(self, set_data):
num1 = 1
set_data('num1', num1)
def test_002(self, get_data):
print('值是', get_data("num1"))
def test_003(self, get_data):
print('值是', get_data("num1"))
class Test002:
def test_001(self, get_data):
print('num1值是', get_data("num1"))
print('num2值是', get_data("num2"))
if __name__ == '__main__':
pytest.main()
在需要设置全局参数时,调用set_data(),并传入唯一的key和value。
在需要调用全局参数时,调用get_data(),并传入所需value的key。
通过以上方式,即可将接口返回值中的值拿到并在其他函数中使用。