Благодарю. Другие ответы у меня не сработали, так как они, кажется, используют предыдущую версию Python / pytest.
пешно используем pytest (Python 3) для запуска тестового набора, тестирующего некоторые аппаратные устройства (электроника). Для подмножества этих тестов нам нужно, чтобы тестер изменил аппаратное обеспечение, а затем изменил его обратно. Мой подход состоял в том, чтобы использовать приспособление уровня модуля, прикрепленное к рассматриваемым тестам (которые все находятся в отдельном модуле), с двумяinput
звонки:
@pytest.fixture(scope="module")
def disconnect_component():
input('Disconnect component, then press enter')
yield # At this point all the tests with this fixture are run
input('Connect component again, then press enter')
При запуске этого я получаюOSError: reading from stdin while output is captured
, Я могу избежать этого, вызвав pytest с--capture=no
и подтвердил, что мой подход работает, то есть я получаю первый запрос до рассматриваемого подмножества тестов, а второй - после их выполнения.
Большим недостатком является то, что это деактивирует захват stdin / stderr для всего набора тестов, на которые полагаются некоторые другие тесты.
Я также пытался использоватьcapsys.disabled
(документы) как это
@pytest.fixture(scope="module")
def disconnect_component(capsys):
with capsys.disabled():
input('Disconnect component, then press enter')
yield # At this point all the tests with this fixture are run
input('Connect component again, then press enter')
но при запуске этого я получаюScopeMismatch: You tried to access the 'function' scoped fixture 'capsys' with a 'module' scoped request object, involved factories
.
Могу ли я заставить Pytest ждать действия пользователя другим способомinput
? Если нет, могу ли я отключить захват только для тестов с использованием вышеуказанного прибора?