自定义fixture可以添加多组测试用例数据,在测试用例函数当做实参传入
示例代码如下:
ps: 其中注释掉的测试函数用例test_get_min1和test_get_min2作用相同,若定义fixture时指定name参数,即
@pytest.fixture(params=[...], name='function_get_min_data')
该用法时,定义的fixture作为实参时候就必须使用name的值,若无指定,则用定义的fixture函数名,二者不可混用
import pytest
def get_min(data: tuple) -> int:
min_ = data[0]
for i in data:
if min_ > i:
min_ = i
return min_
class TestMyDemo:
@pytest.fixture(params=[((1, 3, 5), 1),
((2, 7, 4), 2),
((7, 56, 5, 3), 4)])
def demo_data(self, request):
return request.param
# def test_get_min1(self, function_get_min_data):
# test_data = function_get_min_data[0]
# test_result = function_get_min_data[1]
# assert get_min(test_data) == test_result
def test_get_min2(self, demo_data):
test_data = demo_data[0]
test_result = demo_data[1]
assert get_min(test_data) == test_result
可以使用@pytest.fixture(scope="function", autouse=True, params=[...], name="xxx")
进行测试用例的一些公共资源配置,
scope
指定作用域,为session时在整个测试会话之前执行,module在该测试模块(文件)之
前执行,class在执行测试用例类之前执行,function在执行测试用例函数之前执行autouse
是否自动执行,默认Falseparams
要传入的参数列表name
定义的fixture名字
有如下测试用例:
import pytest
def get_min(data: tuple) -> int:
min_ = data[0]
for i in data:
if min_ > i:
min_ = i
return min_
def get_max(data: tuple) -> int:
max_ = data[0]
for i in data:
if max_ < i:
max_ = i
return max_
class TestMyDemo:
@pytest.fixture(params=[((1, 3, 5), 1, 5),
((2, 7, 4), 2, 7),
((7, 56, 5, 3), 3, 56)], name="testcase_data")
def demo_data(self, request):
return request.param
@pytest.fixture(scope="session", autouse=True, name="config_session_fixture")
def config_session(self):
print("\nInit Session Resource")
@pytest.fixture(scope="module", autouse=True, name="config_module_fixture")
def config_module(self):
print("\tInit Module Resource")
@pytest.fixture(scope="class", autouse=True, name="config_class_fixture")
def config_class(self):
print("\t\tInit Class Resource")
@pytest.fixture(scope="function", autouse=True, name="config_function_fixture")
def config_function(self, request):
print("\n\t\t\tInit Function[%s] Resource" % request.function.__name__)
def test_get_min(self, testcase_data):
test_data = testcase_data[0]
test_result = testcase_data[1]
assert get_min(test_data) == test_result
def test_get_max(self, testcase_data):
test_data = testcase_data[0]
test_result = testcase_data[2]
assert get_max(test_data) == test_result