[英]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")
查看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)
随心所欲地传递参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.