pytest.mark.usefixtures使用

pytest.mark.usefixtures使用

背景

如果每个用例都需要相同的fixture,我们手动在每一个用例上面添加fixture有点累。切记这个fixturescope='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

posted @ 2022-12-02 10:37  Tarzen  阅读(291)  评论(0编辑  收藏  举报