文章目录
前言
fixture装饰器,在其他函数,模块,类或整个工程调用它时会被优先执行,通常用于前置处理。一般用在获取测试用例的前置条件,比如,在跑测试用例之前先要进行数据清理,或者需要获取某个id,把id传入测试用例才可以跑
一、fixture参数
@pytest.fixture(scope=“function”, params=None, autouse=False, ids=None, name=None)
常用参数解析:
scope:被标记方法的作用域
function (default):作用于每个测试方法,每个test都运行一次
class:作用于整个类,每个class的所有test只运行一次
module:作用于整个模块,每个module的所有test只运行一次
session:作用于整个session(慎用),每个session只运行一次
params:(list类型)提供参数数据,供调用标记方法的函数使用
autouse:是否自动运行,默认为False不运行,设置为True自动运行
二、fixture函数名称作为参数传入
代码如下(示例):
import pytest
@pytest.fixture()
def use_fixture():
print("------->first")
class TestOne:
def test_one(self,use_fixture):
print("------->test_case")
if __name__ == '__main__':
pytest.main("-s a_fix.py")
说明:use_fixture比test_one用例早执行
二、使用usefixture (fixture 名称)
代码如下(示例):
import pytest
@pytest.fixture()
def use_fixture():
print("------->first")
@pytest.mark.usefixtures("use_fixture")
class TestOne:
def test_one(self):
print("------->test_case")
def test_two(self):
print("------->test_two")
if __name__ == '__main__':
pytest.main("-s a_fix.py")
#执行结果:
a _fix.py::TestOne::test_one ------->first
PASSED [ 50%]------->test_case
a _fix.py::TestOne::test_two ------->first
PASSED [100%]------->test_two
说明:在测试类之前执行前置use_fixture,每个测试用例都执行前置
三、fixture函数引用多个前置
import pytest
@pytest.fixture()
def use_fixture():
print("------->first")
@pytest.fixture()
def use_fixture2():
print("------->two")
@pytest.mark.usefixtures("use_fixture","use_fixture2")
class TestOne:
def test_one(self):
print("------->test_case")
def test_two(self):
print("------->test_two")
执行结果:
a _fix.py::TestOne::test_one ------->first
------->two
PASSED [ 50%]------->test_case
a _fix.py::TestOne::test_two ------->first
------->two
PASSED [100%]------->test_two
说明:在测试类之前执行前置use_fixture,use_fixture2,每个测试用例都执行前置
四、fixture使用auto=True(对所有test生效)
import pytest
@pytest.fixture(autouse=True)
def use_fixture():
print("------->first")
class TestOne:
def test_one(self):
print("------->test_case")
def test_two(self):
print("------->test_two")
if __name__ == '__main__':
pytest.main("-s a_fix.py")