如何测试Python readline完成?
我正在用Python编写一个命令行界面。 它使用readline模块来提供命令历史和完成。
虽然在交互模式下一切正常,但我想对完成功能运行自动化测试。 我天真的第一次尝试涉及使用文件进行标准输入:
my_app < command.file
该命令文件包含一个选项卡,希望它能够调用完成功能。 没有运气。 什么是测试的正确方法?
为此,我会使用Pexpect(Python版本的Expect)。 readline库需要与终端进行交互以完成交互式制表符,如果它只从重定向文件获得单向输入,则不能执行此操作。
Pexpect为此工作,因为它创建了一个伪终端,它由两部分组成:正在运行测试的程序的从服务器以及运行Python pexpect代码的主服务器。 pexpect代码模拟运行测试程序的人员。 它负责将字符发送给从属服务器,包括换行符和制表符等字符,并对预期输出作出反应(这是“期望”这个短语的来源)。
从示例目录中查看程序ftp.py
,了解如何从预期内控制测试程序。 以下是代码示例:
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)
随意随意传递参数。
链接地址: http://www.djcxy.com/p/56423.html