2017-01-12 12 views
0

У меня есть несколько pytests, которые имеют доступ к арматуре, объем которой равен module. Я хочу переместить дублированные части тестов в обычное место и получить доступ к нему оттуда.pytest: переместите общую установку светильника в одно место

В частности, в приведенном ниже примере кода в 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() 
     ... 
+0

Вы говорите, что «не смогли заставить его работать» - какие проблемы вы столкнулись, в частности? – jwd

+0

См. Также: http://stackoverflow.com/questions/33508060/create-and-import-helper-functions-in-tests-without-creating-packages-in-test-di – jwd

ответ

1

Если я правильно понимаю ваш вопрос: Поставьте светильники в conftest.py, и они будут доступны для использования в качестве аргументов для тестовых функций. Не нужно ничего импортировать, вы просто определяете

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