有痛點(diǎn)并且找到問(wèn)題了,下一步就是解決問(wèn)題。我們分了兩步來(lái)走,第一個(gè)就是對(duì)已有UI測(cè)試的優(yōu)化,第二個(gè)是對(duì)新功能的自動(dòng)化測(cè)試策略的調(diào)整。
已有UI測(cè)試的優(yōu)化
針對(duì)已有的自動(dòng)化測(cè)試,再回過(guò)頭逐個(gè)去審查UT/API/UI測(cè)試代價(jià)太高,我們只能是從UI測(cè)試優(yōu)化入手。針對(duì)前面提到的3個(gè)問(wèn)題我們逐一去攻克:
- 識(shí)別系統(tǒng)關(guān)鍵業(yè)務(wù)場(chǎng)景
我們首先挖掘出系統(tǒng)中用戶要達(dá)到的各個(gè)業(yè)務(wù)目標(biāo),根據(jù)不同的業(yè)務(wù)目標(biāo)梳理出不同的業(yè)務(wù)場(chǎng)景,然后將這些發(fā)給客戶去評(píng)審??蛻魧?duì)我們總結(jié)出的這些場(chǎng)景很認(rèn)可,只是把每個(gè)業(yè)務(wù)目標(biāo)都賦予了一個(gè)優(yōu)先級(jí),為后續(xù)的編碼實(shí)現(xiàn)給予了參考。
- 重新設(shè)計(jì)測(cè)試場(chǎng)景
UI測(cè)試不是著重去測(cè)試某個(gè)功能是否工作,而更關(guān)注的是用戶在使用系統(tǒng)時(shí)能否順利實(shí)現(xiàn)某個(gè)業(yè)務(wù)目標(biāo),因此我們需要知道用戶是怎么使用系統(tǒng)的。同樣的目標(biāo),可能會(huì)有多個(gè)途徑來(lái)完成,通過(guò)跟客戶的訪談以及觀察產(chǎn)品環(huán)境下頁(yè)面的訪問(wèn)頻度,我們重新規(guī)劃了測(cè)試場(chǎng)景,期待能更貼近用戶的真實(shí)行為,及時(shí)防御可能會(huì)導(dǎo)致用戶不能順利完成業(yè)務(wù)目標(biāo)的問(wèn)題。
- 優(yōu)化測(cè)試數(shù)據(jù)準(zhǔn)備,刪除重復(fù)的測(cè)試
對(duì)于UI層的過(guò)度測(cè)試,直接刪除和API/UT層重復(fù)的測(cè)試,保留一條主干路徑用來(lái)測(cè)試系統(tǒng)連通性。
對(duì)于不同的業(yè)務(wù)場(chǎng)景可能需要準(zhǔn)備的數(shù)據(jù),我們舍棄了之前通過(guò)UI執(zhí)行測(cè)試這種成本高的方式,轉(zhuǎn)而以發(fā)API請(qǐng)求的方式來(lái)準(zhǔn)備,這樣降低了測(cè)試執(zhí)行的時(shí)間,也使得測(cè)試更加的穩(wěn)定。
重新梳理的測(cè)試場(chǎng)景幫我們構(gòu)建了一張較為全面的安全防護(hù)網(wǎng),覆蓋了絕大部分的用戶使用場(chǎng)景,大家的信心顯著提高。如果核心業(yè)務(wù)受到破壞,立馬就可以通過(guò)UI測(cè)試反饋給相關(guān)的人。執(zhí)行更加穩(wěn)定的測(cè)試也減少了大家對(duì)UI測(cè)試是否能真的發(fā)現(xiàn)問(wèn)題的質(zhì)疑,因?yàn)殡S機(jī)掛的頻率大大的降低,一旦掛可能就是真的有bug了。
新功能自動(dòng)化測(cè)試策略的調(diào)整
我們一般會(huì)以測(cè)試金字塔作為自動(dòng)化測(cè)試的指導(dǎo)策略,下圖是我們項(xiàng)目的測(cè)試金字塔。
為了避免新功能步舊功能的后塵,我們對(duì)自動(dòng)化測(cè)試策略進(jìn)行了調(diào)整。除去以不同層的數(shù)量分布來(lái)判定策略是否合理外,我們也更看重在這個(gè)數(shù)量下關(guān)鍵業(yè)務(wù)場(chǎng)景是否能被有效地覆蓋,主要通過(guò)下面兩種方式來(lái)保證:
- QA及早介入自動(dòng)化測(cè)試
質(zhì)量是需要內(nèi)建的,不是測(cè)出來(lái)的。QA從一開(kāi)始就介入整個(gè)流程之中,在story啟動(dòng)的時(shí)候會(huì)和DEV一起準(zhǔn)備任務(wù)拆分。在后期驗(yàn)收story的同時(shí)也會(huì)驗(yàn)收單元測(cè)試,確保能在UT/API/Contract層實(shí)現(xiàn)的測(cè)試都在這些層面覆蓋,不僅保證了底層測(cè)試的數(shù)量要夠多,也確保了這么多測(cè)試覆蓋的點(diǎn)都是合理有效的。在這個(gè)過(guò)程中,QA把更多的測(cè)試思路傳遞給團(tuán)隊(duì)成員,引發(fā)大家更多的從質(zhì)量角度去思考。
- QA與DEV結(jié)對(duì)寫(xiě)UI測(cè)試
最后在整個(gè)功能做完的時(shí)候,QA也會(huì)和DEV結(jié)對(duì)實(shí)現(xiàn)UI測(cè)試,涉及到現(xiàn)有測(cè)試場(chǎng)景的維護(hù)與更新?;谇懊鎸?duì)底層測(cè)試的review,大家對(duì)于整個(gè)功能的測(cè)試覆蓋都有了一定程度的了解,對(duì)于UI測(cè)試要測(cè)得點(diǎn)也會(huì)較快的達(dá)成一致。另外,QA在與DEV結(jié)對(duì)實(shí)現(xiàn)UI測(cè)試的時(shí)候,編碼能力也得到了提高。
在推動(dòng)QA更多參與底層測(cè)試的過(guò)程中,我們更多的從測(cè)試角度去影響團(tuán)隊(duì),增加了團(tuán)隊(duì)的質(zhì)量意識(shí)。QA的時(shí)間被釋放出來(lái)了,去做了更多有價(jià)值的事,比如探索性測(cè)試,Log監(jiān)控與分析,安全測(cè)試,產(chǎn)品環(huán)境下用戶行為分析等。這一些列活動(dòng)的影響就是產(chǎn)品的質(zhì)量順便得到了提升。
總結(jié)
等我們把已有功能UI測(cè)試優(yōu)化完,新功能的自動(dòng)化測(cè)試策略開(kāi)始落實(shí)到全組,已經(jīng)是半年以后的事了。我們慢慢的感受到一切都在回歸正軌,之前的痛點(diǎn)在逐步消去,團(tuán)隊(duì)交付的節(jié)奏也越來(lái)越順暢,對(duì)發(fā)布產(chǎn)品的信心也更強(qiáng)了。
回顧這個(gè)遺留系統(tǒng)的自動(dòng)化測(cè)試優(yōu)化過(guò)程,我們有一些收獲:
- 大家說(shuō)到UI測(cè)試往往更傾向于如何編碼實(shí)現(xiàn),但我們希望開(kāi)始UI測(cè)試的時(shí)候能多關(guān)注下測(cè)試用例的設(shè)計(jì)是否合理,是不是能夠體現(xiàn)出業(yè)務(wù)價(jià)值
- UI測(cè)試的用例和代碼都是測(cè)試資產(chǎn),需要跟產(chǎn)品代碼等同對(duì)待,不能寫(xiě)出來(lái)就不管不顧,沒(méi)有維護(hù)是不可取的
- 自動(dòng)化測(cè)試不僅僅是UI測(cè)試,需要和UT/API等其他底層測(cè)試一起分工合作,作為測(cè)試策略的一部分來(lái)為產(chǎn)品質(zhì)量保駕護(hù)航