每個test case寫完后,我們都可以寫個日志或是注釋來提示輸出結果,檢查測試狀態,和查看錯誤信息。就像直接寫程序的原理一樣。有幾種方法可供選擇:你既可以用Log關鍵字,也可以用Comment關鍵字,也可以直接寫“#”。
Log就是日志的意思,屬于Robot Framework的內嵌關鍵字,在官方API文檔上有這么幾種使用方法:
比如,如果不加任何參數,那輸出結果就是一條簡單的信息;如果后面加個“WARN”,那輸出結果就是一條警告類型的信息。現在做實驗,打開Tests -> Login –> TCLOG-1,在第4行和第5行輸入以下命令:
執行test case,會得到如下的提示:
我們會注意到,系統輸出兩條關于用戶成功登錄的日志,第一條的頭部顯示INFO,第二條的頭部顯示WARN,這兩個關鍵字在Robot Framework里是“Level”的意思,也就是類型或是等級。默認就是INFO,代表最基本類型的信息,在咱們的test case里所有的運行步驟都是基本信息。WARN指的是警告類型的信息,警告信息也會在報告里單獨顯示。
由于API文檔里的內容很多,出于篇幅不可能把所有的關鍵字全部進行講解和實驗,有很多我也不確定用法和結果,也是一直在學習。這里再次建議大家養成看文檔上網查詢的好習慣。
Comment是顯示在報告里的一條注釋信息,比Log要簡單,具體用法如下圖,在第6行和第7行分別寫下:
注意,這兩種方法都是寫注釋的,不過目的不相同。第6行目的是檢查輸出了什么,所以信息會顯示在test case運行完的日志里;而第7行只是在信息前加了個井號,它的目的只是在程序中告知測試員某段代碼的功能是什么,用于在編程中使用,所以不會輸出。它更像是程序員們編程時加注釋的方法。馬上我們開始的第3個測試用例中我們就會用到這種Comment。
第3個test case是實現一個員工工時表查詢的功能。先來看看這個工時表,在導航欄上點擊“Timesheet”,我在上面創建了4條虛擬員工的工作記錄,包括什么時候開始上下班,工作了多長時間,還有一些備注。在查詢文本框中輸入“Test One”顯示1號員工的工時單;輸入“Test Two”顯示2號員工的工時單,以此類推。
我們設計的test case步驟如下:
1. 登錄;
2. 導航到Timesheet下;
3. 輸入員工姓名,查看返回結果是否正確:
1) 輸入”Test One”,返回2條記錄,且均包含”Test One”
2) 輸入”Test Two”,返回1條記錄,且包含”Test Two”
3) 輸入”Test Three”,返回1條記錄,且包含”Test Three”
4) 輸入”Test Four”,無返回記錄。
第1步登錄不說了,直接調用以前寫的方法就行。第2步導航到Timesheet下,就是簡單點擊按鈕,也沒什么可說的。第3步是我們的測試點,需要輸入員工姓名。和登錄一樣,員工姓名也是從測試數據集里來的,我們首先準備測試數據。在Test_Data文件夾下創建一個叫Timesheet的子文件夾,然后創建一個叫TCTIMES-1.xls的文件:
我創建了兩個sheet,一個在第1步登錄使用,一個在第3步輸入員工姓名時使用,簡單明了。當然,有些人都寫在一個sheet里也沒關系,只要別把數據搞亂就好。在“employee”sheet中,姓名被分成姓和名兩列,有人說你分來寫累不累?確實累,但我是故意這么寫的,想多告訴大家一些關于Robot Framework里字符串的使用方法。還有一列是期望的工時記錄數目,雖然是一些數,但Excel這里也用字符串表示,到時候講為什么。
現在我們就要正式開始寫test case了。右擊Tests -> New Suite創建模塊,起名為Timesheet。現在我們可以再把ApplicationSpecific.html里引入的類庫和資源文件做一些調整 - 引用Selenium2Library,OperatingSystem和DataDriven.py:
同時刪除Tests -> Login模塊里的Selenium2Library,OperatingSystem和DataDriven.py文件,因為你本身引入了ApplicationSpecific.html,就不用再重復引了。都沒問題后創建該模塊下第一個test case – TCTIMES-1,加入ApplicationSpecific.html和Pages里的Login.html資源文件:
接著在TCTIMES-1中寫進Setup和Teardown,并且在前4行把登錄部分的代碼按下圖寫好:
第一步就是之前提到的comment的一種寫法,它并不輸出,在代碼量特別大時我們可以用它提示當前的代碼是干什么的;第2步到第4步其實就是Tests –> Login -> TCLOG-1的內容,以后只要有登陸步驟我們就寫這幾行就行,因為所有內容都已經包含在Valid login to xiaocesuo函數里,直接調用即可。
登錄完成之后就是從菜單進入到Timesheet界面的步驟,很簡單。右鍵Pages -> New Resource–> 創建資源文件Timesheet.html用來寫Timesheet模塊中需要的函數。這里還是相同的問題,你可以把導航到Timesheet這步直接寫到測試用例TCTIMES-1里,也可以寫成函數。我還是傾向于寫成函數,因為以后只要有“進入Timesheet界面”的測試步驟我就可以直接調用就好了。右鍵Timesheet.html -> New Keyword -> 創建函數Navigate to Timesheet Screen,不需要任何參數和返回值。:
按部就班,下面是寫變量。之前有關登錄的變量我們都放到了ObjRepository -> Login.html下,現在關于工時表的變量也不例外。右擊ObjRepository -> New Resource -> 創建Timesheet.html,然后先按圖依次創建${locMenu_Timesheet},${locTSTable_SearchBox}和${locTSTable_SearchBtn}三個變量。這三個變量分別代表導航到timesheet的導航按鈕,搜索工時表框以及查詢按鈕
回到Pages -> Timesheet.html把變量以及環境相關的資源文件都添加進來:
回到Natigate To Timesheet Screen繼續按下圖完成該Keyword:
這一下一目了然,聲明出來的變量是用于函數步驟中的。點擊導航欄上Timesheet的xpath,然后等待網頁跳轉。我的習慣是每次點擊過后都等待個幾秒鐘,有時網頁加載龜速,最好等一等。
回到TCTIMES-1,把函數Navigate to Timesheet Screen寫到test case中,注意引Pages -> Timesheet.html中的資源文件。前兩步登錄和導航到Timesheet頁面就做完了:
這篇文章的源代碼在[Test8](https://github.com/cslm/cslm.robotframework/tree/master/Test8)中。