Python 如何使py.test测试接受交互式输入?

Python 如何使py.test测试接受交互式输入?,python,pytest,Python,Pytest,我将py.test用于一个有点非常规的应用程序。基本上,我希望在测试中通过print()和input()进行用户交互(这是Python 3.5)。最终目标是对硬件和多层软件进行半自动化测试,即使在原则上也无法自动测试。一些测试用例会要求测试技术人员做一些事情(通过输入或按下控制台上的任意键或类似键进行确认),或要求他们进行简单测量或目视确认一些事情(在控制台上输入) 我(天真地)想做的事情的例子: def test_thingie(): thingie_init('red') p

我将py.test用于一个有点非常规的应用程序。基本上,我希望在测试中通过print()和input()进行用户交互(这是Python 3.5)。最终目标是对硬件和多层软件进行半自动化测试,即使在原则上也无法自动测试。一些测试用例会要求测试技术人员做一些事情(通过输入或按下控制台上的任意键或类似键进行确认),或要求他们进行简单测量或目视确认一些事情(在控制台上输入)

我(天真地)想做的事情的例子:

def test_thingie():
    thingie_init('red')
    print('Testing the thingie.')
    # Ask the testing technician to enter info, or confirm that he has set things up physically
    x = int(input('Technician: How many *RED* widgets are on the thingie? Enter integer:')) 
    assert x == the_correct_number
当使用pytest-s调用测试文件以防止stdin和stdout捕获时,这一点适用,但是py.test文档中记录的方法(
with capsys.disabled()
)不起作用,因为它们只影响stdout和stderr

使用py.test模块中的代码,不使用命令行选项,理想情况下是每次测试,有什么好方法可以实现这一点


值得一提的是,这个平台是Windows,我不想让它受到冲击,也不想被stdin/out/任何嵌套外壳、不常见外壳等的包装所影响。

有一个完全符合要求的包

Wooey是一个运行命令行Python脚本的简单web界面。 可以将其视为将脚本放到web上的一种简单方法

演示站点:

没有命令行选项

使用pytest.ini或env避免每次都使用命令行选项

最好每次测试

使用功能范围的夹具获取用户输入。示例代码:

# contents of conftest.py
import pytest
@pytest.fixture(scope='function')
def take_input(request):
    val = input(request.param)
    return val



#Content of test_input.py
import pytest

@pytest.mark.parametrize('prompt',('Enter value here:'), indirect=True)
def test_input(take_input):
    assert take_input == "expected string"

我真的不知道这对我的应用程序有什么帮助。我对命令行脚本没有太多的了解。这将为您提供一个web界面,用于输入“input”,其输出将在同一网页上。我以为那就是你想要的。。试试演示网站:你想做什么样的测试?单元测试、集成测试、行为测试、可用性测试等等,。。。?看起来你正在尝试将所有这些元素混合在一起。顺便说一句,原则上每个软件都可以测试。我特别想做的是让input()内置在Pytest单元案例中的工作方式与在交互式python或脚本中的工作方式相同。你找到了解决这个问题的好方法吗!?我基本上是在做完全相同的测试,多个软件层与硬件接口,要求技术人员在测试之间操作部分硬件。