Como fazer o pytest esperar pela ação do usuário (manual)?
Estamos usando com sucesso o pytest (Python 3) para executar um conjunto de testes testando alguns dispositivos de hardware (eletrônicos). Para um subconjunto desses testes, precisamos que o testador altere o arranjo de hardware e depois altere-o novamente. Minha abordagem foi usar um dispositivo de nível de módulo anexado aos testes em questão (que estão todos em um módulo separado), com doisinput
chamadas:
@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')
Ao executar isso, receboOSError: reading from stdin while output is captured
. Eu posso evitar isso chamando pytest com--capture=no
, e confirmamos que minha abordagem funciona, ou seja, recebo a primeira consulta antes do subconjunto de teste em questão e a segunda após a execução.
A grande desvantagem é que isso desativa a captura de stdin / stderr para todo o conjunto de testes, no qual alguns dos outros testes contam.
Eu também tentei usarcapsys.disabled
(docs) como isso
@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')
mas ao executar isso eu receboScopeMismatch: You tried to access the 'function' scoped fixture 'capsys' with a 'module' scoped request object, involved factories
.
Posso fazer o pytest esperar pela ação do usuário de alguma outra maneira?input
? Caso contrário, posso desativar a captura apenas para os testes usando o equipamento acima?