如何讓自動化測試產(chǎn)生價值解虱?
千乘計劃-自動化優(yōu)先
只有將自動化切入日常測試中,才能將飄于空中的技術(shù)產(chǎn)生實(shí)際的價值,無論是DevOps墨坚、CICD等其他的一些融合開發(fā)的概念,質(zhì)量的自動化保障都是基礎(chǔ)設(shè)施映挂。
本次主要講一下現(xiàn)有團(tuán)隊在自動化方面的一些探索和落地泽篮。
自動化優(yōu)先
? ? ? ? 自動化優(yōu)先,既在QA人員介入測試時柑船,就需要考慮需求自動化測試動作帽撑。需求中需要哪種程度的自動化介入,需要哪些自動化測試動作的介入鞍时,自動化測試需要哪些前置資源亏拉,自動化測試所花費(fèi)成本,自動化測試在本次需求中的收益點(diǎn)逆巍;了解清楚了這些內(nèi)容及塘,就能夠確定自動化是否要做,怎么做锐极。
根據(jù)實(shí)際的項目經(jīng)驗(yàn)笙僚,自動化優(yōu)先具有以下優(yōu)點(diǎn):
節(jié)約自動化編寫時間(項目熟悉成本)、在測試過程中自動化的用例能夠支持測試溪烤、加快定版回歸效率味咳、外部聯(lián)調(diào)測試中支持測試。
材料:外部接口文檔檬嘀、web接口契約
執(zhí)行過程
在實(shí)際的自動化測試過程中槽驶,主要涉及以下的流程&動作:
需求分析
前面有提到,我們的自動化手段有很多鸳兽,在實(shí)際項目中掂铐,無論是基于UI、WEB場景、SRV服務(wù)代碼邏輯覆蓋全陨;針對需求的大小爆班、涉及面、復(fù)雜度辱姨、類型(UI柿菩、接口)枢舶,都有使用場景替久,不同工具方法使用在不同的場景發(fā)揮恰到好處的價值蚯根。
具體來講:
接口請求返回調(diào)整的需求颅拦,僅需要針對歷史腳本文檔進(jìn)行維護(hù)即可距帅。
新增完整小模塊的需求锥债,針對模塊功能痊臭,上線模塊功能自動化覆蓋广匙。
調(diào)整/重構(gòu)核心系統(tǒng)的需求,具體分析本次需求對核心系統(tǒng)影響潮剪,了解變更設(shè)計的歷史腳本維護(hù)抗碰,了解需要對哪些歷史腳本進(jìn)行維護(hù)弧蝇,并了解需要新增的邏輯/接口看疗。
全新系統(tǒng)開發(fā)類的需求两芳,了解本次需求涉及測試類型怖辆,針對UI、WEB接口佑笋、srv服務(wù)等類型蒋纬,考慮需要采用的合適測試類型蜀备。?
腳本設(shè)計
根據(jù)需求分析中得到的需求類型和涉及的測試類型碾阁,涉及對應(yīng)的測試用例脂凶,此處只討論接口測試相關(guān)內(nèi)容蚕钦。
一個接口測試用例應(yīng)包含以下幾個模塊:初始化(數(shù)據(jù)初始化嘶居、配置初始化)促煮、業(yè)務(wù)邏輯模塊(內(nèi)包含基礎(chǔ)的接口)菠齿、工具類(conditionSleep泞当、加密加簽、解密等)嚷量、數(shù)據(jù)校驗(yàn)蝶溶、數(shù)據(jù)輸出抖所。
很多時候完整自動化用例并不適用小版本迭代田轧,在進(jìn)行小版本功能迭代時傻粘,更多是進(jìn)行部分接口或邏輯的變更帮掉。針對小的邏輯變更時蟆炊,可以參考開發(fā)代碼進(jìn)行代碼行邏輯覆蓋涩搓,結(jié)合jacoco工具混狠,做到對開發(fā)有效代碼的邏輯覆蓋。通過這種方式的測試痛黎,無需上層復(fù)雜場景高成本覆蓋湖饱,僅通過底層接口的自動化測試井厌,來保證底層提供功能的符合性仅仆。
以下示例為一個完整的場景測試用例墓拜。
基礎(chǔ)配置
在開始編寫腳本之前夏醉,需要準(zhǔn)備好所需要的資料(如:外部接口文檔、WEB接口文檔靶擦、相關(guān)規(guī)約說明)奢啥。
在進(jìn)行基礎(chǔ)配置準(zhǔn)備中需要遵循一些基本原則桩盲,即可維護(hù)性,通用性柬姚,原子性量承。通常這類配置都是能夠被不同業(yè)務(wù)場景撕捍,甚至業(yè)務(wù)線共用的忧风,保持其通用性將會對后續(xù)的腳本開發(fā)腿宰、維護(hù)有極大的便利性吃度。
根據(jù)實(shí)際系統(tǒng)的需求,針對外部接口文檔配置所需要的MOCK(通常情況下為保證自動化的通過率拖刃,外部系統(tǒng)的接口采用MOCK方式支持)兑牡;依據(jù)WEB接口文檔,配置基礎(chǔ)的WEB接口參數(shù)等苞也。
PS:MOCK系統(tǒng)的支持需要基礎(chǔ)設(shè)施的支持如迟,這個不在本次討論范圍內(nèi),后續(xù)有機(jī)會討論玲销。
MOCK配置:MOCK開關(guān)初始化贤斜、MOCK路由配置、 MOCK請求數(shù)據(jù)準(zhǔn)備洽糟、MOCK返回數(shù)據(jù)準(zhǔn)備拍霜。
WEB接口配置:服務(wù)越驻、公共路徑(功能模塊)、方法配置(請求參數(shù)并巍、返回參數(shù))。
MicService接口配置:服務(wù)、服務(wù)組標(biāo)識(ServiceGroup)肾档、接口(InterfaceInfo)、方法(Method)
不過在沒有經(jīng)驗(yàn)的情況下,這些可能無法一次就做的比較好配阵,那么就一步一步迭代即可,初步保持基本原則,在遇到具體的多元化引用時進(jìn)行優(yōu)化派昧。
腳本編寫
在開始腳本編寫的時候淮椰,要根據(jù)腳本設(shè)計實(shí)施,針對不同的模塊類型有具體差異性。
常見的模塊類型有:公共工具模塊陆错、數(shù)據(jù)初始化、數(shù)據(jù)校驗(yàn)?zāi)K金赦、腳本場景支撐模塊音瓷。
公共工具類模塊主要提供一些工具屬的支撐,如:條件等待(有些場景異步返回結(jié)果或返回結(jié)果是非實(shí)時夹抗,需要根據(jù)某一個條件(通常是數(shù)據(jù)庫數(shù)據(jù))判斷是否進(jìn)行下一步操作)绳慎、加簽加密(某些外部接口請求需要對請求參數(shù)進(jìn)行加密加簽處理,通常這類操作是通用的)漠烧、解密(有些外部請求的返回已被加密杏愤,在進(jìn)行后續(xù)操作是需要進(jìn)行解密;有些數(shù)據(jù)檢查需要進(jìn)行解密后才能校驗(yàn))已脓。
數(shù)據(jù)初始化模塊包含場景用例運(yùn)行所需的初始數(shù)據(jù)珊楼,這類數(shù)據(jù)來源有:數(shù)據(jù)庫現(xiàn)有數(shù)據(jù)(現(xiàn)有可進(jìn)行場景執(zhí)行的賬戶)、根據(jù)規(guī)則實(shí)時生成的數(shù)據(jù)(如:身份證度液、手機(jī)號厕宗、訂單號)、由其他用例執(zhí)行后輸出的數(shù)據(jù)(如開通腳本輸出的開通用戶數(shù)據(jù)堕担、借款腳本生成的借款單數(shù)據(jù))
數(shù)據(jù)校驗(yàn)?zāi)K用來對數(shù)據(jù)落地進(jìn)行邏輯符合性校驗(yàn)已慢,通過對場景運(yùn)行中涉及到的數(shù)據(jù)落地表數(shù)據(jù)進(jìn)行邏輯符合性校驗(yàn),保證自動化用例的有效性霹购。數(shù)據(jù)校驗(yàn)也可以分層分級進(jìn)行配置佑惠,針對不同用途的腳本(冒煙、回歸、功能測試)膜楷,選擇覆蓋不同的表乍丈、字段檢查項。
腳本場景支撐模塊是場景用例組裝的基礎(chǔ)把将,腳本設(shè)計中包含此模塊詳細(xì)設(shè)計。具體來講忆矛,通過對需求業(yè)務(wù)察蹲、接口各個功能分析,劃分出場景中相對固定的一些模塊(此處劃分有以下原則可以遵循:接口上下文在場景多元化時無需增減調(diào)整催训、無參數(shù)變化洽议、無異步調(diào)用出,則可以劃分為一個模塊漫拭。在模塊劃分清楚后亚兄,依據(jù)已經(jīng)實(shí)現(xiàn)的原則層用例,將各個子用例打包成一些固化的模塊采驻,組織好各個原子接口的參數(shù)輸入和輸出以及一些基本的校驗(yàn)审胚。
自動化測試中很大一部分的工作都在此時完成,腳本的效率礼旅、合理性膳叨、魯棒性都是在此時通過具體實(shí)施來落地。腳本的優(yōu)化性都有一個相對度痘系,不必過于追求對腳本進(jìn)行優(yōu)化菲嘴,如同開發(fā)代碼一樣,優(yōu)化是沒有極限的汰翠,只要滿足當(dāng)前使用要求龄坪,遵循一些必要原則即可。
場景組裝
自動化想要實(shí)現(xiàn)的覆蓋都會通過場景組裝來實(shí)現(xiàn)复唤,需要覆蓋多少場景是根據(jù)每個團(tuán)隊業(yè)務(wù)需要來確定健田,有些需要做盡可能多場景覆蓋,有些僅需要做核心邏輯覆蓋即可苟穆。
場景組裝需要控制覆蓋場景的粒度抄课,一旦過于追求場景覆蓋度,維護(hù)成本就會失控雳旅。
在進(jìn)行場景組裝時跟磨,會發(fā)現(xiàn)有些前置的實(shí)現(xiàn)存在不合理,此時及時優(yōu)化不合理的地方并做記錄攒盈,方面后續(xù)腳本優(yōu)化時有的放矢抵拘。
調(diào)試優(yōu)化
腳本編寫完成后,通過不斷的運(yùn)行型豁,會發(fā)現(xiàn)腳本中一些不合理的地方僵蛛。這些不合理的地方主要有:耗時較久尚蝌、不穩(wěn)定(偶爾失敗)充尉、腳本間互斥(配置初始化不合理)飘言、通過率較低等一些問題。
針對這些問題驼侠,其實(shí)上面已經(jīng)講過方法姿鸿,在腳本編寫的階段未嚴(yán)格遵循一些原則或沒有意識到這些問題,此時對應(yīng)做優(yōu)化即可倒源。
耗時較久的問題苛预,需要做下取舍或通過技術(shù)手段來彌補(bǔ)腳本的等待時間,針對某些需要等待過久的腳本笋熬,單獨(dú)拆出做自動化热某。
不穩(wěn)定的問題,一般都是檢查點(diǎn)不合理導(dǎo)致的胳螟,某些檢查點(diǎn)未做好昔馋,會出現(xiàn)偶爾失敗的場景。有些檢查點(diǎn)不必做過于強(qiáng)的校驗(yàn)旺隙,抓住自動化的目的绒极。
腳本間互斥的問題,此類問題就是腳本設(shè)計問題了蔬捷,在考慮好腳本場景要求后垄提,對每個腳本都要做一些配置校驗(yàn)或初始化,保證腳本運(yùn)行期間業(yè)務(wù)周拐、系統(tǒng)配置是預(yù)期的铡俐。另,在不同腳本運(yùn)行期間由于運(yùn)行順序不合理業(yè)務(wù)有此類問題妥粟,此時可以調(diào)整用例的線性運(yùn)行順序审丘。
通過率較低的問題,在腳本初步調(diào)試完成后勾给,運(yùn)行一段時間發(fā)現(xiàn)通過率較低滩报,這個在自動化初期階段較常見,一般都是外部系統(tǒng)不穩(wěn)定導(dǎo)致的問題播急。此時需要針對不穩(wěn)定的外部系統(tǒng)脓钾,做些MOCK,必要時桩警,可以要求研發(fā)提供必要的接口支持業(yè)務(wù)數(shù)據(jù)順利流轉(zhuǎn)可训。
自動化是一個持續(xù)化的過程,任何團(tuán)隊在落地自動化的過程中都會遇到很多問題,甚至是長期無法產(chǎn)生價值握截,產(chǎn)生價值無法量化飞崖,這些都需要質(zhì)量團(tuán)隊的管理人員去思考,去想辦法解決谨胞。
以上淺顯的東西固歪,如對你有些幫助,不勝榮幸胯努。