Selenium執(zhí)行測試腳本穩(wěn)定性的一些經(jīng)驗分享交流
關(guān)于工作中使用Selenium執(zhí)行測試腳本穩(wěn)定性的一些經(jīng)驗分享
公司的自動化WEB測試框架IATA已上線運(yùn)行了一段時間,期間發(fā)現(xiàn)一些腳本穩(wěn)定性的問題,與大家分享一下。
CASE執(zhí)行游覽器:ie firefox chrome
穩(wěn)定性問題
一、在持續(xù)執(zhí)行WEB自動化的過程中,如需持續(xù)執(zhí)行腳本,比如持續(xù)跑腳本24小時,48小時,甚至一周時間。測試CASE會間歇性發(fā)生持續(xù)加載頁面無響 應(yīng)的情況。此現(xiàn)象發(fā)生后,測試CASE就會因為持續(xù)加載頁面這個動作而無響應(yīng)。后續(xù)CASE也不會執(zhí)行直到當(dāng)前人為手工解決當(dāng)前的測試進(jìn)程。
現(xiàn)象:頁面持續(xù)加載 無反應(yīng),測試CASE 中斷無法繼續(xù)執(zhí)行。
解決方案:
1)如上圖
建議使用線程的方式來監(jiān)控測試進(jìn)程的WEB加載執(zhí)行狀態(tài)。若超時后則從線程中FAIL當(dāng)前CASE,使腳本可以持續(xù)運(yùn)行。
方法
在頁面會發(fā)生跳轉(zhuǎn)的時候 啟一個 Thread來監(jiān)控進(jìn)程的狀況,在Thread的run方法定義一個 計時器,如果計時器超時,則可以刷新頁面,計時器清零,若此時刷新頁面后,計時器再次超時,則線程會關(guān)閉當(dāng)前進(jìn)程的游覽器,F(xiàn)AIL掉當(dāng)前的 CASE,TestNG會自動啟動下一個測試CASE。并且在全部測試CASE執(zhí)行完畢后,TestNG會記載執(zhí)行失敗的CASE,然后從新執(zhí)行 CASE。
部分Thread 代碼
Refresh code:
干掉線程的 code
這里是關(guān)掉chrome的進(jìn)程 來達(dá)到關(guān)閉游覽器的目的。
通過上述步驟則可以控制游覽器加載的過程從而解決CASE中加載頁面無響應(yīng)導(dǎo)致的CASE暫停問題。
driver.findelement(String locator) //查找頁面元素
driver.refush(); //刷新頁面
driver.getpagesource(); //獲取頁面html文本輸出
element.click();//點(diǎn)擊頁面元素
見過檢查發(fā)現(xiàn)上述函數(shù)在加載頁面或查找頁面元素的時候,若發(fā)生由于網(wǎng)絡(luò)原因或者頁面模塊加載出現(xiàn)問題時,頁面都會在這個過程中卡住,直接的后果就是這個CASE持續(xù)執(zhí)行幾小時沒結(jié)果。在 穩(wěn)定性1文中我們已經(jīng)介紹過處理的方法,在這里只針對某一個函數(shù)去放出部分代碼,
具體思路為
以driver.refush();為例
線程實(shí)現(xiàn)的代碼
核心調(diào)用的刷新頁面的函數(shù)
refreshThread();實(shí)現(xiàn)
調(diào)用流程
主CASE執(zhí)行刷新函數(shù)?刷新函數(shù)調(diào)用子線程?子線程執(zhí)行刷新?執(zhí)行完畢告訴主線程OK。
若主線程判斷子線程超時既頁面卡主的情況,則主線程會關(guān)閉子線程執(zhí)行相應(yīng)的FAIL操作。
歡迎交流~
posted on 2012-12-24 15:28 順其自然EVO 閱讀(1925) 評論(0) 編輯 收藏 所屬分類: selenium and watir webdrivers 自動化測試學(xué)習(xí)