天天看點

Selenium執行測試腳本穩定性的一些經驗分享交流

  公司的自動化web測試架構iata已上線運作了一段時間,期間發現一些腳本穩定性的問題,與大家分享一下。

  case執行遊覽器:ie firefox chrome

  穩定性問題

   一、在持續執行web自動化的過程中,如需持續執行腳本,比如持續跑腳本24小時,48小時,甚至一周時間。測試case會間歇性發生持續加載頁面無響 應的情況。此現象發生後,測試case就會因為持續加載頁面這個動作而無響應。後續case也不會執行直到目前人為手工解決目前的測試程序。

  現象:頁面持續加載 無反應,測試case 中斷無法繼續執行。

  解決方案:

Selenium執行測試腳本穩定性的一些經驗分享交流

  1)如上圖

  建議使用線程的方式來監控測試程序的web加載執行狀态。若逾時後則從線程中fail目前case,使腳本可以持續運作。

  方法

   在頁面會發生跳轉的時候 啟一個 thread來監控程序的狀況,在thread的run方法定義一個 計時器,如果計時器逾時,則可以重新整理頁面,計時器清零,若此時重新整理頁面後,計時器再次逾時,則線程會關閉目前程序的遊覽器,fail掉目前的 case,testng會自動啟動下一個測試case。并且在全部測試case執行完畢後,testng會記載執行失敗的case,然後從新執行 case。

  部分thread 代碼

  refresh  code:

Selenium執行測試腳本穩定性的一些經驗分享交流

  幹掉線程的 code

Selenium執行測試腳本穩定性的一些經驗分享交流

  這裡是關掉chrome的程序 來達到關閉遊覽器的目的。

  通過上述步驟則可以控制遊覽器加載的過程進而解決case中加載頁面無響應導緻的case暫停問題。

 我們發現使用webdriver的過程中,testcase在執行時,并非隻有get(url)的時候會發生測試case卡主的問題,以下是對會發生此情況的函數的補充

  driver.findelement(string locator) //查找頁面元素

driver.refush(); //重新整理頁面

driver.getpagesource(); //擷取頁面html文本輸出

element.click();//點選頁面元素

  見過檢查發現上述函數在加載頁面或查找頁面元素的時候,若發生由于網絡原因或者頁面子產品加載出現問題時,頁面都會在這個過程中卡住,直接的後果就是這個case持續執行幾小時沒結果。在 穩定性1文中我們已經介紹過處理的方法,在這裡隻針對某一個函數去放出部分代碼,

  具體思路為

  以driver.refush();為例

  線程實作的代碼

Selenium執行測試腳本穩定性的一些經驗分享交流

  核心調用的重新整理頁面的函數

Selenium執行測試腳本穩定性的一些經驗分享交流

  refreshthread();實作

Selenium執行測試腳本穩定性的一些經驗分享交流

  調用流程

  主case執行重新整理函數?重新整理函數調用子線程?子線程執行重新整理?執行完畢告訴主線程ok。

  若主線程判斷子線程逾時既頁面卡主的情況,則主線程會關閉子線程執行相應的fail操作。

  歡迎交流~

====================================分割線================================

最新内容請見作者的github頁:http://qaseven.github.io/