提高GUI測(cè)試穩(wěn)定性的關(guān)鍵技術(shù)

GUI 自動(dòng)化測(cè)試穩(wěn)定性,最典型的表現(xiàn)形式就是挂谍,同樣的測(cè)試用例在同樣的環(huán)境上叔壤,時(shí)而測(cè)試通過(guò),時(shí)而測(cè)試失敗口叙。

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

一炼绘、非預(yù)計(jì)的彈出對(duì)話(huà)框

1.1、GUI 自動(dòng)化測(cè)試用例執(zhí)行過(guò)程中妄田,操作系統(tǒng)彈出的非預(yù)計(jì)對(duì)話(huà)框
比如俺亮,GUI 測(cè)試運(yùn)行到一半仗哨,操作系統(tǒng)突然彈出殺毒軟件更新請(qǐng)求、病毒告警信息铅辞、系統(tǒng)更新請(qǐng)求等對(duì)話(huà)框厌漂。這種對(duì)話(huà)框的彈出往往是難以預(yù)計(jì)的,但是一旦發(fā)生就有可能造成 GUI 自動(dòng)化測(cè)試的不穩(wěn)定斟珊。

1.2苇倡、被測(cè)軟件本身也有可能在非預(yù)期的時(shí)間彈出預(yù)期的對(duì)話(huà)框
比如,被測(cè)軟件是一個(gè)電子商務(wù)網(wǎng)站囤踩,在網(wǎng)站上進(jìn)行操作時(shí)旨椒,很可能會(huì)隨機(jī)彈出“用戶(hù)調(diào)查”對(duì)話(huà)框。雖然這種對(duì)話(huà)框是可知的堵漱,但是具體會(huì)在哪一步彈出卻是不可預(yù)期的综慎。而這,往往會(huì)造成 GUI 自動(dòng)化測(cè)試的不穩(wěn)定勤庐。
解決方案:
1示惊、當(dāng)自動(dòng)化腳本發(fā)現(xiàn)控件無(wú)法正常定位,或者無(wú)法操作時(shí)愉镰,GUI 自動(dòng)化框架自動(dòng)進(jìn)入“異常場(chǎng)景恢復(fù)模式”米罚。
2、在“異常場(chǎng)景恢復(fù)模式”下丈探,GUI 自動(dòng)化框架依次檢查各種可能出現(xiàn)的對(duì)話(huà)框录择,一旦確認(rèn)了對(duì)話(huà)框的類(lèi)型,立即執(zhí)行預(yù)定義的操作(比如碗降,單擊“確定”按鈕隘竭,關(guān)閉這個(gè)對(duì)話(huà)框),接著重試剛才失敗的步驟讼渊。
注:這種方式只能處理已知可能出現(xiàn)的對(duì)話(huà)框动看。
而對(duì)于新類(lèi)型的對(duì)話(huà)框,只能通過(guò)自動(dòng)化的方式嘗試點(diǎn)擊上面的按鈕進(jìn)行處理精偿。每當(dāng)發(fā)現(xiàn)一種潛在會(huì)彈出的對(duì)話(huà)框弧圆,我們就把它的詳細(xì)信息(包括對(duì)象定位信息等)更新到“異常場(chǎng)景恢復(fù)”庫(kù)中赋兵,下次再遇到相同類(lèi)型的對(duì)話(huà)框時(shí)笔咽,系統(tǒng)就可以自動(dòng)關(guān)閉了。

對(duì)于非預(yù)期的彈框也可以通過(guò)檢查置頂窗口是否是預(yù)期軟件窗口霹期,從而確定是否被第三方彈框影響

二叶组、頁(yè)面控件屬性的細(xì)微變化

比如,“登錄”按鈕的 ID 從“Button_Login_001”變成了“Button_Login_888”历造,那么如果 GUI 自動(dòng)化測(cè)試腳本還是按照原來(lái)的“Button_Login_001”來(lái)定位“登錄”按鈕甩十,就會(huì)因?yàn)?ID 值的變化船庇,定位不到它了,自動(dòng)化測(cè)試用例自然就會(huì)失敗侣监。
解決方案:
1鸭轮、通過(guò)控件類(lèi)型(Button)縮小了范圍
2、通過(guò)屬性值中的關(guān)鍵字(Login)進(jìn)一步縮小范圍
3橄霉、根據(jù)屬性值變化前后的相似性窃爷,最終定位到該控件

采用“組合屬性”定位控件會(huì)更精準(zhǔn),而且成功率會(huì)更高姓蜂,如果能在此基礎(chǔ)上加入“模糊匹配”技術(shù)按厘,可以進(jìn)一步提高控件的識(shí)別率。
“模糊匹配”是指钱慢,通過(guò)特定的相似度算法逮京,控件屬性發(fā)生細(xì)微變化時(shí),這個(gè)控件依舊可以被準(zhǔn)確定位束莫。

但是懒棉,開(kāi)源的 GUI 自動(dòng)化測(cè)試框架,目前還沒(méi)有現(xiàn)成的框架直接支持模糊匹配览绿,通常需要你進(jìn)行二次開(kāi)發(fā)漓藕,實(shí)現(xiàn)思路是:實(shí)現(xiàn)自己的對(duì)象識(shí)別控制層,也就是在原本的對(duì)象識(shí)別基礎(chǔ)上額外封裝一層挟裂,在這個(gè)額外封裝的層中加上模糊匹配的實(shí)現(xiàn)邏輯享钞。

如果是 selenium 的話(huà),建議優(yōu)先使用 xpath诀蓉,這樣就算 id栗竖、clases、name 等控件屬性改變渠啤,只要不是頁(yè)面改版狐肢,應(yīng)該不會(huì)影響自動(dòng)化穩(wěn)定性。

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

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

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

解決思路:在測(cè)試腳本內(nèi)部對(duì)不同的被測(cè)版本做分支處理贵试,腳本需要能夠區(qū)分 A 和 B 兩個(gè)的不同版本琉兜,并做出相應(yīng)的處理凯正。

四、隨機(jī)頁(yè)面延遲造成控件識(shí)別失敗

加入重試(retry)機(jī)制豌蟋,當(dāng)某一步 GUI 操作失敗時(shí)廊散,框架會(huì)自動(dòng)發(fā)起重試,重試可以是步驟級(jí)別的梧疲,也可以是頁(yè)面級(jí)別的奸汇,甚至是業(yè)務(wù)流程級(jí)別的。

對(duì)于開(kāi)源 GUI 測(cè)試框架往声,重試機(jī)制往往不是自帶的功能擂找,需要自己二次開(kāi)發(fā)來(lái)實(shí)現(xiàn)。

注:對(duì)于那些會(huì)修改一次性使用數(shù)據(jù)的場(chǎng)景浩销,切忌不要盲目啟用頁(yè)面級(jí)別和業(yè)務(wù)流程級(jí)別的重試贯涎。

重試機(jī)制確實(shí)是個(gè)好辦法,但是如果用例都是因?yàn)橹卦嚥艌?zhí)行正確慢洋,有可能會(huì)漏出和緩存相關(guān)的問(wèn)題塘雳,因?yàn)橹卦噾?yīng)該算一個(gè)獨(dú)立測(cè)試場(chǎng)景了,現(xiàn)在是把它作為主要測(cè)試場(chǎng)景了普筹。

五败明、測(cè)試數(shù)據(jù)問(wèn)題

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

構(gòu)造自動(dòng)化數(shù)據(jù)時(shí)要特別注意讳嘱,構(gòu)造一些帶特殊字段的數(shù)據(jù)庫(kù)信息,最好是超出常人操作的數(shù)據(jù)信息酿愧,這樣可以有效避免數(shù)據(jù)被誤修改的風(fēng)險(xiǎn)沥潭,當(dāng)然,還有一個(gè)處理辦法就是先檢查測(cè)試數(shù)據(jù)是否存在/異常嬉挡,不存在或異常都進(jìn)行重建即可钝鸽,這部分也算是測(cè)試代碼的兼容處理吧。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末庞钢,一起剝皮案震驚了整個(gè)濱河市拔恰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌焊夸,老刑警劉巖仁连,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異阱穗,居然都是意外死亡饭冬,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)揪阶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)昌抠,“玉大人,你說(shuō)我怎么就攤上這事鲁僚〈渡唬” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵冰沙,是天一觀的道長(zhǎng)侨艾。 經(jīng)常有香客問(wèn)我,道長(zhǎng)拓挥,這世上最難降的妖魔是什么唠梨? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮侥啤,結(jié)果婚禮上当叭,老公的妹妹穿的比我還像新娘。我一直安慰自己盖灸,他們只是感情好蚁鳖,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著赁炎,像睡著了一般醉箕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上徙垫,一...
    開(kāi)封第一講書(shū)人閱讀 51,598評(píng)論 1 305
  • 那天琅攘,我揣著相機(jī)與錄音,去河邊找鬼松邪。 笑死坞琴,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的逗抑。 我是一名探鬼主播剧辐,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼邮府!你這毒婦竟也來(lái)了荧关?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤褂傀,失蹤者是張志新(化名)和其女友劉穎忍啤,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡同波,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年鳄梅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片未檩。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡戴尸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出冤狡,到底是詐尸還是另有隱情孙蒙,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布悲雳,位于F島的核電站挎峦,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏合瓢。R本人自食惡果不足惜坦胶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望歪玲。 院中可真熱鬧迁央,春花似錦、人聲如沸滥崩。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)钙皮。三九已至蜂科,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間短条,已是汗流浹背导匣。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留茸时,地道東北人贡定。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像可都,于是被迫代替她去往敵國(guó)和親缓待。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容