一、fixture (译:菲克斯这儿)之 conftest.py (译:康菲泰斯特)文件
共享文件:conftest.py 文件名不可更改;因为,不需要引入就可以使用其中的fixture
二、创建 conftest.py 文件,定义前置 + 后置
fixture 函数根据关键字 yield 作为前置和后置的分割线,并且 yield 也可以接收返回值,返回元祖,作用相当于return
yield(译:优特):分割线,返回前置结果
import pytest
@pytest.fixture()
def init_demo():
    print("这是测试用例的前置")
    a = 1
    yield a  # 分割线(yield + 返回值)
    print("这是测试用例的后置")
将fixtures的函数名称作为测试用例的入参
如果fixture有返回值,那么测试用例中的fixture函数名称就接收返回值,并且可以将fixture函数名称作为返回值使用
def test_add_01(init_demo):
    b = init_demo + 2
    assert 3 == b
运行结果:

在测试用例/测试类前面加上@pytest.mark.usefixtures(‘fixture函数名称‘)
ps:定义conftest.py文件,在此文件中可以定义多个fixture,pytest会自动搜索此文件
import pytest
@pytest.mark.usefixtures(‘init_demo‘)
def test_add_02():
    b = 1 + 2
    assert 3 == b
运行结果:

conftest代码如下:
import pytest
@pytest.fixture(autouse=Ture)
def init_demo():
    print("这是测试用例的前置")
    yield
    print("这是测试用例的后置")
测试代码如下:
import pytest
def test_add_02():
    b = 1 + 2
    assert 3 == b
运行结果:


conftest.py代码如下:
import pytest
@pytest.fixture(scope=‘session‘)
def init_session():
    print("这是测试会话的前置")
    yield
    print("这是测试会话的后置")
@pytest.fixture(scope=‘module‘)
def init_module(init_session):
    print("这是测试模块的前置")
    yield
    print("这是测试模块的后置")
@pytest.fixture(scope=‘class‘)
def init_class(init_module):
    print("这是测试类的前置")
    yield
    print("这是测试类的后置")
@pytest.fixture  # 相当于@pytest.fixture(scope=‘function‘)
def init_function(init_class):
    print("这是测试用例的前置")
    yield
    print("这是测试用例的后置")
测试代码如下:
import pytest
@pytest.mark.usefixtures(‘init_function‘)
def test_demo():
    print(‘测试用例‘)
    assert 3 == 3
运行结果:

五、层级作用域
使用 fixture 的顺序-- 子目录当中,也可以拥有自己的 conftest
原文:https://www.cnblogs.com/wuzm/p/12591680.html