pytest之fixture的使用
一、测试固件(fixture)是在执行测试用例前执行(setup)和后执行(teardown)的代码块。pytest提供了两种方式,分别是setup_function,setup_class,setup_method,setup_module和@pytest.fixture()装饰器装饰自定义的测试固件的两种方式,这里记录第二种方式的使用方法
1、fixture之间的调用(执行测试用例比较耗时),只需要在调用者mprint函数的参数中加上被调用者number函数的函数名,而测试用例test_02的参数加上测试固件mprint函数名。对于有返回值的测试固件,测试用例若想要使用直接在测试代码中调用测试用例的参数即可,可以理解成测试用例的参数等于其测试固件的返回值(多个返回值存放在tuple中)。特别注意,例子中被调用者number函数有返回值,调用者mprint返回number,两个测试固件的返回值均为同一个,但在测试用例中使用返回值时的写法不同。
测试固件代码如下:
import pytest from page.page_add import NumberAdd @pytest.fixture(scope='function') def number(): number = NumberAdd() return number @pytest.fixture(scope='function') def mprint(request, number): print('setup每个函数执行:开始执行测试用例') def teardown(): print('teardown每个函数执行:结束执行测试用例') request.addfinalizer(teardown) return number
测试用例代码如下:
def test_add_01(number): """数字算法:两个正整数相加""" data = number.add_num(1, 2) assert data == 3 def test_02(mprint): data = mprint.add_num(2,2) assert data == 4
2、测试用例调用多个fixture(比上面的例子执行时间短0.5s),两个fiixture互不影响。上面的例子可以将fixture之间的调用拆开写,测试用例调用测试固件时,在测试用例的参数加上测试fixture名(参数位置没有影响)即可。
测试固件代码如下:
import pytest from page.page_add import NumberAdd @pytest.fixture(scope='function') def number(): number = NumberAdd() return number @pytest.fixture(scope='function') def mprint(request): print('setup每个函数执行:开始执行测试用例') def teardown(): print('teardown每个函数执行:结束执行测试用例') request.addfinalizer(teardown)
测试用例代码如下:
def test_add_01(number): """数字算法:两个正整数相加""" data = number.add_num(1, 2) assert data == 3 def test_02(mprint,number): data = number.add_num(2,2) assert data == 4
浙公网安备 33010602011771号