關(guān)聯(lián)上文:自動(dòng)化測(cè)試總結(jié)(一)
其他參考文檔見(jiàn)文末
GUI測(cè)試的穩(wěn)定性問(wèn)題
關(guān)于這個(gè)問(wèn)題,最典型的情景就是:同樣的測(cè)試用例问麸,在同樣的測(cè)試執(zhí)行環(huán)境下往衷,測(cè)試的結(jié)果有時(shí)是Success,有時(shí)是Fail严卖,這嚴(yán)重降低了GUI測(cè)試的可信性席舍,同時(shí)也是GUI層面的自動(dòng)化測(cè)試位于金字塔最頂端的原因之一。
在實(shí)際的項(xiàng)目過(guò)程中哮笆,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)的解決方案鲁冯。我列舉了幾種常見(jiàn)的造成GUI測(cè)試不穩(wěn)定的因素拷沸,如下:
- 非預(yù)計(jì)的彈出彈出對(duì)話框
在用例執(zhí)行過(guò)程中,操作系統(tǒng)或被測(cè)系統(tǒng)可能會(huì)突然彈出預(yù)期范圍之外的對(duì)話框薯演,GUI自動(dòng)化測(cè)試有可能就會(huì)因此而失敗撞芍。
解決方案:異常場(chǎng)景恢復(fù)模式?無(wú)界面GUI自動(dòng)化測(cè)試跨扮?
- 頁(yè)面控件屬性的細(xì)微變化
如果頁(yè)面控件的屬性發(fā)生了變化序无,哪怕只是細(xì)微的變化,也必定會(huì)導(dǎo)致測(cè)試腳本的元素定位失敗衡创。這可以說(shuō)是GUI自動(dòng)化測(cè)試最大的痛點(diǎn)帝嗡。
目前,一些商用 GUI 自動(dòng)化測(cè)試工具璃氢,比如 UFT(原QTP)哟玷,已經(jīng)集成了模糊匹配的功能。通常情況下一也,只需要啟用“模糊匹配”選項(xiàng)即可巢寡。如果某個(gè)對(duì)象的定位是通過(guò)模糊匹配完成的,那么椰苟,測(cè)試報(bào)告中將會(huì)顯示該信息抑月,明確告知此次對(duì)象識(shí)別是基于模糊匹配完成的,因?yàn)?GUI 自動(dòng)化工具并不能保證每次模糊匹配都一定正確舆蝴。
解決方案:元素定位采用模糊匹配技術(shù)谦絮?
- 隨機(jī)的頁(yè)面延遲造成控件識(shí)別失敗
隨機(jī)的頁(yè)面延遲题诵,也是 GUI 測(cè)試防不勝防的。既然是隨機(jī)的层皱,也就是說(shuō)我們沒(méi)有辦法去控制它性锭,解決辦法是加入重試(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
- 測(cè)試數(shù)據(jù)問(wèn)題
測(cè)試數(shù)據(jù)問(wèn)題钉赁,也是造成 GUI 自動(dòng)化測(cè)試不穩(wěn)定的一個(gè)重要原因。比如携茂,測(cè)試用例所依賴的數(shù)據(jù)被其他用例修改了你踩。要解決此類的問(wèn)題,就要回歸到第一篇中所談到的內(nèi)容讳苦,必須要保證用例之間的獨(dú)立性和盡量減少對(duì)執(zhí)行環(huán)境的依賴带膜。Robot框架本身不會(huì)規(guī)定Case執(zhí)行的順序,所以從某種程度上來(lái)說(shuō)同一層級(jí)的Cases是隨機(jī)執(zhí)行的鸳谜。很典型的情況就是膝藕,測(cè)試用例在本地調(diào)試時(shí)怎么跑怎么過(guò),放到Server上所有Cases一起跑的時(shí)候就會(huì)Fail,還可能是偶發(fā)的咐扭,這種情況下就很可能是由于其他Case的痕跡影響到了它芭挽,查找問(wèn)題的根源往往比較耗時(shí)。
解決方案:保證用例之間的獨(dú)立性和盡量減少對(duì)執(zhí)行環(huán)境的依賴
界面自動(dòng)化測(cè)試蝗肪,它最接近用戶真實(shí)場(chǎng)景袜爪,也容易發(fā)現(xiàn)問(wèn)題,但它的實(shí)現(xiàn)成本最高且太容易受外部依賴薛闪,容易影響腳本成功率辛馆。總體來(lái)說(shuō)豁延,適當(dāng)?shù)慕缑孀詣?dòng)化測(cè)試是有必要的昙篙,但是真的沒(méi)有必要在UI層投入太多精力。
【To be continued...】
參考文檔
- 《軟件測(cè)試52講》术浪,極客時(shí)間 2018-08-06 茹炳晟