環境介紹
RF結合Selenium Grid來進行分布式執行用例,Selenium Grid提供支持方便在多台主機環境上進行多種操作系統、多個不同瀏覽器執行環境,場景常用在兼容性測試。但是它本身不提供多線程並發執行,需要額外結合多進程技術才能達到並行執行用例,當用例較多情況下,采用多進程並發執行用例可壓縮時間,提升進度完成用例執行。開啟多少個進程根據 CPU多少線程有關。
- 若想在遠程主機啟動node節點,必須滿足以下要求:
1、本地hub主機與遠程node主機之間可以ping通
2、遠程主機必須安裝用例執行的瀏覽器及驅動,需要配置環境變量
3、遠程主機必須安裝java環境
環境selenium2.53.6,grid需要對應selenium-server-standalone-2.53.0.jar版本工具。這里推薦大家使用selenium2的最后一個版本selenium2.53.6,selenium3不推薦的原因就是目前還不太穩定。
瀏覽器對應驅動:
1、IE—> IEDriverServer_x64_2.50.0
2、firefox—> 46版本(selenium最高支持46及以下,46及以下不需要驅動,46以上的則需要下載驅動。)
3、Chrome—> 49版本(對應驅動:chromedriver_win32_46-50)
若想在遠程主機啟動node節點,必須滿足以下要求:
1、本地hub主機與遠程node主機之間可以ping通
2、遠程主機必須安裝用例執行的瀏覽器及驅動,需要配置環境變量
3、遠程主機必須安裝java環境
● hub主機需同時啟動一個hub和一個node,如下指令:
java -jar selenium-server-standalone-x.xx.x.jar -role hub
java -jar selenium-server-standalone-x.xx.x.jar -role node
●上面腳本分別啟動一個hub和一個node,hub默認端口號為4444,node默認端口號為5555。若是同一台主機上要啟動多個node,則需要注意指定端口號,可通過下面方式來啟動多個node節點。
java -jar selenium-server-standalone-x.xx.x.jar -role node -port 5555
java -jar selenium-server-standalone-x.xx.x.jar -role node -port 5556
java -jar selenium-server-standalone-x.xx.x.jar -role node -port 5557
● 如在遠程啟動節點,如下指令:
java -jar selenium-server-standalone-x.xx.x.jar -role node -port 5555 -hub http://192.168.97.69:4444/grid/register
參數: hub是指向hub管理節點的主機IP地址。
注意:如果是啟動火狐瀏覽器,還需指向瀏覽器安裝的路徑。
java -jar selenium-server-standalone-x.xx.x.jar –Dwebdriver.firefox.bin=“D:\Program Files\Mozilla Firefox\firefox.exe” -role node -port 5555 -hub http://192.168.97.69:4444/grid/register
【Selenium Grid有關環境部署詳見Selenium Grid文章解釋】
分布式執行用例
如下圖所示:調用grid各節點,實現分布式執行遠程node節點主機,這樣能夠在不同的節點主機執行用例,由hub節點管理各node節點,進行分發用例到node節點實現運行用例,目的可以實現不同瀏覽器和不同操作系統兼容性測試。
分布式多進程並發執行用例
如果某產品用例數量比較多,為了縮短時間執行完全部的用例,就用到分布式多進程並發系統測試,在不同的主機節點進行各自分工執行用例,最后把各節點主機執行后的結果合並成一份報告里。
假設測試套件grid下有兩個用例,每個用例是分布在不同的遠程主機,如下圖所示:
通過Process庫實現進程調用pybot指令實現並發執行用例。
● 上圖調用grid各節點,實現分布式多進程並發執行遠程多個node節點主機,上圖可知調用2個進程,也就是同時運行兩台主機執行用例,等待執行完后,自動把兩台主機的測試結果合並成一個報告文件里面。
● 要導入Process測試庫,才能使用關鍵字。
● -t參數指定要跑哪個用例名,如果用-s參數指定要跑哪個測試套件,-o參數指定輸出節點主機的結果,-d參數指定測試結果存放的路徑目錄,-R參數從之前失敗的輸出文件中選擇失敗的案例重新執行
● 注意存放的報告與進程存放的報告路徑要區分開來,否則合並后的報告變成進程執行的用例結果
● 合並后的報告是d:/attrobot/report,查看報告手動進入目錄查看
● 進程運行的報告,平台打開報告是按此目錄打開的,如下圖所示:
● 平台運行完后,自動合並后的報告,會出現兩個用例在同份報告里,如下圖所示:
假設有兩個測試套件分別是grid1和grid2,每個用例是分布在不同的遠程主機,如下圖所示:
如下圖,把兩個測試套件合並成一份測試報告的分布式多進程並發執行用例的腳本
下圖就是把兩個測試套件合並成一份測試報告效果:
為了提高case運行效率,實際工作中大家可能會拆分case並行跑。但是並行跑會生成多個測試報告,如何合並呢?Robot Framework集成了rebot工具,也可以使用它來進行報告的整合。指定參數name輸出報告,還可以指定部分case或者排除部分case輸出報告:
rebot --include或者rebot –exclude
還有更多參數:詳見reobt –help | more
手動合並報告:
如上圖,-N參數指定合並報告自定義的名稱。
自動重跑失敗用例
有時自動化測試用例執行失敗了, 但重跑一次又會成功。除了從腳本本身來提高穩定性,我們也希望能夠自動重跑一次失敗的那些用例。只要兩次執行中有一次成功,我們就可以認為測試通過。
實驗方法:
1、創建兩條用例:一條成功用例和一條失敗用例
2、第一個命令,執行D:\MyTestSuites下的所有用例,將執行結果輸出到D:\log\round1\下
call pybot.bat --outputdir D:\log\round1 D:\MyTestSuites
3、第二個命令,將D:\MyTestSuites里的所有測試用例中,在上個命令的輸出的output.xml中失敗的那些用例,再執行一遍。
call pybot.bat -S D:\log\round1\output.xml --outputdir D:\log\round2 D:\MyTestSuites
4、第三個命令,將上面兩次執行的結果合並到一個報告中。也就是說第一次執行失敗的用例,如果第二次執行成功了,在報告中會顯示最后結果為成功。
rebot --outputdir D:\log --merge D:\log\round1\output.xml D:\log\round2\output.xml
5、第四個命令,將失敗用例截圖復制指定存放結果目錄
call copy /y D:\log\round2\*.png D:\log
備注:如果要在CI做持續集成,需要用到call命令,如只在dos窗口運行,可不用call