一复濒,什么是自動化測試脖卖?
顧名思義,自動化測試是巧颈,把人對軟件的測試行為轉(zhuǎn)化為由機(jī)器執(zhí)行測試行為的一種實踐畦木,對于最常見的 GUI 自動化測試來講,就是由自動化測試工具模擬之前需要人工在軟件界面上的各種操作洛二,并且自動驗證其結(jié)果是否符合預(yù)期馋劈。
自動化測試的本質(zhì)是先寫一段代碼,然后去測試另一段代碼晾嘶,所以實現(xiàn)自動化測試用例本身屬于開發(fā)工作,需要投入大量的時間和精力娶吞,并且已經(jīng)開發(fā)完成的用例還必須隨著被測對象的改變而不斷更新垒迂,你還需要為此付出維護(hù)測試用例的成本。
當(dāng)你發(fā)現(xiàn)自動化測試用例的維護(hù)成本高于其節(jié)省的測試成本時妒蛇,自動化測試就失去了價值與意義机断,你也就需要在是否使用自動化測試上權(quán)衡取舍了。
二绣夺,為什么需要自動化測試吏奸?
為了讓你更好地理解自動化測試的價值,即為什么需要自動化測試陶耍,我先來跟你聊聊自動化測試通常有哪些優(yōu)勢:
自動化測試可以替代大量的手工機(jī)械重復(fù)性操作奋蔚,測試工程師可以把更多的時間花在更全面的用例設(shè)計和新功能的測試上;
自動化測試可以大幅提升回歸測試的效率,非常適合敏捷開發(fā)過程泊碑;
自動化測試可以更好地利用無人值守時間坤按,去更頻繁地執(zhí)行測試,特別適合現(xiàn)在非工作時間執(zhí)行測試馒过,工作時間分析失敗用例的工作模式臭脓;
自動化測試可以高效實現(xiàn)某些手工測試無法完成或者代價巨大的測試類型,比如關(guān)鍵業(yè)務(wù) 7×24 小時持續(xù)運行的系統(tǒng)穩(wěn)定性測試和高并發(fā)場景的壓力測試等腹忽;
自動化測試還可以保證每次測試執(zhí)行的操作以及驗證的一致性和可重復(fù)性来累,避免人為的遺漏或疏忽。
而為了避免對自動化測試的過度依賴窘奏,你還需要了解自動化測試有哪些劣勢嘹锁,這將幫你繞過實際工作中的“坑”。
自動化測試并不能取代手工測試蔼夜,它只能替代手工測試中執(zhí)行頻率高兼耀、機(jī)械化的重復(fù)步驟。你千萬不要奢望所有的測試都自動化求冷,否則一定會得不償失瘤运。
自動測試遠(yuǎn)比手動測試脆弱,無法應(yīng)對被測系統(tǒng)的變化匠题,業(yè)界一直有句玩笑話“開發(fā)手一抖拯坟,自動化測試忙一宿”,這也從側(cè)面反映了自動化測試用例的維護(hù)成本一直居高不下的事實韭山。
其根本原因在于自動化測試本身不具有任何“智能”郁季,只是按部就班地執(zhí)行事先定義好的測試步驟并驗證測試結(jié)果。對于執(zhí)行過程中出現(xiàn)的明顯錯誤和意外事件钱磅,自動化測試沒有任何處理能力梦裂。自動化測試用例的開發(fā)工作量遠(yuǎn)大于單次的手工測試,所以只有當(dāng)開發(fā)完成的測試用例的有效執(zhí)行次數(shù)大于等于 5 次時盖淡,才能收回自動化測試的成本年柠。
手工測試發(fā)現(xiàn)的缺陷數(shù)量通常比自動化測試要更多,并且自動化測試僅僅能發(fā)現(xiàn)回歸測試范圍的缺陷褪迟。
測試的效率很大程度上依賴自動化測試用例的設(shè)計以及實現(xiàn)質(zhì)量冗恨,不穩(wěn)定的自動化測試用例實現(xiàn)比沒有自動化更糟糕。
實行自動化測試的初期掀抹,用例開發(fā)效率通常都很低,大量初期開發(fā)的用例通常會在整個自動化測試體系成熟心俗,和測試工程師全面掌握測試工具后傲武,需要重構(gòu)谱轨。
業(yè)務(wù)測試專家和自動化測試專家通常是兩批人诗茎,前者懂業(yè)務(wù)不懂自動化技術(shù)敢订,后者懂自動化技術(shù)但不懂業(yè)務(wù)楚午,只有二者緊密合作丧荐,才能高效開展自動化測試缆瓣。
自動化測試開發(fā)人員必須具備一定的編程能力,這對傳統(tǒng)的手工測試工程師會是一個挑戰(zhàn)虹统。
三弓坞,什么樣的項目適合自動化測試?
看到這里车荔,你心里可能在暗自嘀咕渡冻,“有沒有搞錯啊,自動化測試的劣勢居然比優(yōu)勢還多”忧便。那為什么還有那么多的企業(yè)級項目在實行自動化測試呢菩帝?那么,我接下來要講的內(nèi)容就是茬腿,到底什么樣的項目適合自動化測試?
第一宜雀,需求穩(wěn)定切平,不會頻繁變更。
自動化測試最怕的就是需求不穩(wěn)定辐董,過高的需求變更頻率會導(dǎo)致自動化測試用例的維護(hù)成本直線上升悴品。剛剛開發(fā)完成并調(diào)試通過的用例可能因為界面變化,或者是業(yè)務(wù)流程變化,不得不重新開發(fā)調(diào)試苔严。所以自動化測試更適用于需求相對穩(wěn)定的軟件項目定枷。
第二,研發(fā)和維護(hù)周期長届氢,需要頻繁執(zhí)行回歸測試欠窒。
在我看來,軟件產(chǎn)品比軟件項目更適合做自動化測試退子。
首先岖妄,軟件產(chǎn)品的生命周期一般都比較長,通常會有多個版本陸續(xù)發(fā)布寂祥,每次版本發(fā)布都會有大量的回歸測試需求荐虐。
同時,軟件產(chǎn)品預(yù)留給自動化測試開發(fā)的時間也比較充裕丸凭,可以和產(chǎn)品一起迭代福扬。
其次,自動化測試用例的執(zhí)行比高于 1:5惜犀,即開發(fā)完成的用例至少可以被有效執(zhí)行 5 次以上時铛碑,自動化測試的優(yōu)勢才可以被更好地體現(xiàn)。對于軟件項目的自動化測試向拆,就要看項目的具體情況了亚茬。
如果短期的一次性項目,就算從技術(shù)上講自動化測試的可行性很高浓恳,但從投入產(chǎn)出比(ROI)的角度看并不建議實施自動化刹缝,因為千辛萬苦開發(fā)完成的自動化用例可能執(zhí)行一兩次,項目就結(jié)束了颈将。我還遇到過更夸張的情況梢夯,自動化測試用例還沒開發(fā)完,項目都已經(jīng)要上線了晴圾。
所以颂砸,對于這種短期的一次性項目,我覺得你應(yīng)該選擇手工探索式測試死姚,以發(fā)現(xiàn)缺陷為第一要務(wù)人乓。而對于一些中長期項目,我的建議是:對比較穩(wěn)定的軟件功能進(jìn)行自動化測試都毒,對變動較大或者需求暫時不明確的功能進(jìn)行手工測試色罚,最終目標(biāo)是用 20% 的精力去覆蓋 80% 的回歸測試。
第三账劲,需要在多種平臺上重復(fù)運行相同測試的場景戳护。
這樣的場景其實有很多金抡,比如:
- 對于 GUI 測試,同樣的測試用例需要在多種不同的瀏覽器上執(zhí)行腌且;
- 對于移動端應(yīng)用測試梗肝,同樣的測試用例需要在多個不同的 Android 或者 iOS 版本上執(zhí)行,或者是同樣的測試需要在大量不同的移動終端上執(zhí)行铺董;
- 對于一些企業(yè)級軟件巫击,如果對于不同的客戶有不同的定制版本,各個定制版本的主體功能絕大多數(shù)是一致的柄粹,可能只有個別功能有輕微差別喘鸟,測試也是需要覆蓋每個定制版本的所有測試;
- ……
這些都是自動化測試的最佳應(yīng)用場景驻右,因為單個測試用例都需要被反復(fù)執(zhí)行多次什黑,能夠使自動化測試的投資回報率最大化。
第四堪夭,某些測試項目通過手工測試無法實現(xiàn)愕把,或者手工成本太高。
對于所有的性能和壓力測試森爽,很難通過手工方式實現(xiàn)恨豁。
比如,某一個項目要求進(jìn)行一萬并發(fā)用戶的基準(zhǔn)性能測試(Benchmark test)爬迟,難道你真的要找一萬個用戶按照你的口令來操作被測軟件嗎橘蜜?又比如,對于 7×24 小時的穩(wěn)定性測試付呕,難道你也要找一批用戶沒日沒夜地操作被測軟件嗎计福?
這個時候,你就必須借助自動化測試技術(shù)了徽职,用機(jī)器來模擬大量用戶反復(fù)操作被測軟件的場景象颖。當(dāng)然對于此類測試是不可能通過 GUI 操作來模擬大量用戶行為的,你必須基于協(xié)議的自動化測試技術(shù)姆钉,這個我會在后續(xù)的性能測試章節(jié)詳細(xì)敘述说订。
第五,被測軟件的開發(fā)較為規(guī)范潮瓶,能夠保證系統(tǒng)的可測試性陶冷。
從技術(shù)上講,如果要實現(xiàn)穩(wěn)定的自動化測試毯辅,被測軟件的開發(fā)過程就必須規(guī)范埃叭。比如,GUI 上的控件命名如果沒有任何規(guī)則可尋悉罕,就會造成 GUI 自動化的控件識別與定位不穩(wěn)定赤屋,從而影響自動化測試的效率畴栖。
另外味榛,某些用例的自動化必須要求開發(fā)人員在產(chǎn)品中預(yù)留可測試性接口,否則后續(xù)的自動化會很難開展篓像。
比如嗜逻,有些用戶登錄操作涩僻,需要圖片驗證碼,如果開發(fā)人員沒有提供繞開圖片驗證碼的路徑栈顷,那么自動化測試就必須借助光學(xué)字符識別(OCR)技術(shù)來對圖片驗證碼進(jìn)行模式識別逆日,而它的設(shè)計初衷是為了防止機(jī)器人操作,可想而知 OCR 的識別率會很低萄凤,就會直接影響用例的穩(wěn)定性室抽。
第六,測試人員已經(jīng)具備一定的編程能力靡努。
如果測試團(tuán)隊的成員沒有任何開發(fā)編程的基礎(chǔ)坪圾,那你想要推行自動化測試就會有比較大的阻力。這個阻力會來自于兩個方面:
- 前期的學(xué)習(xí)成本通常會比較大惑朦,很難在短期內(nèi)對實際項目產(chǎn)生實質(zhì)性的幫助兽泄,此時如果管理層對自動化測試沒有正確的預(yù)期,很可能會叫停自動化測試漾月;
- 測試工程師通常會非常熱衷于學(xué)習(xí)使用自動化測試技術(shù)病梢,以至于他們的工作重點會發(fā)生錯誤的偏移,把大量的精力放在自動化測試技術(shù)的學(xué)習(xí)與實踐上梁肿,而忽略了測試用例的設(shè)計蜓陌,這將直接降低軟件整體的質(zhì)量。
總結(jié)
自動化測試是栈雳,把人工對軟件的測試轉(zhuǎn)化為由機(jī)器執(zhí)行測試行為的一種實踐护奈,可以把測試工程師從機(jī)械重復(fù)的測試工作中解脫出來,將更多的精力放在新功能的測試和更全面的測試用例設(shè)計上哥纫。
然而自動化測試試一把“雙刃劍”霉旗,雖然它可以從一定程度上解放測試工程師的勞動力,完成一些人工無法實現(xiàn)的測試蛀骇,但并不適用于所有的測試場景厌秒,如果維護(hù)自動化測試的代價高過了節(jié)省的測試成本,那么在這樣的項目中推進(jìn)自動化測試就會得不償失擅憔。