如何添加标准输入与pytest的交互
How to add stdin interaction with pytest
我正在为一个系统编写集成测试,在该系统中我可以通过 Web 服务调用自动执行大部分测试,但由于我无法更改的遗留问题,我需要手动测试人员完成一些步骤。
我想使用 pytest 并创建一个 fixture,它基本上暂停测试执行并提示控制台输入(例如 "Do XYZ in system; type 'done' when done")并继续测试的其余部分。
诚然,我还没有对此做大量的黑客攻击,但我从 pytest 文档中看到:
... stdin is set to a “null” object which will fail on attempts to
read from it because it is rarely desired to wait for interactive
input when running automated tests.
除了,就我而言,我真的很想等待,除此之外,我的东西看起来是 pytest 的一个很好的用例。
仍在网上搜索提示,但如果有人已经越过了这个障碍,我很想知道。
从版本 3 开始,您可以 temporarily disable 捕获:
def test_input(capsys):
with capsys.disabled():
input("hit enter to continue: ")
print("this line is invisible as normal")
给予
(py36) dsm@notebook:~/coding$ py.test -v stdin.py
========================================== test session starts ===========================================
platform linux -- Python 3.6.0, pytest-3.0.7, py-1.4.32, pluggy-0.4.0 -- /home/dsm/sys/miniconda3/envs/py36/bin/python
cachedir: .cache
rootdir: /home/dsm/coding, inifile:
plugins: cov-2.3.1
collected 1 items
stdin.py::test_input hit enter to continue: [here I hit enter]
PASSED
======================================= 1 passed in 23.11 seconds ========================================
我正在为一个系统编写集成测试,在该系统中我可以通过 Web 服务调用自动执行大部分测试,但由于我无法更改的遗留问题,我需要手动测试人员完成一些步骤。
我想使用 pytest 并创建一个 fixture,它基本上暂停测试执行并提示控制台输入(例如 "Do XYZ in system; type 'done' when done")并继续测试的其余部分。
诚然,我还没有对此做大量的黑客攻击,但我从 pytest 文档中看到:
... stdin is set to a “null” object which will fail on attempts to read from it because it is rarely desired to wait for interactive input when running automated tests.
除了,就我而言,我真的很想等待,除此之外,我的东西看起来是 pytest 的一个很好的用例。
仍在网上搜索提示,但如果有人已经越过了这个障碍,我很想知道。
从版本 3 开始,您可以 temporarily disable 捕获:
def test_input(capsys):
with capsys.disabled():
input("hit enter to continue: ")
print("this line is invisible as normal")
给予
(py36) dsm@notebook:~/coding$ py.test -v stdin.py
========================================== test session starts ===========================================
platform linux -- Python 3.6.0, pytest-3.0.7, py-1.4.32, pluggy-0.4.0 -- /home/dsm/sys/miniconda3/envs/py36/bin/python
cachedir: .cache
rootdir: /home/dsm/coding, inifile:
plugins: cov-2.3.1
collected 1 items
stdin.py::test_input hit enter to continue: [here I hit enter]
PASSED
======================================= 1 passed in 23.11 seconds ========================================