自動(dòng)化測(cè)試有效性
自動(dòng)化測(cè)試能否幫助我們我們提升開(kāi)發(fā)效率,關(guān)鍵在于其有效性。如果其有效性可能存在問(wèn)題,那么可能是什么導(dǎo)致了這種問(wèn)題的產(chǎn)生呢?對(duì)自動(dòng)化測(cè)試產(chǎn)生作用的方式存在誤解,對(duì)自動(dòng)化測(cè)試能夠產(chǎn)生作用所要求的條件存在誤解,自動(dòng)化測(cè)試分析設(shè)計(jì)的隨意性,自動(dòng)化測(cè)試開(kāi)發(fā)維護(hù)的低標(biāo)準(zhǔn),對(duì)自動(dòng)化測(cè)試資產(chǎn)的低準(zhǔn)出條件……本文將就自動(dòng)化測(cè)試有效性簡(jiǎn)單闡述我自己的一點(diǎn)見(jiàn)解,拋磚引玉。
觀念之一:獨(dú)木難生于漠,密植方育甘霖
沙漠中間栽下一棵樹,枯死只是遲早之事;即便有足夠的資源讓它能夠永久地生存下去,而它除了給路過(guò)的攝影師的構(gòu)圖上增添一分綠色氣息,便再也沒(méi)有其它存在的意義了。如果要想它能夠長(zhǎng)久而有生命力地活下去,并期望它能夠改善生態(tài),那就需要將其根植在一片密林之中。自動(dòng)化測(cè)試,尤其是前端自動(dòng)化測(cè)試,如若離開(kāi)其他層次的自動(dòng)化測(cè)試和技術(shù)手段與之相互配合,便會(huì)如同這棵沙漠中間的樹一樣,不久便滅。
五一節(jié)后的周五下午和兩個(gè)開(kāi)發(fā)經(jīng)理一起review一個(gè)項(xiàng)目的性能測(cè)試需求,休息閑聊時(shí)順道提到了其中一位開(kāi)發(fā)經(jīng)理所負(fù)責(zé)的公網(wǎng)系統(tǒng)CI連續(xù)飄紅的問(wèn)題。他坦言自己對(duì)自動(dòng)化測(cè)試是不信任的,認(rèn)為自動(dòng)化測(cè)試發(fā)現(xiàn)不了任何問(wèn)題,從而對(duì)CI帶來(lái)的幫助表示懷疑,因此不愿意在CI上投入過(guò)多的精力。我理解這位經(jīng)理的感慨,認(rèn)同他對(duì)自動(dòng)化測(cè)試有效性的擔(dān)憂,但是這并不能使我認(rèn)同他對(duì)CI和自動(dòng)化測(cè)試的態(tài)度。而對(duì)于軟件開(kāi)發(fā)來(lái)說(shuō),沒(méi)有自動(dòng)化測(cè)試、沒(méi)有CI,我們可能無(wú)法期待更高效率的開(kāi)發(fā)和更好的質(zhì)量保證。但他這是因?yàn)闆](méi)有耐心地植下一片樹林,才導(dǎo)致他心目中自動(dòng)化測(cè)試這棵大樹的死亡,進(jìn)而卻又否認(rèn)這片樹林存在的意義,是不妥的。
觀念之二:降低期望于心,提升目標(biāo)于行
為什么有很多人對(duì)自動(dòng)化測(cè)試的可信任程度表示懷疑呢?這源于一句看似真理的廢話:自動(dòng)化不是用來(lái)發(fā)現(xiàn)缺陷的,而是為了驗(yàn)證系統(tǒng)改動(dòng)是否造成關(guān)聯(lián)影響并用以增加質(zhì)量信心的。這話本意無(wú)非就是想告訴大家:不要對(duì)自動(dòng)化測(cè)試的結(jié)果抱太高期望,對(duì)機(jī)器智能和人腦的差距要認(rèn)清。這個(gè)本意本無(wú)可厚非,但是這句話現(xiàn)在卻逐漸成了自動(dòng)化測(cè)試低質(zhì)量的借口了。
首先,很多人認(rèn)為自動(dòng)化測(cè)試無(wú)法發(fā)現(xiàn)缺陷是因?yàn)闇y(cè)試腳本無(wú)法代替人類的自主思考,無(wú)法靈活變通。而我們之所以期望在測(cè)試執(zhí)行時(shí)能夠靈活變通,是因?yàn)闇y(cè)試分析設(shè)計(jì)時(shí)對(duì)被測(cè)應(yīng)用設(shè)計(jì)細(xì)節(jié)的不確定性。非探索式的腳本化測(cè)試設(shè)計(jì)就是要通過(guò)輸入精確的操作和數(shù)據(jù)類型,從而得到精確的輸出來(lái)和預(yù)期結(jié)果進(jìn)行對(duì)比,在這種模式下,沒(méi)什么問(wèn)題是需要變通才能被發(fā)現(xiàn)的。
其次,不得不說(shuō)自動(dòng)化測(cè)試分析設(shè)計(jì)的難點(diǎn)在于對(duì)輸入條件分支和狀態(tài)機(jī)組合的窮舉和選擇上,這需要很大的成本。不幸的是,通常在做自動(dòng)化測(cè)試分析設(shè)計(jì)時(shí),我們習(xí)慣于用經(jīng)驗(yàn)和主觀感覺(jué)去做,不全面和主次不分的情況常常出現(xiàn)。因而,自動(dòng)化測(cè)試分析和設(shè)計(jì)的不嚴(yán)謹(jǐn)、不完整也是自動(dòng)化測(cè)試不能被信任的原因之一。
此外,自動(dòng)化在那些已覆蓋的測(cè)試上面表現(xiàn)的也不盡如人意,筆者觀察到,大多數(shù)人并不是用自動(dòng)化測(cè)試腳本去做測(cè)試或質(zhì)量守護(hù)工作,而只是用來(lái)讓他們運(yùn)行通過(guò),以獲得KPI的達(dá)成和成就感。自動(dòng)化測(cè)試運(yùn)行失敗,不習(xí)慣于或不樂(lè)于使用它的同事就會(huì)很輕易忽略潛在的問(wèn)題,所以漏測(cè)和封版延期是常有的事。
最后打個(gè)比方,自動(dòng)化測(cè)試就像是看門的狗,沒(méi)有它,家里進(jìn)賊未必發(fā)現(xiàn)不了,關(guān)鍵是發(fā)現(xiàn)的時(shí)候是否還來(lái)得及挽回?fù)p失,而狗狗能不能在有賊光顧的時(shí)候示警,取決于我們?nèi)绾务Z養(yǎng)它。我們期望家里進(jìn)賊的時(shí)候狗狗能夠示警,但并不會(huì)期望它能夠幫我們直接把小賊擒住;而且并非每次狗狗示警都意味著有賊入室,也有可能是閣下經(jīng)過(guò)而已。自動(dòng)化測(cè)試與此類似,凡其所致,但有一點(diǎn)不一致便會(huì)得到失敗的結(jié)果,而至于是不是發(fā)現(xiàn)了蟲子卻又是另外一碼事,想用自動(dòng)化幫你解決所有問(wèn)題,那你還是洗洗睡吧。
總之,我們對(duì)自動(dòng)化測(cè)試有什么樣的期望,就應(yīng)該有什么樣的目標(biāo)和要求;設(shè)定了什么層次的測(cè)試目標(biāo),就應(yīng)該有什么樣的使用效果。如果告訴你自動(dòng)化測(cè)試可以朝著任意品種的狗狗去培養(yǎng),目標(biāo)就是看家護(hù)院,你非要以哈士奇食量大喂不起為由非要選小泰迪,那能有什么辦法呢?如果自動(dòng)化測(cè)試分析設(shè)計(jì)不嚴(yán)謹(jǐn),而已覆蓋的腳本也沒(méi)有嚴(yán)格編寫,而或腳本嚴(yán)格編寫卻并未善加利用,那么自動(dòng)化測(cè)試自然就是一個(gè)徹底的謊言了。
我們可以期望用自動(dòng)化測(cè)試來(lái)暴露所有的問(wèn)題供使用者抉擇,而非用來(lái)精確定位每一個(gè)問(wèn)題。即便我們不期望自動(dòng)化測(cè)試發(fā)現(xiàn)所有的BUG,但是我們必須要用發(fā)現(xiàn)每一個(gè)BUG的標(biāo)準(zhǔn)去分析設(shè)計(jì)和利用我們的自動(dòng)化測(cè)試用例。
方法之一:善用手動(dòng)測(cè)試用例庫(kù)
如果有完整或近乎完整的手動(dòng)測(cè)試用例庫(kù),在做自動(dòng)化測(cè)試的時(shí)候用它來(lái)甄別自動(dòng)化測(cè)試范圍、做自動(dòng)化測(cè)試需求分析和設(shè)計(jì)是非常棒的,可達(dá)事半功倍之效。因?yàn)槌薙LA簽訂的關(guān)鍵功能清單,我們可以分析測(cè)試用例庫(kù)中最近X個(gè)月、Y個(gè)版本中被執(zhí)行的測(cè)試用例的頻率和比例等等數(shù)字,從而很容易得出最有價(jià)值做自動(dòng)化測(cè)試的范圍,而如有其他因素也可以加入綜合評(píng)估。這時(shí)候,關(guān)聯(lián)或映射手動(dòng)測(cè)試用例和自動(dòng)化測(cè)試腳本可以很容易地衡量自動(dòng)化測(cè)試的覆蓋率等相關(guān)指標(biāo)。
除此之外,手動(dòng)測(cè)試用例之于自動(dòng)化測(cè)試開(kāi)發(fā)的意義還在于一種特定模式下的自動(dòng)化測(cè)試開(kāi)發(fā):測(cè)試人員按照一種特定的規(guī)約編寫產(chǎn)品或項(xiàng)目的手動(dòng)測(cè)試用例,隨后用一種模型化的轉(zhuǎn)換規(guī)則去生成自動(dòng)化測(cè)試腳本,繼而再去修改和優(yōu)化。這種模式的好處是,自動(dòng)化測(cè)試腳本的開(kāi)發(fā)者不需要懂業(yè)務(wù)知識(shí),只需要按照業(yè)務(wù)測(cè)試人員編寫的詳盡的測(cè)試用例去實(shí)施。而不足之處卻也十分明顯,由于思維方式上的差異,編寫測(cè)試腳本過(guò)程中的溝通成本不會(huì)太低,而且對(duì)建模水平要求很高。
方法之二:搭建適應(yīng)性強(qiáng)的框架
開(kāi)源測(cè)試工具,我們組先后用過(guò)Selenium RC、WebDriver、WatiJ這幾種工具模式,框架采用JUnit和TestNG,測(cè)試調(diào)度和CI使用Jenkins管理。做起來(lái)最大的感受就是,像WebDriver這種工具,它本質(zhì)上是為互聯(lián)網(wǎng)而生;如果要用于我們的企業(yè)ERP應(yīng)用的自動(dòng)化測(cè)試,如果沒(méi)有做一系列適應(yīng)性的API和組件封裝,測(cè)試腳本開(kāi)發(fā)對(duì)于大部分同事來(lái)說(shuō)都是件頭疼的事情。
經(jīng)過(guò)摸索,我們結(jié)合PAFA(PingAn Foundation Architecture)架構(gòu)的前端頁(yè)面特征做了對(duì)象識(shí)別、頁(yè)面加載和處理緩沖、運(yùn)行監(jiān)聽(tīng)、數(shù)據(jù)處理、斷言和運(yùn)行容錯(cuò)、報(bào)告、日志以及第三方組件(如Autoit、Cmd等)兼容的封裝操作。這種封裝屬于Bot-Style,適用于我們基于業(yè)務(wù)操作驅(qū)動(dòng)的自動(dòng)化測(cè)試用例編寫,能夠大大地降低我們測(cè)試腳本開(kāi)發(fā)的技術(shù)成本。雖然它們看起來(lái)運(yùn)行起來(lái)效率并不是十分高,但是對(duì)于被測(cè)應(yīng)用的響應(yīng)速度來(lái)說(shuō)已經(jīng)是數(shù)十倍的效率勝出了。至于使用Page Object還是Bot-Style,還請(qǐng)大師們不要吐我的槽,這沒(méi)什么可爭(zhēng)論的,因?yàn)檫@只是面向前端業(yè)務(wù)操作的頁(yè)面測(cè)試,二者的表現(xiàn)毫無(wú)優(yōu)劣之分,完全在于隊(duì)員的測(cè)試腳本編寫風(fēng)格偏好。
附圖1:測(cè)試中的TestCase樣例
附圖2:測(cè)試中的TestApi樣例
我們正在從瀑布開(kāi)發(fā)模式下逐漸開(kāi)展持續(xù)集成和敏捷轉(zhuǎn)型,不難預(yù)見(jiàn),達(dá)到一定成熟度之后我們大部分團(tuán)隊(duì)會(huì)使用ATDD或BDD模式。這種快速開(kāi)發(fā)的基于前端的自動(dòng)化驗(yàn)證測(cè)試雖然在驗(yàn)證測(cè)試中所占的比例會(huì)越來(lái)越小,但它們將依然有用武之地,同時(shí)對(duì)當(dāng)下的系統(tǒng)前端的回歸測(cè)試也可以完全支持。
自動(dòng)化測(cè)試框架強(qiáng)大與否主要在于其適應(yīng)性,所以與其說(shuō)自動(dòng)化測(cè)試框架是選擇出來(lái)的,不如說(shuō)它是被改造出來(lái)的。產(chǎn)品比較單一的小公司或者開(kāi)發(fā)框架比較成熟的公司用一個(gè)工具、一個(gè)框架在一個(gè)測(cè)試平臺(tái)下就可以解決一個(gè)公司的自動(dòng)化測(cè)試實(shí)施的絕大多數(shù)問(wèn)題,而大型企業(yè)的應(yīng)用繁多復(fù)雜,很難由一個(gè)簡(jiǎn)單工具或者框架來(lái)解決。
自動(dòng)化測(cè)試框架,沒(méi)有自己DIY過(guò)的永遠(yuǎn)都不要相信不造輪子這種說(shuō)法,因?yàn)橹挥性谀阕龅臅r(shí)候,你才能夠更深入地理解你的工具、框架和你的被測(cè)應(yīng)用及其所依賴的開(kāi)發(fā)框架的特征,才會(huì)產(chǎn)出更具適應(yīng)性的測(cè)試框架和特征庫(kù)。
方法之三:善用設(shè)計(jì)與重構(gòu)
無(wú)論是前端自動(dòng)化測(cè)試還是單元測(cè)試,腳本代碼結(jié)構(gòu)的重要性是個(gè)老生長(zhǎng)談,因?yàn)檫@關(guān)乎測(cè)試腳本代碼的可讀性、維護(hù)經(jīng)濟(jì)性等問(wèn)題。由于我們的業(yè)務(wù)系統(tǒng)的測(cè)試案例主要是基于操作流程的業(yè)務(wù)場(chǎng)景,所以我簡(jiǎn)單說(shuō)一下我們?cè)谶@方面的做法與經(jīng)驗(yàn),而單個(gè)功能點(diǎn)特性的測(cè)試分析也基本與此類同,不再獨(dú)占篇幅。
測(cè)試范圍與設(shè)計(jì)
大型企業(yè),尤其是金融行業(yè)的ERP應(yīng)用,很多系統(tǒng)實(shí)際上都是規(guī)則零散、流程復(fù)雜,規(guī)則引擎應(yīng)用得并不是很充分。這便是前文所提及的自動(dòng)化測(cè)試分析設(shè)計(jì)時(shí)對(duì)輸入條件分支和狀態(tài)機(jī)組合的窮舉和選擇困難的問(wèn)題的產(chǎn)生原因了。對(duì)于這種情況,我們可以借鑒兩個(gè)基礎(chǔ)的測(cè)試設(shè)計(jì)方法:正交覆蓋和Pairwise/All-Pairs,其基本原理和用法這里不再贅述。
以正交覆蓋為例,我們需要把影響流程分支走向的因子羅列出來(lái)。一般理論認(rèn)為,缺陷的產(chǎn)生絕大多數(shù)是因?yàn)?個(gè)因素組合產(chǎn)生的,所以我們先做一個(gè)正交強(qiáng)度為2的配對(duì)來(lái)確認(rèn)最小的測(cè)試組合范圍。然后將正交強(qiáng)度變?yōu)樽畲螅玫揭粋€(gè)最大的測(cè)試組合范圍,重新審視強(qiáng)度為2時(shí)的子集之外的其他案例是否有必測(cè)的理由。注:正交強(qiáng)度最大的組合結(jié)果集并不是簡(jiǎn)單的笛卡爾乘積,因?yàn)榻M合條件之間可能存在一些邏輯限制;此外,鑒于篇幅有限,本文就不再羅列下表最終正交得出的測(cè)試組合結(jié)果。
圖3:保險(xiǎn)業(yè)務(wù)操作偽場(chǎng)景分析正交表樣例
通過(guò)對(duì)前端業(yè)務(wù)操作流程的分析,可以建立完整的前端的測(cè)試用例庫(kù),當(dāng)然,前端的自動(dòng)化測(cè)試可能只會(huì)選擇其中的一部分去做,如上文所述,自動(dòng)化測(cè)試覆蓋率也可以很輕易地度量出來(lái)。在設(shè)計(jì)評(píng)審過(guò)程中,流程設(shè)計(jì)完成者需要向評(píng)審人員展示各個(gè)業(yè)務(wù)流程的測(cè)試組合結(jié)果,并且解釋通過(guò)怎樣的組合方法得到這些結(jié)果;進(jìn)一步闡述依據(jù)什么樣的原則得出自動(dòng)化測(cè)試范圍的選擇結(jié)果。
特性組件抽取
完成了對(duì)測(cè)試案例場(chǎng)景的界定,我們便已明確我們要在被測(cè)應(yīng)用上做什么樣的操作,接下來(lái)的工作就是一些通用的簡(jiǎn)易特性抽取。雖然很多人聲稱復(fù)用不是個(gè)好東西,但它在編寫測(cè)試腳本中適度的使用,卻也可以很好地減少測(cè)試腳本開(kāi)發(fā)和維護(hù)成本。
第一層的特性抽取可以通過(guò)測(cè)試框架和工具來(lái)完成,簡(jiǎn)易的二次封裝是保證測(cè)試書寫低復(fù)雜度和保證測(cè)試腳本健壯性的好辦法,就如同圖中對(duì)click方法的簡(jiǎn)單封裝一樣。這件事情只需要一個(gè)像筆者一樣略微熟悉測(cè)試工具和被測(cè)應(yīng)用特性的測(cè)試工程師即可完成。所以這個(gè)活動(dòng)的成本不會(huì)太高,而帶來(lái)的效益卻還是很不錯(cuò)的,至少可以給不熟悉測(cè)試工具的腳本開(kāi)發(fā)者一段很長(zhǎng)的學(xué)習(xí)緩沖期。
圖4:STAR測(cè)試框架中的Api樣例
接下來(lái)就是被測(cè)對(duì)象的共有特性組件做抽取,仍以前端自動(dòng)化測(cè)試腳本開(kāi)發(fā)為例,我們可以參照被測(cè)應(yīng)用本身的組件復(fù)用規(guī)律來(lái)提取測(cè)試腳本中的公用頁(yè)面組件。例如,圖3所涉及的保全操作流程中,至少包含保全申請(qǐng)發(fā)起、質(zhì)檢、核保這三個(gè)可公用的頁(yè)面組件。假如最終需要測(cè)試的場(chǎng)景案例有8個(gè),其中5個(gè)必須質(zhì)檢、4個(gè)必須人工核保,那么在這三個(gè)點(diǎn)上就可以節(jié)省14(8+5+4-3)個(gè)測(cè)試Api的維護(hù)和開(kāi)發(fā)成本。
共有特性組件既不能設(shè)計(jì)的過(guò)于粗糙,從而造成在不同的自動(dòng)化測(cè)試腳本中無(wú)法統(tǒng)一支持;又不能過(guò)度抽象,進(jìn)而導(dǎo)致可讀和可維護(hù)性變差。目標(biāo)很簡(jiǎn)單:任意一處純前端頁(yè)面的改動(dòng),我們只需要修改一個(gè)測(cè)試Api;任意一個(gè)分支場(chǎng)景的規(guī)則改動(dòng),我們只需要修改一個(gè)測(cè)試案例腳本的數(shù)據(jù)和驗(yàn)證方法。
腳本重構(gòu)與舍棄
雖然測(cè)試腳本應(yīng)該被良好地規(guī)劃設(shè)計(jì),但實(shí)際執(zhí)行的時(shí)候可能會(huì)遇到一些問(wèn)題,比如在識(shí)別公用特性組建時(shí)存在遺漏卻未在評(píng)審環(huán)節(jié)被發(fā)現(xiàn),抑或被測(cè)應(yīng)用的代碼重構(gòu)甚至是流程再造同樣會(huì)要求我們?nèi)プ鲞@些對(duì)應(yīng)的測(cè)試腳本重構(gòu)的工作。
我每天都會(huì)從SVN上checkout我們組17個(gè)工程的測(cè)試腳本,之前經(jīng)常會(huì)發(fā)現(xiàn)某些系統(tǒng)一次性u(píng)pdate十?dāng)?shù)個(gè)甚至數(shù)十個(gè)文件。這時(shí)候我會(huì)問(wèn)一聲為什么,最初得到的答復(fù)都是由于系統(tǒng)頁(yè)面發(fā)生變動(dòng),所以這部分測(cè)試腳本都需要同步修改。我的回復(fù)一律都是:重構(gòu),重新做公用組件抽取,立刻做,因?yàn)槲覀兒牟黄疬@個(gè)維護(hù)成本!幾次之后,再遇到這種情況,得到的答復(fù)便基本上都是:因?yàn)閄X的變更影響了一些模塊的測(cè)試腳本,所以我重構(gòu)了一下。這時(shí)候我的心里就比較嗨皮,比較有成就感了,因此我也樂(lè)于不斷地給大家灌輸這種從別處學(xué)來(lái)的理念,而測(cè)試腳本重構(gòu)的動(dòng)力也從單純的前端頁(yè)面變更驅(qū)動(dòng)變得更加多樣化。
伴隨著測(cè)試腳本的開(kāi)發(fā),債務(wù)不可避免的在不斷產(chǎn)生,如果不加以管控,終有一天我們都會(huì)由于對(duì)之無(wú)法負(fù)擔(dān)而崩潰。所以我們?nèi)绻娴闹匾曌詣?dòng)化測(cè)試,我們就需要不斷地優(yōu)化我們測(cè)試腳本的結(jié)構(gòu),讓它始終停留在我們可以控制的范圍之內(nèi)。必要的時(shí)候我們可以放棄一些已經(jīng)開(kāi)發(fā)完成的但是優(yōu)先級(jí)稍低的測(cè)試腳本,即便它們運(yùn)行得很好。在負(fù)擔(dān)能力滿載的情況下,以放棄低優(yōu)先級(jí)的部分為代價(jià)來(lái)?yè)Q回我們對(duì)測(cè)試資產(chǎn)持續(xù)優(yōu)化和維護(hù)的能力、換回我們對(duì)這種低端技術(shù)債務(wù)的負(fù)擔(dān)能力,始終都比承擔(dān)不可控甚至崩潰的風(fēng)險(xiǎn)要來(lái)得更加有價(jià)值。
方法之四:堅(jiān)持定期腳本審查
在團(tuán)隊(duì)里面推廣自動(dòng)化測(cè)試應(yīng)用,同樣也會(huì)存在很多溝通和理解上的誤差,加之不是所有人的技能都在一個(gè)層次上,所以大家可能對(duì)測(cè)試腳本開(kāi)發(fā)的各種要求的理解上都會(huì)存在不同的誤區(qū)。因此,測(cè)試腳本開(kāi)發(fā)完成之后第一時(shí)間要進(jìn)行審查,這是測(cè)試腳本有效性驗(yàn)證的第一道關(guān),雖然這個(gè)活動(dòng)將耗費(fèi)不少時(shí)間。
測(cè)試腳本審查的手段分兩種:工具檢查和評(píng)審會(huì)議。一般建議在召開(kāi)評(píng)審會(huì)議之前使用代碼掃描工具如sonar或者checkstyle、 findbugs等,定義一些通用的規(guī)則去檢查測(cè)試腳本書寫和設(shè)計(jì)結(jié)構(gòu)上的問(wèn)題。使用工具的方法本文不介紹,完成這些基礎(chǔ)不合規(guī)項(xiàng)的檢查和修復(fù)之后則可以開(kāi)始后續(xù)的測(cè)試有效性評(píng)審。測(cè)試有效性評(píng)審是個(gè)技術(shù)活也是個(gè)體力活,不僅需要很強(qiáng)大的業(yè)務(wù)知識(shí)支撐和對(duì)系統(tǒng)設(shè)計(jì)模式甚至架構(gòu)的理解,同時(shí)也需要足夠的時(shí)間和耐心來(lái)從事這項(xiàng)活動(dòng)。接下來(lái),簡(jiǎn)單說(shuō)一些實(shí)際的檢查點(diǎn),通過(guò)這些檢查點(diǎn),我們將識(shí)別一段測(cè)試腳本是否能夠達(dá)成測(cè)試目標(biāo),是否經(jīng)濟(jì)合理。
● 經(jīng)過(guò)設(shè)計(jì)評(píng)審的每一個(gè)案例是否都已經(jīng)完成開(kāi)發(fā),是否存在額外的新增覆蓋,為什么;
● 預(yù)設(shè)的公用組件是否已經(jīng)完全抽離實(shí)現(xiàn),對(duì)于假設(shè)的被測(cè)應(yīng)用修改,能否用最簡(jiǎn)單、最經(jīng)濟(jì)的測(cè)試腳本修改來(lái)支持同步;
● 測(cè)試數(shù)據(jù)的初始化和使用是否合理,是否會(huì)破壞測(cè)試環(huán)境中數(shù)據(jù)的健康度甚至帶來(lái)環(huán)境故障;
● 測(cè)試的驗(yàn)證點(diǎn)是否精準(zhǔn)足夠,是否存在反向的驗(yàn)證方式(如,只檢查是否有錯(cuò)誤發(fā)生);
● 測(cè)試腳本中是否存在多余的結(jié)構(gòu)體,是否存在非預(yù)設(shè)的隨機(jī)性分支;
● ……
子曰:腳本三月不復(fù)查,CI即便全藍(lán)——蟲子照樣遍地爬!自動(dòng)化的測(cè)試有效性本就是需要通過(guò)維護(hù)去保持的,定期重新審查本就是一種測(cè)試腳本的維護(hù)手段,是非常有必要的。而頻率則需要結(jié)合團(tuán)隊(duì)對(duì)測(cè)試腳本維護(hù)的力度來(lái)看,復(fù)審的主要的方法與開(kāi)發(fā)完成之后的初次審查是一樣的,只是關(guān)注點(diǎn)會(huì)稍有不同。
兩句廢話做總結(jié)
自動(dòng)化測(cè)試是達(dá)成目標(biāo)的工具手段還是負(fù)擔(dān),關(guān)鍵在于它對(duì)我們產(chǎn)生了什么樣的影響,要產(chǎn)生好的效用,就必須保證其測(cè)試有效性。保證自動(dòng)化測(cè)試有效性的手段很多,筆者目前的水平只能說(shuō)到這里,但愿對(duì)入門者和彷徨者有所助益,高手和噴子們便一笑而過(guò)便可。
posted on 2013-06-28 11:39 順其自然EVO 閱讀(245) 評(píng)論(0) 編輯 收藏 所屬分類: selenium and watir webdrivers 自動(dòng)化測(cè)試學(xué)習(xí)