繁体   English   中英

如何测试Python readline完成?

[英]How to test Python readline completion?

我正在用Python编写命令行界面。 它使用readline模块提供命令历史记录和完成。

虽然在交互模式下一切正常,但我想在完成功能上运行自动化测试。 我天真的第一次尝试涉及使用文件进行标准输入:

my_app < command.file

命令文件包含一个选项卡,希望它可以调用完成功能。 没运气。 什么是正确的测试方法?

为此,我将使用Pexpect (Expect的Python版本)。 readline库需要与终端通话以进行交互式tab-completion等 - 如果它只是从重定向文件获得单向输入,则不能这样做。

Pexpect适用于此,因为它创建了一个伪终端,它由两部分组成:slave,你正在测试的程序运行,以及master,Python运行的pexpect代码。 pexpect代码模拟运行测试程序的人。 它负责向从属设备发送字符,包括换行符和制表符等字符,并对预期输出作出反应(这是短语“expect”的来源)。

请参阅示例目录中的程序ftp.py ,以获取如何从expect中控制测试程序的一个很好的示例。 以下是代码示例:

child = pexpect.spawn('ftp ftp.openbsd.org')
child.expect('(?i)name .*: ')
child.sendline('anonymous')
child.expect('(?i)password')
child.sendline('pexpect@sourceforge.net')
child.expect('ftp> ')

rlcompleter可能会完成你想要的

从文档:

rlcompleter模块设计用于Python的交互模式。 用户可以将以下行添加到他或她的初始化文件(由PYTHONSTARTUP环境变量标识)以获得自动Tab完成:

try:
    import readline
except ImportError:
    print "Module readline not available."
else:
    import rlcompleter
    readline.parse_and_bind("tab: complete")

https://docs.python.org/2/library/rlcompleter.html

查看ScriptTest

from scripttest import TestFileEnvironment
env = TestFileEnvironment('./scratch')

def test_script():
    env.reset()
    result = env.run('do_awesome_thing testfile --with extra_win --file %s' % filename)

随心所欲地传递参数。

您可以尝试使用Sikuli来测试最终用户与您的应用程序的交互。

但是,这是一个完全的过度杀伤,需要很多额外的依赖,会慢慢工作,并且如果终端字体/颜色发生变化则会失败。 但是,您仍然可以测试实际的用户交互。

文档主页链接到幻灯片和关于使用Sikuli编写测试的FAQ问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM