簡體   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