gpt4 book ai didi

python - 如何让 pytest 等待(手动)用户操作?

转载 作者:太空狗 更新时间:2023-10-29 20:53:21 32 4
gpt4 key购买 nike

我们成功地使用 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。我可以通过使用 --capture=no 调用 pytest 来避免这种情况,并确认我的方法有效,这意味着我在有问题的测试子集之前得到第一个查询,在它们运行之后得到第二个查询.

最大的缺点是这会停用捕获整个测试套件的标准输入/标准错误,而其他一些测试则依赖于此。

我也试过像这样使用 capsys.disabled ( docs )

@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

除了 input 之外,我可以让 pytest 等待用户操作吗?如果没有,我是否可以仅针对使用上述 fixture 的测试禁用捕获?

最佳答案

所以,我找到了一个 hint由 pytest 开发人员开发,在此基础上我基本上执行了 capsys.disable() 函数的操作:

@pytest.fixture(scope="module")
def disconnect_component(pytestconfig):
capmanager = pytestconfig.pluginmanager.getplugin('capturemanager')

capmanager.suspend_global_capture(in_=True)
input('Disconnect component, then press enter')
capmanager.resume_global_capture()

yield # At this point all the tests with this fixture are run

capmanager.suspend_global_capture(in_=True)
input('Connect component again, then press enter')
capmanager.resume_global_capture()

据我所知,这是完美无缺的。不要忘记 in_=True 位。

编辑:从 pytest 3.3.0(我认为)开始,capmanager.suspendcapturecapmanager.resumecapturerenamed分别为 capmanager.suspend_global_capturecapmanager.resume_global_capture

关于python - 如何让 pytest 等待(手动)用户操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42760059/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com