Robot Framework分層設計
分層(Layer)模式是最常見的一種架構模式。甚至說分層模式是很多架構模式的基礎,將解決方案的組件分隔到不同的層中。每一層中的組件應保持內聚性,並且應大致在同一抽象級別。每一層都應與它下面的各層保持松散耦合。
分層模式的關鍵點在於確定依賴:即通過分層,可以限制子系統間的依賴關系,使系統以更松散的方式耦合,從而更易於維護。
如下為禪道登錄的自動化測試示例:
針對禪道登錄測試,我們可能不會只用一組“admin,123456”的用戶去做測試,還會使用多組用戶數據去做測試,那可以在Login模塊創建多個登錄測試用例,如下圖:
其實對於每一條測試用例來說,只是登錄的用戶名和密碼不同,腳本步驟是完全一樣的。這樣做無疑增加的腳本的冗余,而且不便於維護。假如,某個輸入框的定位方式變了,就不得不打開每一條用例進行修改。
可以通過分層的思想,然后根據robot_framework提供的功能來完成上述示例的優化,操作步驟如下:
1、創建資源:右鍵“UITest”,選擇“New Resource”創建資源,輸入名稱“業務關鍵字”
2、創建關鍵字:右鍵“業務關鍵字”,選擇“New Keyword”創建關鍵字,輸入名稱“禪道登錄”
3、編輯關鍵字:選中“禪道登錄”,點擊“Settings”按鈕,點擊“Arguments”輸入框,輸入如下:
參數之間用 | 分割線分開,如果想給參數一個默認值,可以如下編寫:
${username} | ${passwd} | ${exceptedRes}=admin 默認值參數必須放最后
4、把之前的登錄業務代碼也放入業務關鍵字中,如下:
5、添加導入的資源以及調用關鍵字:
切換到測試套件(Login)頁面,添加資源(業務關鍵字.txt),然后在測試用例中使用創建的關鍵字。如下圖所示:
6、進行繼續細化分層設計:
在上一個操作步驟中,對於每一條用例來說,調用“禪道登錄”關鍵字,輸入用戶名、密碼以及預期結果即可。不用關心用例是如何執行的。如果元素定位發生了變化,只用去修改“禪道登錄”關鍵字即可,不用對每一條用例做任何修改。大大提高的用例的維護性和擴展性。
我們還可以做如下細化操作,把過程中的步驟進行再次分層:
禪道登錄業務關鍵字內容改造如下:
基礎關鍵字內容如下:
使用命令行執行Robot Framework腳本
編寫好的Robot Framework腳本,可以使用Robot Framework自帶的pybot命令去執行測試,具體使用方法如下:
1、執行一個項目的所有測試用例:
pybot 項目路徑(項目路徑可以如下方式查看)
2、執行一個測試套件的所有用例:
pybot 項目路徑\suit文件名稱(如下圖)
3、執行測試套件中的測試用例:
pybot --test 用例名稱 項目路徑\suit文件名稱 (用例名稱支持* ?去做匹配)
舉例:
pybot --test “TestCase01" /Users/TestProject/TestSuite01.txt
pybot --test “TestCase*" /Users/TestProject/TestSuite01.txt
4、執行項目中指定標簽名的測試用例:
pybot --include 標簽名稱 項目路徑 (其中標簽名稱在測試用例的設置中添加)
pybot --include “smokeTest” /Users/TestProject/
5、傳遞變量參數:
使用Add Scalar去添加變量,添加完成后,可以使用命令行傳遞變量到測試腳本中去。
舉例:
pybot --test "TestCase01" -v num1:10 -v num2:10 /Users/TestProject/TestSuite01.txt
6、設置存放輸出文件的路徑:
-d \–outputdir 輸出文件的路徑。默認目錄是測試案例執行的目錄,給出的目錄也是相對於案例執行的目錄,除非設置的目錄是絕對路徑。
舉例:
pybot --test "TestCase01" -d /Users/TestProject/ /Users/TestProject/TestSuite01.txt
Robot Framework集成Jenkins環境
Jenkins工具介紹:
監視重復工作的執行,本質上提供了一個易於使用的持續集成系統,使得開發人員更容易地將改變集成到工程中,使得用戶更容易獲得一個新的build。自動化,持續的構建提高了軟件開發的效率。
Robot framework集成Jenkins步驟如下:
1、安裝Robot Framework plugin 插件
登錄Jenkins 之后,依次進入系統管理 – 管理插件頁面,然后在可選插件中選擇Robot Framework plugin 進行安裝即可。
2、安裝完之后,進入 jenkins首頁 -- 新建任務—構建一個自由風格的軟件項目—輸入項目名稱后,點擊確定。如下圖所示:
3、配置job頁面
增加構建步驟,類型為:Execute shell
設置運行RobotFramework腳本的命令
備注:里面輸入的命令為之前所講過的命令行執行RobotFramework腳本的命令
增加構建后操作步驟,類型為Publish Robot Framework test results,配置如下:
Directory of Robot output:該項要設置和構建步驟中的命令行 –d 后面的參數一致,否則會找不到如下配置的結果文件
Other files to copy:定義你要拷貝的其它文件,如果不設置,那么robot framework腳本運行過程中產生的截圖等文件,在后面生成的報表中會不能顯示。可以設置為.或者*.png
Thresholds for build result 閥值設置,如70%和90%,測試用例執行成功率和通過率
設置每天定時自動執行:增加構建觸發器,選擇類型Build periodically
日程表填寫格式為: * * * * * (注意,*號之間空格)
*號依次代表分、時、日、月、星期
比如:10 * * * * 10 14 * * * 10 14 8 * *
4、結果展示及其配置
做好之前的配置后,等設置的時間到達,可以自動運行robot測試腳本,運行后
可以直接在JOB展示頁查看結果,結果的展示是通過Robot Framework plugin插件實現的,圖形結果略,報表如下圖所示:
點擊open log.html鏈接,一般情況下會出現如下圖所示,不能顯示報表。
該問題有多種處理方式:
一、臨時解決方式:
jenkins系統管理—>運行命令行,在文本里輸入
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")
點擊運行即可解決,重啟jenkins后失效。
二、永久解決方式:
修改jenkins.xml如下:
5、利用 Zentimestamp 插件分批次生成測試報告
Zentimestamp 插件是用來自定義日期和時間模式的插件,之前配置的robot framework腳本執行后,都會覆蓋之前的測試結果,可以使用該插件根據執行時間分批次存放測試結果。配置如下:
1)安裝Zentimestamp插件,和之前安裝robot插件一樣
2)進入系統管理---系統設置---全局屬性,修改如下:
3)進入job配置頁面,把之前的shell做如下修改,增加 \({BUILD_TIMESTAMP}  4)在構建后操作 -- Directory of Robot output中同步修改,添加\){BUILD_TIMESTAMP},執行batch時,引用Jenkins中定義的變量用%param%
6、自定義robot framework 郵件測試報告
1)安裝插件Email Extension Plugin,該插件能允許你自定義郵件通知的方方面面,比如在發送郵件時你可以自定義發送給誰,發送具體什么內容等等,比jenkins自帶的郵件插件強大很多。
2)登錄163郵箱,開通smtp服務並設置郵箱客戶端授權碼
3)針對該插件進行全局配置:
進入系統管理 - 系統設置 - 配置Extended E-mail Notification默認設置(以163為例),點開高級按鈕,勾選Use SMTP Authentication,輸入163郵箱賬號和163郵箱客戶端授權碼(非郵箱登錄密碼)
4)繼續做如下配置
5)把管理員郵箱設置和發送郵件的163郵箱名一致:
6)針對該插件進行項目配置:
進入Job配置頁面,增加一個構建后操作步驟Editable Email Notification,配置可以默認,也可以根據你的需要來配置。
可把Default Subject 郵件主題增加項目名稱,如下:
RFDemo自動化測試報告——$DEFAULT_SUBJECT
可把郵件的觸發器改為構建完成總是發送郵件,點擊 Advanced Settings... ,做如下設置
7)之前在第四步設置了郵件模版,需要把對應的groovy-html-robot.template模版放入到 \(Jenkins_Home/email-templates目錄 \)Jenkins_Home可以通過進入系統設置查看:點擊系統管理—系統設置,查看主目錄
如果該目錄下沒有email-templates目錄,新建一個該目錄即可。
把自定義的模版文件groovy-html-robot.template放置在該目錄。
備注:以后有新的模版也可以放入該目錄,然后把郵件模塊設置成新模版。
登錄163郵箱查看的郵件報告: