3.1基本用法
Robot Framework測試用例從命令行執行,默認情況下,最終結果是XML格式的輸出文件和HTML 報告和日志。執行后,可以組合輸出文件,然后使用rebot工具進行后處理。
3.1.1開始測試執行
概要
pybot | jybot | ipybot [options] data_sources python | jython | ipy -m robot.run [options] data_sources python | jython | ipy path / to / robot / run.py [options] data_sources java -jar robotframework.jar [options] data_sources
通常使用pybot,jybot 或ipybot runner腳本開始測試執行。這些腳本在其他方面是相同的,但第一個使用Python執行測試,第二個使用Jython執行測試,最后一個使用IronPython。或者,可以使用 robot.run 入口點作為模塊或使用任何解釋器的腳本,或使用獨立的JAR分發。
無論執行方法如何,要執行的測試數據的路徑(或路徑)都在命令后作為參數給出。此外,可以使用不同的命令行選項以某種方式更改測試執行或生成的輸出。
指定要執行的測試數據
Robot Framework測試用例是在文件和目錄中創建的,它們是通過將相關文件或目錄的路徑提供給選定的運行程序腳本來執行的。路徑可以是絕對的,或者更常見的是,相對於執行測試的目錄。給定的文件或目錄創建頂級測試套件,它得到它的名字,除非與覆蓋--name 選項,從文件或目錄名。以下示例中說明了不同的執行可能性。請注意,在這些示例中,以及本節中的其他示例中,僅使用了pybot腳本,但可以類似地使用其他執行方法。
pybot test_cases.html pybot path/to/my_tests/ pybot c:\robot\tests.txt
也可以一次為多個測試用例文件或目錄提供路徑,用空格分隔。在這種情況下,Robot Framework會自動創建頂級測試套件,指定的文件和目錄將成為其子測試套件。創建的測試套件的名稱來自子套件名稱,通過將它們與&符號(&)和空格連接在一起。例如,下面第一個示例中頂級套件的名稱是 My Tests&Your Tests。這些自動創建的名稱通常很長且很復雜。在大多數情況下,最好使用--name選項來覆蓋它,如下面的第二個示例所示:
pybot my_tests.html your_tests.html pybot --name Example path/to/tests/pattern_*.html
3.1.2使用命令行選項
Robot Framework提供了許多命令行選項,可用於控制測試用例的執行方式和生成的輸出。本節介紹選項語法以及實際存在的選項。它們如何使用將在本章的其他地方討論。
使用選項
使用選項時,必須始終在runner腳本和數據源之間給出它們。例如:
pybot -L debug my_tests.txt pybot --include smoke --variable HOST:10.0.0.42 path/to/tests/
短期和長期期權
選項始終具有長名稱,例如--name,並且最常用的選項也具有短名稱,例如 -N。除此之外,只要它們是唯一的,就可以縮短長期選項。例如, - lite DEBUG有效,而--log log.html沒有,因為前者僅匹配 --loglevel,但后者匹配多個選項。手動執行測試用例時,短期和縮短選項都很實用,但在啟動腳本中建議使用長選項,因為它們更容易理解。
長選項格式不區分大小寫,這有助於以易於閱讀的格式編寫選項名稱。例如,--SuiteStatLevel 相當於,但比更易於閱讀--suitestatlevel。
設置選項值
大多數選項都需要一個值,該值在選項名稱后面給出。short和long選項都接受帶有空格的選項名稱分隔的值,如--include標記 或-i標記。對於長選項,分隔符也可以是等號,例如--include = tag,並且使用短選項可以省略分隔符,如-itag。
某些選項可以多次指定。例如, - variable VAR1:value --variable VAR2:另一個設置兩個變量。如果多次使用僅包含一個值的選項,則最后給出的值有效。
選項值為簡單模式
許多選項將參數視為簡單模式。這意味着*和?可以用作特殊字符,以便前者匹配任何字符串(甚至是空字符串),后者匹配任何單個字符。例如, - include prefix- *匹配以prefix-開頭的所有標簽,並且 - 包括??? 匹配任何長度為四個字符且以字符a開頭的標記。
3.1.3測試結果
命令行輸出
測試執行中最明顯的輸出是命令行中顯示的輸出。所有執行的測試套件和測試用例以及它們的狀態都會實時顯示在那里。下面的示例顯示了執行只有兩個測試用例的簡單測試套件的輸出:
================================================== ============================ 示例測試套件 ================================================== ============================ 第一次測試::可能的測試文檔 | 通過| -------------------------------------------------- ---------------------------- 第二次測試 | 失敗| 此處顯示錯誤消息 ================================================== ============================ 示例測試套件 | 失敗| 2個關鍵測試,1個通過,1個失敗 總共2次測試,1次通過,1次失敗 ================================================== ============================ 輸出:/path/to/output.xml 報告:/path/to/report.html 日志:/path/to/log.html
從Robot Framework 2.7開始,只要測試用例中的頂級關鍵字結束,控制台上就會有通知。如果關鍵字通過則使用綠點,如果失敗則使用紅色F. 這些標記寫入行尾,當測試本身結束時,它們會被測試狀態覆蓋。如果將控制台輸出重定向到文件,則禁用寫入標記。
生成的輸出文件
命令行輸出非常有限,通常需要單獨的輸出文件來調查測試結果。如上例所示,默認情況下會生成三個輸出文件。第一個是XML格式,包含有關測試執行的所有信息。第二個是更高級別的報告,第三個是更詳細的日志文件。這些文件和其他可能的輸出文件將在不同的輸出文件一節中詳細討論。
退貨代碼
運行器腳本使用返回代碼將整體測試執行狀態傳達給運行它們的系統。當執行成功啟動且沒有嚴重測試失敗時,返回碼為零。所有可能的返回代碼在下表中說明。
RC | 說明 |
---|---|
0 | 所有關鍵測試都通過了 |
1-249 | 返回的關鍵測試數量失敗。 |
250 | 250次或更多嚴重故障。 |
251 | 打印幫助或版本信息。 |
252 | 無效的測試數據或命令行選項。 |
253 | 用戶停止測試執行。 |
255 | 意外的內部錯誤。 |
執行后應始終可以輕松獲得返回代碼,這樣可以輕松自動確定整體執行狀態。例如,在bash shell中,返回碼是特殊變量$?,在Windows中,它位於%ERRORLEVEL% 變量中。如果您使用某些外部工具來運行測試,請查閱其文檔以獲取返回代碼。
從Robot Framework 2.5.7開始,即使使用--NoStatusRC命令行選項存在嚴重故障,也可以將返回碼設置為0 。這可能是有用的,例如,在可以確定測試執行的整體狀態之前需要對結果進行后處理的連續集成服務器中。
注意
相同的返回碼也與rebot一起使用。
執行期間的錯誤和警告
在測試執行期間,可能會出現意外問題,例如無法導入庫或資源文件或不推薦使用關鍵字 。根據嚴重程度,此類問題被歸類為錯誤或警告,並將它們寫入控制台(使用標准錯誤流),顯示 在日志文件中的單獨“ 測試執行錯誤”部分,並寫入Robot Framework自己的系統日志。通常,這些錯誤是由Robot Framework核心生成的,但庫可以使用日志級別WARN來編寫警告。下面的示例說明了日志文件中的錯誤和警告的外觀。
3.1.4轉義復雜的字符
因為空格用於將選項彼此分開,所以在選項值中使用它們是有問題的。某些選項(如 --name)會自動將下划線轉換為空格,但必須轉義其他空格。此外,許多特殊字符在命令行中使用起來很復雜。因為使用反斜杠轉義復雜字符或引用值並不總是能夠很好地工作,所以Robot Framework有自己的通用轉義機制。另一種可能性是使用參數文件,其中可以以純文本格式指定選項。這兩種機制在執行測試和后處理輸出時都有效,而且一些外部支持工具也具有相同或相似的功能。
在Robot Framework的命令行轉義機制中,有問題的字符將使用自由選擇的文本進行轉義。要使用的命令行選項是--escape(短版本 -E),它采用以下格式的參數:with,其中要轉義的字符的名稱是什么, with是要轉義它的字符串。可以轉義的字符列在下表中:
Character | Name to use | Character | Name to use |
---|---|---|---|
& | amp | ( | paren1 |
' | apos | ) | paren2 |
@ | at | % | percent |
\ | blash | | | pipe |
: | colon | ? | quest |
, | comma | " | quot |
{ | curly1 | ; | semic |
} | curly2 | / | slash |
$ | dollar | space | |
! | exclam | [ | square1 |
> | gt | ] | square2 |
# | hash | * | star |
< | lt |
以下示例使語法更清晰。在第一個示例中,元數據X 通過空格獲取值Value,而在第二個示例中,變量$ {VAR}被指定為 “Hello,world!”。:
--escape space:_ --metadata X:Value_with_spaces -E space:SP -E quot:QU -E comma:CO -E exclam:EX -v VAR:QUHelloCOSPworldEXQU
請注意,所有給定的命令行參數(包括測試數據的路徑)都將被轉義。因此需要仔細選擇轉義字符序列。
3.1.5參數文件
通常可以使用參數文件輕松處理有問題的字符。這些文件可以包含命令行選項和測試數據的路徑,每行一個。它們與 --argumentfile選項(短選項-A)以及可能的其他命令行選項一起使用。參數文件可以包含任何字符而不進行轉義,但忽略行開頭和結尾的空格。此外,將忽略以井號(#)開頭的空行和行:
--doc This is an example (where "special characters" are ok!) --metadata X:Value with spaces --variable VAR:Hello, world! # This is a comment path/to/my/tests
注意
要在參數文件中使用非ASCII字符,必須使用UTF-8編碼保存它們。
參數文件的另一個重要用法是按特定順序指定輸入文件或目錄。如果字母默認執行順序不合適,這可能非常有用:
--name My Example Tests tests/some_tests.html tests/second.html tests/more/tests.html tests/more/another.html tests/even_more_tests.html
在命令行上使用參數文件時,其內容將放置到參數文件選項所在的同一參數的原始參數列表中。參數文件可以單獨使用,以便它們包含測試數據的所有選項和路徑,或者包含其他選項和路徑。可以 多次使用--argumentfile選項,甚至可以遞歸使用:
pybot --argumentfile all_arguments.txt pybot --name example --argumentfile other_options_and_paths.txt pybot --argumentfile default_options.txt --name example my_tests.html pybot -A first.txt -A second.txt -A third.txt some_tests.tsv
特殊值STDIN可用於從標准輸入流而不是文件中讀取參數。在使用腳本生成參數時,這非常有用:
generate_arguments.sh | pybot --argumentfile STDIN generate_arguments.sh | pybot --name Example --argumentfile STDIN mytest.txt
從標准輸入讀取參數是Robot Framework 2.5.6中的一個新功能。
3.1.6獲取幫助和版本信息
在執行測試用例和后處理輸出時,都可以通過選項--help及其短版本 -h獲得命令行幫助。這些幫助文本簡要概述,並簡要介紹可用的命令行選項。
所有跑步者腳本也支持使用選項--version獲取版本信息。此信息還包含Python或Jython版本以及平台類型:
$ pybot --version Robot Framework 2.7 (Python 2.6.6 on linux2) $ jybot --version Robot Framework 2.7 (Jython 2.5.2 on java1.6.0_21) C:\>rebot --version Rebot 2.7 (Python 2.7.1 on win32)
3.1.7創建啟動腳本
測試用例通常由持續集成系統或其他一些機制自動執行。在這種情況下,需要有一個腳本用於啟動測試執行,並且還可能以某種方式用於后處理輸出。手動運行測試時,類似的腳本也很有用,尤其是在需要大量命令行選項或設置測試環境很復雜的情況下。
在類UNIX環境中,shell腳本提供了一種簡單但功能強大的機制來創建自定義啟動腳本。也可以使用Windows批處理文件,但它們更有限,而且通常也更復雜。獨立於平台的替代方案是使用Python或其他一些高級編程語言。無論使用何種語言,建議使用長選項名稱,因為它們比短名稱更容易理解。
在第一個示例中,使用不同的瀏覽器執行相同的Web測試,然后將結果合並。使用shell腳本很容易,因為實際上你只需要一個接一個地列出所需的命令:
#!/bin/bash
pybot --variable BROWSER:Firefox --name Firefox --log none --report none --output out/fx.xml login
pybot --variable BROWSER:IE --name IE --log none --report none --output out/ie.xml login
rebot --name Login --outputdir out --output login.xml out/fx.xml out/ie.xml
用Windows批處理文件實現上面的例子也不是很復雜。最重要的是要記住,因為pybot和rebot是作為批處理文件實現的,所以當從另一個批處理文件運行它們時必須使用call。否則,執行將在第一個批處理文件完成時結束。
@echo off call pybot --variable BROWSER:Firefox --name Firefox --log none --report none --output out\fx.xml login call pybot --variable BROWSER:IE --name IE --log none --report none --output out\ie.xml login call rebot --name Login --outputdir out --output login.xml out\fx.xml out\ie.xml
在下面的示例中,在開始執行測試之前,將lib目錄下的JAR文件放入CLASSPATH中。在這些示例中,啟動腳本要求將執行的測試數據的路徑作為參數提供。即使已在腳本中設置了某些選項,也可以自由使用命令行選項。所有這些都是使用bash相對簡單的:
#!/bin/bash
cp=. for jar in lib/*.jar; do cp=$cp:$jar done export CLASSPATH=$cp jybot --ouputdir /tmp/logs --suitestatlevel 2 $*
使用Windows批處理文件實現此操作稍微復雜一些。困難的部分是在For循環中設置包含所需JAR的變量,因為由於某種原因,如果沒有輔助函數,這是不可能的。
@echo off set CP=. for %%jar in (lib\*.jar) do ( call :set_cp %%jar ) set CLASSPATH=%CP% jybot --ouputdir c:\temp\logs --suitestatlevel 2 %* goto :eof :: Helper for setting variables inside a for loop :set_cp set CP=%CP%;%1 goto :eof
修改Java啟動參數
有時使用Jython時需要更改Java啟動參數。最常見的用例是增加JVM最大內存大小,因為當輸出非常大時,默認值可能不足以創建報告和日志。有幾種方法可以配置JVM選項:
-
直接修改Jython啟動腳本(jython shell腳本或 jython.bat批處理文件)。這是一種永久性配置。
-
設置JYTHON_OPTS環境變量。這可以在操作系統級別中永久執行,也可以在自定義啟動腳本中執行。
-
將所需的Java參數wit -J選項傳遞給Jython啟動腳本,該腳本將它們傳遞給Java。使用直接入口點時,這一點特別容易:
jython -J-Xmx1024m -m robot.run some_tests.txt
3.1.8調試問題
測試用例可能會失敗,因為被測系統無法正常工作,在這種情況下,測試發現了一個錯誤,或者測試本身是錯誤的。解釋失敗的錯誤消息顯示在命令行輸出和報告文件中,有時單獨的錯誤消息足以查明問題。但是,更常見的情況是,不需要日志文件,因為它們還有其他日志消息,並且它們顯示實際上失敗的關鍵字。
當測試的應用程序導致失敗時,錯誤消息和日志消息應該足以理解導致它的原因。如果不是這種情況,則測試庫不能提供足夠的信息,需要進行增強。在這種情況下,如果可能,手動運行相同的測試也可能會顯示有關該問題的更多信息。
測試用例本身或他們使用的關鍵字導致的失敗有時很難調試。例如,如果錯誤消息告訴關鍵字使用錯誤數量的參數修復問題顯然很容易,但如果關鍵字丟失或以意外方式失敗,找到根本原因可能會更難。查找更多信息的第一個位置是日志文件中的執行錯誤部分。例如,有關失敗的測試庫導入的錯誤可能很好地解釋了由於缺少關鍵字而導致測試失敗的原因。
如果日志文件默認情況下沒有提供足夠的信息,則可以執行較低日志級別的測試。例如,使用DEBUG級別記錄顯示代碼中發生故障的位置的回溯,當問題出現在單個關鍵字中時,此信息非常有用。
如果日志文件仍然沒有足夠的信息,最好啟用syslog並查看它提供的信息。還可以在測試用例中添加一些關鍵字以查看正在進行的操作。特別是BuiltIn關鍵字 日志和日志變量很有用。如果沒有其他工作,總是可以從郵件列表或其他地方搜索幫助。