pytest.mark.usefixtures使用
pytest.mark.usefixtures使用
背景
如果每个用例都需要相同的fixture
,我们手动在每一个用例上面添加fixture
有点累。切记这个fixture
的scope='function'
class TestCase:
def test_1(myfixture):
print('正在执行自动化用例')
env = myfixture
print('执行中的env:%s' % env)
def test_2(myfixture):
print('正在执行自动化用例')
env = myfixture
print('执行中的env:%s' % env)
解决
我们把用例放到一个类中,在类上面添加pytest.mark.usefixtures
,来给每一个用例添加fixture
,当然你也可以在fixture
使用autouse=True
来实现自动执行,但是这有一个弊端,如果我有一个用例不需要该fixture
就需要额外处理了。
用例:
@pytest.mark.usefixtures('myfixture')
class TestCase:
def test_1(self):
print('正在执行自动化用例1')
def test_2(self):
print('正在执行自动化用例2')
conftest.py
:
import pytest
@pytest.fixture(scope='function', params=['test', 'dev'])
def myfixture(request):
print('\n')
print('前置条件正在执行')
env = request.param
print(env)
yield env
print('后置条件正在执行')
执行结果:
============================= test session starts ==============================
collecting ... collected 4 items
test_.py::TestCase::test_1[test]
前置条件正在执行
test
PASSED [ 25%]正在执行自动化用例1
后置条件正在执行
test_.py::TestCase::test_1[dev]
前置条件正在执行
dev
PASSED [ 50%]正在执行自动化用例1
后置条件正在执行
test_.py::TestCase::test_2[test]
前置条件正在执行
test
PASSED [ 75%]正在执行自动化用例2
后置条件正在执行
test_.py::TestCase::test_2[dev]
前置条件正在执行
dev
PASSED [100%]正在执行自动化用例2
后置条件正在执行
============================== 4 passed in 0.01s ===============================
Process finished with exit code 0