如何测试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

上一篇: How to test Python readline completion?

下一篇: completion in Cmd.cmd of Python