1、调用fixture方法1:函数或类的方法直接传fixture的函数参数名称
import pytest
@pytest.fixture(scope="function") # 此装饰器相当于 setup_function 的内容
def some_data():
print("开始")
# yield # 表示此代码之后的语句视为teardown_function的内容
print("结束")
def test_some_data(some_data):
print("test")
if __name__ == '__main__':
pytest.main(['001_Pytest_fixture装饰器_fixtrue_参数化演示_usefixtures与传fixture的区别.py', '-s'])
2、调用fixture方法2:使用装饰器@pytest.mark.usefixtures()修饰需要运行的用例。
import pytest
@pytest.fixture()
def test1():
print('\n开始执行用例1')
@pytest.mark.usefixtures('test1')
def test_2():
print('\n开始执行用例2')
if __name__ == '__main__':
pytest.main(['test.py', '-s'])
# 输出:
# 开始执行用例1
# 开始执行用例2.
3、调用fixture方法3:叠加usefixtures。
# 如果一个方法或class用例想要同时调用多个fixture,可以使用@pytest.mark.usefixture()进行叠加。
# 注意:叠加顺序,先执行的放底层,后执行的放上层。
import pytest
@pytest.fixture()
def test1():
print('开始执行用例1')
@pytest.fixture()
def test2():
print('开始执行用例2')
@pytest.mark.usefixtures('test1')
@pytest.mark.usefixtures('test2')
def test_3():
print('开始执行用例3')
if __name__ == '__main__':
pytest.main(['test.py', '-s'])
# 输出:
# 开始执行用例2
# 开始执行用例1
# 开始执行用例3.
4、usefixtures与传fixture区别
1、如果fixture有返回值,那么usefixture就无法获取到返回值,这个是装饰器usefixture与用例直接传fixture参数的区别。
2、当fixture需要用到return出来的参数时,只能把参数名称直接当参数传入。
3、当不需要用到return出来的参数时,两种方式都可以。
5、fixture自动使用autouse=True
1、当用例很多的时候,每次都传这个参数,会很麻烦。
2、fixture里面有个参数autouse,默认是False没开启的,可以设置为True开启自动使用fixture功能,这样用例就不用每次都去传参了。