針對(duì)"GUI自動(dòng)化測(cè)試穩(wěn)定性問題"這個(gè)問題同木,最典型的情景就是:同樣的測(cè)試用例甘萧,在同樣的測(cè)試執(zhí)行環(huán)境下,測(cè)試的結(jié)果有時(shí)是Success,有時(shí)是Fail躯护,這嚴(yán)重降低了GUI測(cè)試的可信度,同時(shí)也是GUI層面的自動(dòng)化測(cè)試位于金字塔最頂端的原因之一母市。
在實(shí)際的項(xiàng)目過程中够坐,GUI測(cè)試幾乎不可能做到100%穩(wěn)定,根據(jù)我的經(jīng)驗(yàn)贞奋,如果能夠做到 90% 以上的穩(wěn)定性赌厅,就已經(jīng)非常不錯(cuò)了,這需要整個(gè)產(chǎn)品技術(shù)團(tuán)隊(duì)的共同努力才有希望達(dá)成轿塔。
要提高 GUI 測(cè)試穩(wěn)定性特愿,首先我們需要知道到底是什么原因引起的不穩(wěn)定仲墨。我們必須找出盡可能多的不穩(wěn)定因素,然后找到每一類不穩(wěn)定因素對(duì)應(yīng)的解決方案揍障。
我列舉了幾種常見的造成GUI測(cè)試不穩(wěn)定的因素目养,如下:
1、非預(yù)期的彈框
在用例執(zhí)行過程中毒嫡,操作系統(tǒng)或被測(cè)系統(tǒng)可能會(huì)突然彈出預(yù)期范圍之外的對(duì)話框癌蚁,GUI自動(dòng)化測(cè)試有可能就會(huì)因此而失敗。
解決方案:常用的解決方式兜畸,引入異常場(chǎng)景恢復(fù)模式或者采取無界面GUI自動(dòng)化測(cè)試來處理努释。
2、頁面控件屬性的細(xì)微變化
如果頁面控件的屬性發(fā)生了變化咬摇,哪怕只是細(xì)微的變化伐蒂,也必定會(huì)導(dǎo)致測(cè)試腳本的元素定位失敗。這可以說是GUI自動(dòng)化測(cè)試最大的痛點(diǎn)肛鹏。
目前逸邦,一些商用 GUI 自動(dòng)化測(cè)試工具,比如 UFT(原QTP)在扰,已經(jīng)集成了模糊匹配的功能缕减。通常情況下,只需要啟用“模糊匹配”選項(xiàng)即可芒珠。如果某個(gè)對(duì)象的定位是通過模糊匹配完成的桥狡,那么,測(cè)試報(bào)告中將會(huì)顯示該信息妓局,明確告知此次對(duì)象識(shí)別是基于模糊匹配完成的总放,因?yàn)?GUI 自動(dòng)化工具并不能保證每次模糊匹配都一定正確。
解決方案:元素定位時(shí)采用模糊匹配技術(shù)好爬。
3局雄、隨機(jī)的頁面延遲造成控件識(shí)別失敗
隨機(jī)的頁面延遲,也是 GUI 測(cè)試防不勝防的存炮。既然是隨機(jī)的炬搭,也就是說我們沒有辦法去控制它,解決辦法是加入重試(retry)機(jī)制穆桂。重試機(jī)制是指宫盔,當(dāng)某一步 GUI操作失敗時(shí),框架會(huì)自動(dòng)發(fā)起重試享完。對(duì)于Robot Framework+SeleniumLirary
灼芭,可以使用有wait until系列的關(guān)鍵字(智能等待),盡量少的使用sleep般又。
Wait For Condition
Wait Until Element Contains
Wait Until Element Does Not Contain
Wait Until Element Is Enabled
Wait Until Element Is Not Visible
Wait Until Element Is Visible
Wait Until Page Contains
Wait Until Page Contains Element
Wait Until Page Does Not Contain
Wait Until Page Does Not Contain Element
解決方案:引入重試機(jī)制retry
4彼绷、測(cè)試數(shù)據(jù)問題
測(cè)試數(shù)據(jù)問題巍佑,也是造成 GUI 自動(dòng)化測(cè)試不穩(wěn)定的一個(gè)重要原因。比如寄悯,測(cè)試用例所依賴的數(shù)據(jù)被其他用例修改了萤衰。要解決此類的問題,就要回歸到第一篇中所談到的內(nèi)容猜旬,必須要保證用例之間的獨(dú)立性和盡量減少對(duì)執(zhí)行環(huán)境的依賴脆栋。Robot
框架本身不會(huì)規(guī)定Case執(zhí)行的順序,所以從某種程度上來說同一層級(jí)的Cases是隨機(jī)執(zhí)行的洒擦。很典型的情況就是椿争,測(cè)試用例在本地調(diào)試時(shí)怎么跑怎么過,放到Server上所有Cases一起跑的時(shí)候就會(huì)Fail,還可能是偶發(fā)的秘遏,這種情況下就很可能是由于其他Case的痕跡影響到了它丘薛,查找問題的根源往往比較耗時(shí)。
解決方案:保證用例之間的獨(dú)立性和盡量減少對(duì)執(zhí)行環(huán)境的依賴
5邦危、小結(jié)
界面自動(dòng)化測(cè)試,它最接近用戶真實(shí)場(chǎng)景舍扰,也容易發(fā)現(xiàn)問題倦蚪,但它的實(shí)現(xiàn)成本最高且太容易受外部依賴,容易影響腳本成功率边苹×昵遥總體來說,適當(dāng)?shù)慕缑孀詣?dòng)化測(cè)試是有必要的个束,但是也大可不必在UI層投入太多精力慕购。