您如何在Python中测试ncurses应用?

时间:2018-09-17 02:07:30

标签: python ncurses npyscreen

我们已经使用Python构建了cli-app。某些部分需要ncurses,因此我们使用 npyscreen。我们已经使用pytest成功测试了大部分应用 (借助模拟和其他功能)。但是我们坚持“如何测试 ncurses代码的一部分'

使用我们的ncurses代码的这一部分,提示用户回答:

"""
Generate text user interface:
example :
fields = [
    {"type": "TitleText", "name": "Name", "key": "name"},
    {"type": "TitlePassword", "name": "Password", "key": "password"},
    {"type": "TitleSelectOne", "name": "Role",
    "key": "role", "values": ["admin", "user"]},
]
form = form_generator("Form Foo", fields)
print(form["role"].value[0])
print(form["name"].value)
"""


def form_generator(form_title, fields):
    def myFunction(*args):
    form = npyscreen.Form(name=form_title)
    result = {}
    for field in fields:
        t = field["type"]
        k = field["key"]
        del field["type"]
        del field["key"]

        result[k] = form.add(getattr(npyscreen, t), **field)
    form.edit()
    return result

    return npyscreen.wrapper_basic(myFunction)

我们已经尝试了很多方法,但是失败了:

  • stringIO捕获输出:失败
  • 将输出重定向到文件:失败
  • hecate:失败
    • 我认为只有运行整个程序,这才有用
  • pyautogui
    • 我认为只有运行整个程序,这才有用

这是我所拥有的完整步骤 tried

所以我最后使用的是使用patch。我修补那些 功能。但是缺点是这些函数里面的语句是 保持未经测试。因为它只声明了硬编码的返回值。

我发现npyscreen docs 用于写作测试。但是我不完全明白。只是一个例子。

谢谢。

1 个答案:

答案 0 :(得分:0)

python docs中没有提到它,但是您可以使用curses库的screen-dump功能来捕获信息以进行分析。