pytest:将常用夹具设置移动到一个地方

时间:2017-01-12 21:27:50

标签: python pytest

我有一些pytests都可以访问范围为module的灯具。我想将测试的重复部分移动到一个公共位置并从那里访问它。

具体来说,在下面的示例代码中,在test/test_blah.py中,每个测试方法都有变量dsn,这是被测设备的序列号。我无法弄清楚如何提取这个常用代码。我尝试访问dut中的TestBase,但无法使其正常运行。

# my_pytest/__init__.py

import pytest

@pytest.fixture(scope="module")
def device_fixture(request):
    config = getattr(request.module, 'config', {})
    device = get_device(config.get('dsn'))
    assert device is not None
    return device

...some other code...
# test/base.py

class TestBase:
    def common_method_1(self):
        pass

    def common_method_2(self):
        pass
# test/test_blah.py

from base import TestBase
import my_pytest
from my_pytest import device_fixture as dut  #'dut' stands for 'device under test'

class TestBlah(TestBase):
    def test_001(self, dut):
        dsn = dut.get_serialno()
        ...
        # how to extract the dsn = dut.get_serialno() into
        # something common so I can keep these tests more DRY?


    def test_002(self, dut):
        dsn = dut.get_serialno()
        ...

    def test_003(self, dut):
        dsn = dut.get_serialno()
        ...

1 个答案:

答案 0 :(得分:1)

如果我正确理解你的问题:将你的灯具放在conftest.py中,它们将可用作你的测试功能的参数。无需导入任何内容,只需定义

即可
@pytest.fixture(scope='module')
def dut():
    return 'something'