如果有以下场景:用例 1 需要先登录,用例 2 不需要登录,用例 3 需要先登录。很显然无法用 setup 和 teardown 来实现了。fixture可以让我们自定义测试用例的前置条件。
fixture的优势:
(1)命名方式灵活,不局限于 setup 和teardown 这几个命名
(2)conftest.py 配置里可以实现数据共享,不需要 import 就能自动找到fixture
(3)scope=“module” 可以实现多个.py 跨文件共享前置
1. 推荐在conftest.py文件中写fixture
import pytest
# scope:可以理解成fixture的作用域,默认:function,还有class、module、package、session四个【常用】
# autouse:默认:False,需要用例手动调用该fixture;如果是True,所有作用域内的测试用例都会自动调用该fixture
# name:默认:装饰器的名称,同一模块的fixture相互调用建议写个不同的name
@pytest.fixture(scope='class')
def create_data(request):
print('fixture初始化')
def clear_data():
print('清理数据')
request.addfinalizer(clear_data)
# 如果fixture还想依赖其他fixture,需要用函数传参的方式
@pytest.fixture(scope='class')
def login(create_data):
print('用户登录')
2. 测试用例中引用fixture(pytest会自动从conftest.py中找寻)
import pytest
class TestFixture:
def test_fixture_one(self,create_data):
# assert 1+1 == 3
print('测试方法一执行')
def test_fixture_two(self,login):
print('测试方法二执行')```