自動化測試未來趨勢系列:
- 自愈(Self-Healing)技術(shù)
1. 自愈技術(shù)
自愈(Self-Healing)技術(shù)在計算機(jī)術(shù)語中是指:一種自我修復(fù)的管理機(jī)制。
類比生命體,當(dāng)生命體遭受到一些小的傷害時拟枚,它們的身體往往能夠通過自身的修復(fù)機(jī)制來實(shí)現(xiàn)自愈,而不需要外界加以干預(yù)胰挑。如壁虎的斷尾再生隅肥,或者蟹類的軀體再生能力那樣。
回到計算機(jī)領(lǐng)域训裆,自愈技術(shù)也在廣泛的使用眶根,比如芯片的信息通道自愈,軟件系統(tǒng)的故障自愈等边琉。那么我們這里要介紹的是在自動化測試方向上的一種自愈技術(shù):
可以發(fā)現(xiàn)其測試腳本執(zhí)行中的非預(yù)期錯誤并在無需人工干預(yù)的情況下自行更改属百,從而將自身恢復(fù)到更好的運(yùn)行狀態(tài)。
2. 技術(shù)原理
問題域:在自動化測試中使用自愈技術(shù)主要解決的是對象識別問題变姨。
傳統(tǒng)的自動化測試框架和工具使用應(yīng)用程序模型來定義應(yīng)用程序的組件和對象及其屬性族扰。然后使用這些定義來識別和操作應(yīng)用程序組件。但是應(yīng)用程序在更新時會經(jīng)常更改定欧∮婧牵可能是有意的開發(fā)人員變更或者是即時(由應(yīng)用程序系統(tǒng)或構(gòu)建過程)發(fā)生的。這些變化破壞了我們基于靜態(tài)定義的傳統(tǒng)自動化方式砍鸠。
自然語言處理(NLP)和機(jī)器學(xué)習(xí) (ML) 等智能技術(shù)已經(jīng)發(fā)展到測試腳本現(xiàn)在可以“學(xué)習(xí)”和“適應(yīng)”的地步扩氢。自愈測試自動化工具使用 AI 和機(jī)器學(xué)習(xí)技術(shù),根據(jù)用戶界面 (UI) 或應(yīng)用程序環(huán)境的變化可以自動更新和調(diào)整測試過程睦番。
在運(yùn)行測試時类茂,他們會掃描應(yīng)用程序的用戶界面以查看是否存在任何對象。然后他們將它們與之前為自動化測試生成的應(yīng)用程序模型進(jìn)行比較托嚣。如果應(yīng)用程序有任何更改巩检,則有一種技術(shù)可以讓測試適應(yīng)并自動更新。這種能力被稱為“自我修復(fù)”示启。屬性更改是自動感知的兢哭,內(nèi)部腳本在運(yùn)行時通過自我修復(fù)進(jìn)行自我修復(fù)。
自愈功能具有以下特點(diǎn):
- 在執(zhí)行過程中夫嗓,如果某個測試步驟定位器無法被其默認(rèn)定位器值檢測到迟螺,則列表中的其他定位器策略將自動應(yīng)用,無需測試人員的任何手動干預(yù)舍咖。執(zhí)行將繼續(xù)矩父,就好像沒有發(fā)生任何故障一樣。
- 在執(zhí)行過程中排霉,如果測試步驟定位器失敗并且無法使用任何其他定位器策略自動檢測到窍株,測試將暫停執(zhí)行,允許用戶選擇相關(guān)元素并繼續(xù)執(zhí)行。新的定位器策略將在下次執(zhí)行時自動更新球订。
下圖介紹了自愈技術(shù)的主要步驟:
自動化測試自愈技術(shù)的優(yōu)勢主要有:
-
減少測試失敗率
測試執(zhí)行失敗很正常后裸,但是有時候失敗的根本原因僅僅是由于用戶界面發(fā)生了變化而測試腳本沒有同步變化。使用自愈技術(shù)后冒滩,由于無法正確識別的對象位置而影響腳本執(zhí)行失敗的情況就不太可能發(fā)生微驶。而傳統(tǒng)的自動化框架無法識別這些變化并自動更新。
-
防止測試不穩(wěn)定
如果我們測試過程中有flaky tests存在的話开睡,我們很難確定我們的測試是否是穩(wěn)定的因苹。”Nosuchelementexception“ 錯誤是導(dǎo)致測試設(shè)計不穩(wěn)定的幾個錯誤之一士八,測試團(tuán)隊(duì)很難完全控制這樣的現(xiàn)象發(fā)生容燕。當(dāng)我們的測試設(shè)計和應(yīng)用程序保持一致時,測試在執(zhí)行期間失敗的可能性較小婚度,并且執(zhí)行流程也更加流暢蘸秘。
-
提高腳本維護(hù)性
測試代碼中的更改與開發(fā)人員在應(yīng)用程序中所做的更改成正比。由于根本原因可能會發(fā)生變化并且不能反映 AUT 的真實(shí)狀態(tài)和性能蝗茁,因此失敗的測試結(jié)果會限制測試人員獲得有關(guān)其測試的有意義的見解醋虏。通過識別和更新用戶界面中的任何更改的測試用例,自愈技術(shù)節(jié)省了敏捷測試和開發(fā)團(tuán)隊(duì)的時間和精力哮翘。除了時間和精力之外颈嚼,測試自動化中的自我修復(fù)也顯著降低了測試維護(hù)成本。
3. 業(yè)內(nèi)實(shí)踐
我們可以看到饭寺,業(yè)內(nèi)已經(jīng)有一些比較好的實(shí)踐了阻课,比如Healenium項(xiàng)目。
以Healenium項(xiàng)目為例艰匙,看看自動化測試自愈技術(shù)是怎么工作的:
假設(shè)我們通過id 的方式來定位我們應(yīng)用程序界面上的一個按鈕限煞,定位器應(yīng)該是:#button
從上圖可以看到,元素可以被正確定位到员凝。Healnium會將正確的定位器保存下來署驻,作為下一次測試執(zhí)行的基準(zhǔn)值。
現(xiàn)在健霹,我們假設(shè)開發(fā)人員變更了應(yīng)用程序的UI界面旺上,改變了這個按鈕的id屬性,從#button變更為 #green_button糖埋。但是由于某種原因宣吱,測試團(tuán)隊(duì)沒有被通知到有這個變更,所以測試腳本也沒有更新瞳别。那么當(dāng)我們再次執(zhí)行腳本的時候凌节,在嘗試使用#button的舊定位器去定位按鈕的時候钦听,腳本就會報錯洒试,提示 “NoSuchElement”的錯誤異常倍奢。
在這種情況下,使用標(biāo)準(zhǔn)的 Selenium 實(shí)現(xiàn)測試將失敗垒棋,但使用 Healenium 則不會卒煞。 Healenium 捕獲 NoSuchElement 異常,觸發(fā)機(jī)器學(xué)習(xí)算法叼架,傳遞當(dāng)前頁面狀態(tài)畔裕,獲取之前成功的定位器路徑,比較它們乖订,并生成修復(fù)的定位器列表扮饶。它采用得分最高的定位器并使用該定位器執(zhí)行操作。正如我們看到的元素被成功找到并通過了測試乍构。
測試運(yùn)行后甜无,Healenium 生成報告,其中包含有關(guān)修復(fù)定位器哥遮、屏幕截圖和修復(fù)成功反饋按鈕的所有詳細(xì)信息岂丘。
如果修復(fù)成功,我們可以使用 Healenium Idea 插件更新我們的自動化測試代碼:插件使用修復(fù)定位器尋找修復(fù)和更新測試代碼眠饮。
Healenium 使用一種機(jī)器學(xué)習(xí)算法來分析當(dāng)前網(wǎng)頁的變化:基于權(quán)重的最長公共子序列算法
更多關(guān)于這個項(xiàng)目的詳情奥帘,可以訪問這個項(xiàng)目官網(wǎng):https://healenium.io/
通過這個案例,我們來對比一下傳統(tǒng)自動化測試方式和基于自愈技術(shù)的自動化測試方式中對象維護(hù)的差異(如下圖所示):
4. 小結(jié)
以上給大家簡單介紹了自動化測試自愈技術(shù)的背景和實(shí)踐仪召。自動化測試未來的發(fā)展趨勢必然是越來越智能化寨蹋,因此也會有更多的智能技術(shù)應(yīng)用到自動化測試領(lǐng)域,從而提升自動化測試的效率扔茅。
下篇我們會給大家介紹: 自動化測試未來趨勢:(二) AI 機(jī)器學(xué)習(xí)技術(shù)