[英]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.