如何使用pytest添加stdin交互

时间:2017-04-23 19:01:28

标签: python testing integration-testing pytest

我正在为一个系统编写集成测试,我可以通过Web服务调用自动完成大部分测试,但是由于我无法改变的遗留问题,我需要手动测试人员完成几个步骤。

我想使用pytest并创建一个基本上暂停测试执行的夹具并提示控制台输入(例如"在系统中执行XYZ;键入'完成'完成后")和继续进行剩下的测试。

我当然还没有对此做过大量的黑客攻击,但我从pytest docs那里得知:

  

... stdin设置为“null”对象,在尝试时将失败   从中读取,因为很少需要等待交互   运行自动化测试时输入。

除了在我的情况下,我真的想要等待,除此之外,我的东西看起来是pytest的一个很好的用例。

仍在搜索互联网的提示,但如果有人已经越过这个障碍,我很想知道。

2 个答案:

答案 0 :(得分:1)

从版本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 ========================================

答案 1 :(得分:0)

我还找到了How to make pytest wait for (manual) user action?

,经过追加搜索。

不确定我现在是否应该对这个问题进行欺骗,因为这里的答案对我来说更清晰。