Как мне использовать обычное приспособление pytest в качестве менеджера контекста? - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть сотни тестовых сценариев, которые я добавляю в среду разработки, которую я создаю.Каждый сценарий должен открыть соединение с нашим тестируемым устройством, выполнить ряд задач и закрыть.Соединение создается и закрывается через прибор.Также хочу добавить, что необходимо установить новое соединение для каждого отдельного скрипта, который выполняется (т. Е. На уровне модуля, а не на уровне области действия или функции).

У меня это работает с прибором в том же файле, что и задачи.Примерно так.

my_test.py

...
@pytest.fixture(scope='module')
def setup(request):
    global connection
    with target.Connect() as connection:
        yield connection

    def teardown():
        connection.close
    request.addfinalizer(teardown)

@pytest.mark.usefixtures("setup")
def test_query_device_info():
    global connection
    connection.write('echo $PATH')
    connection.write('echo $HOME')
    ...

Поскольку у меня есть сотни тестов, я не хочу копировать один и тот же код для каждого файла, поэтому мне нужнообщее приспособление, которое может использоваться каждым тестом.Я попытался добавить этот прибор в conftest.py, и соединение создается, но не удается, когда он попадает в команду connection.write.

conftest.py

...
@pytest.fixture
def setup(request):
    global connection
    with target.Connect() as connection:
        yield connection

    def teardown():
        connection.close
    request.addfinalizer(teardown)

my_test.py

...
@pytest.mark.usefixtures("setup")
def test_query_device_info():
    global connection
    connection.write('echo $PATH')

Как я могу иметь этот прибор в общем месте, которое доступно для всех моих тестов и правильно создает соединение, которое я могу использовать в своих скриптах?

Обратите внимание, что они выполняются через IDE pyCharm, а не непосредственно в командной строке.

1 Ответ

0 голосов
/ 23 июня 2019

Каркас был переработан так, чтобы соединение осуществлялось через класс, использующий методы __enter__ и __exit__, которые автоматически управляют контекстом.

...