提高GUI測試穩(wěn)定性的關鍵技術

GUI 自動化測試穩(wěn)定性,最典型的表現(xiàn)形式就是,同樣的測試用例在同樣的環(huán)境上,時而測試通過,時而測試失敗。

造成 GUI 測試不穩(wěn)定的因素

一、非預計的彈出對話框

1.1、GUI 自動化測試用例執(zhí)行過程中,操作系統(tǒng)彈出的非預計對話框
比如,GUI 測試運行到一半,操作系統(tǒng)突然彈出殺毒軟件更新請求、病毒告警信息、系統(tǒng)更新請求等對話框。這種對話框的彈出往往是難以預計的,但是一旦發(fā)生就有可能造成 GUI 自動化測試的不穩(wěn)定。

1.2、被測軟件本身也有可能在非預期的時間彈出預期的對話框
比如,被測軟件是一個電子商務網(wǎng)站,在網(wǎng)站上進行操作時,很可能會隨機彈出“用戶調查”對話框。雖然這種對話框是可知的,但是具體會在哪一步彈出卻是不可預期的。而這,往往會造成 GUI 自動化測試的不穩(wěn)定。
解決方案:
1、當自動化腳本發(fā)現(xiàn)控件無法正常定位,或者無法操作時,GUI 自動化框架自動進入“異常場景恢復模式”。
2、在“異常場景恢復模式”下,GUI 自動化框架依次檢查各種可能出現(xiàn)的對話框,一旦確認了對話框的類型,立即執(zhí)行預定義的操作(比如,單擊“確定”按鈕,關閉這個對話框),接著重試剛才失敗的步驟。
注:這種方式只能處理已知可能出現(xiàn)的對話框。
而對于新類型的對話框,只能通過自動化的方式嘗試點擊上面的按鈕進行處理。每當發(fā)現(xiàn)一種潛在會彈出的對話框,我們就把它的詳細信息(包括對象定位信息等)更新到“異常場景恢復”庫中,下次再遇到相同類型的對話框時,系統(tǒng)就可以自動關閉了。

對于非預期的彈框也可以通過檢查置頂窗口是否是預期軟件窗口,從而確定是否被第三方彈框影響

二、頁面控件屬性的細微變化

比如,“登錄”按鈕的 ID 從“Button_Login_001”變成了“Button_Login_888”,那么如果 GUI 自動化測試腳本還是按照原來的“Button_Login_001”來定位“登錄”按鈕,就會因為 ID 值的變化,定位不到它了,自動化測試用例自然就會失敗。
解決方案:
1、通過控件類型(Button)縮小了范圍
2、通過屬性值中的關鍵字(Login)進一步縮小范圍
3、根據(jù)屬性值變化前后的相似性,最終定位到該控件

采用“組合屬性”定位控件會更精準,而且成功率會更高,如果能在此基礎上加入“模糊匹配”技術,可以進一步提高控件的識別率。
“模糊匹配”是指,通過特定的相似度算法,控件屬性發(fā)生細微變化時,這個控件依舊可以被準確定位。

但是,開源的 GUI 自動化測試框架,目前還沒有現(xiàn)成的框架直接支持模糊匹配,通常需要你進行二次開發(fā),實現(xiàn)思路是:實現(xiàn)自己的對象識別控制層,也就是在原本的對象識別基礎上額外封裝一層,在這個額外封裝的層中加上模糊匹配的實現(xiàn)邏輯。

如果是 selenium 的話,建議優(yōu)先使用 xpath,這樣就算 id、clases、name 等控件屬性改變,只要不是頁面改版,應該不會影響自動化穩(wěn)定性。

三、被測系統(tǒng)的 A/B 測試

A/B 測試,是互聯(lián)網(wǎng)產(chǎn)品常用的一種測試方法。它為 Web 或 App 的界面或流程提供兩個不同的版本,然后讓用戶隨機訪問其中一個版本,并收集兩個版本的用戶體驗數(shù)據(jù)和業(yè)務數(shù)據(jù),最后分析評估出最好的版本用于正式發(fā)布。

A/B 測試通常會發(fā)布到實際生產(chǎn)環(huán)境,所以就會造成生產(chǎn)環(huán)境中 GUI 自動化測試的不穩(wěn)定。

解決思路:在測試腳本內部對不同的被測版本做分支處理,腳本需要能夠區(qū)分 A 和 B 兩個的不同版本,并做出相應的處理。

四、隨機頁面延遲造成控件識別失敗

加入重試(retry)機制,當某一步 GUI 操作失敗時,框架會自動發(fā)起重試,重試可以是步驟級別的,也可以是頁面級別的,甚至是業(yè)務流程級別的。

對于開源 GUI 測試框架,重試機制往往不是自帶的功能,需要自己二次開發(fā)來實現(xiàn)。

注:對于那些會修改一次性使用數(shù)據(jù)的場景,切忌不要盲目啟用頁面級別和業(yè)務流程級別的重試。

重試機制確實是個好辦法,但是如果用例都是因為重試才執(zhí)行正確,有可能會漏出和緩存相關的問題,因為重試應該算一個獨立測試場景了,現(xiàn)在是把它作為主要測試場景了。

五、測試數(shù)據(jù)問題

比如,測試用例所依賴的數(shù)據(jù)被其他用例修改了;再比如,測試過程中發(fā)生錯誤后自動進行了重試操作,但是數(shù)據(jù)狀態(tài)已經(jīng)在第一次執(zhí)行中被修改了。

構造自動化數(shù)據(jù)時要特別注意,構造一些帶特殊字段的數(shù)據(jù)庫信息,最好是超出常人操作的數(shù)據(jù)信息,這樣可以有效避免數(shù)據(jù)被誤修改的風險,當然,還有一個處理辦法就是先檢查測試數(shù)據(jù)是否存在/異常,不存在或異常都進行重建即可,這部分也算是測試代碼的兼容處理吧。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容