本文為《DevOps軟件架構(gòu)師行動(dòng)指南》一書測(cè)試相關(guān)章節(jié)的學(xué)習(xí)筆記。
DevOps
DevOps是一套實(shí)踐方法瑟啃,在保證高質(zhì)量的前提下,縮短系統(tǒng)變更從提交到部署至生產(chǎn)環(huán)境的時(shí)間。
DevOps五要素
- 敏捷
- 持續(xù)
- 協(xié)作
- 系統(tǒng)性
- 自動(dòng)化
部署流水線
部署流水線是從開發(fā)提交代碼篮奄,到代碼實(shí)際部署到正式生產(chǎn)環(huán)境的流程展氓。
- 開始:開發(fā)人員把代碼提交至聯(lián)合版本(dev穆趴、test、master)
- 在本地環(huán)境執(zhí)行提交前測(cè)試
- 測(cè)試通過后遇汞,提交代碼未妹,提交操作觸發(fā)集成構(gòu)建簿废,并進(jìn)行集成測(cè)試
- 集成測(cè)試通過,提升到準(zhǔn)生產(chǎn)環(huán)境(預(yù)發(fā)布環(huán)境)络它,再次測(cè)試
- 測(cè)試通過后族檬,部署到生產(chǎn)環(huán)境,并進(jìn)行密切監(jiān)控
- 經(jīng)過一段時(shí)間的密切監(jiān)控后化戳,部署到正式生產(chǎn)環(huán)境
- 結(jié)束
- 持續(xù)集成:通過自動(dòng)觸發(fā)器進(jìn)行集成单料,直到集成測(cè)試
- 持續(xù)交付:使用自動(dòng)觸發(fā)器,直到預(yù)發(fā)布系統(tǒng)
- 持續(xù)部署:直到部署到生產(chǎn)系統(tǒng)点楼,都是自動(dòng)化的
環(huán)境
不同環(huán)境用于不同的測(cè)試類型扫尖。成功完成的測(cè)試越多,對(duì)系統(tǒng)版本質(zhì)量更有信心掠廓。
- 提交前:開發(fā)本地環(huán)境或開發(fā)服務(wù)器换怖,有更詳細(xì)的日志記錄以幫助發(fā)現(xiàn)缺陷
- 構(gòu)建與集成測(cè)試:持續(xù)集成服務(wù)器,有足夠多的測(cè)試數(shù)據(jù)
- 用戶驗(yàn)收測(cè)試/預(yù)發(fā)布/性能測(cè)試:盡可能接近生產(chǎn)環(huán)境蟀瞧。數(shù)據(jù)庫應(yīng)包含真實(shí)生產(chǎn)數(shù)據(jù)的一個(gè)子集
- 生產(chǎn):正式生產(chǎn)環(huán)境沉颂,應(yīng)有足夠的資源以滿足其日常需要
測(cè)試關(guān)注點(diǎn)
- 測(cè)試框架
軟件以及配置的測(cè)試數(shù)據(jù),通過在各種條件下運(yùn)行它悦污,并對(duì)行為和輸出進(jìn)行監(jiān)控铸屉,來測(cè)試一個(gè)程序單元。測(cè)試框架會(huì)產(chǎn)生報(bào)表塞关,并識(shí)別測(cè)試失敗的測(cè)試用例抬探。 - 負(fù)面測(cè)試
即異常測(cè)試。違背正確輸入和執(zhí)行順序操作的測(cè)試帆赢。在進(jìn)行異常測(cè)試時(shí)小压,常見期望是程序可能優(yōu)雅地降級(jí)或失敗。若故障不可避免椰于,反饋有意義的錯(cuò)誤信息怠益,并以可控方式退出。 - 回歸測(cè)試:
①在程序變更后力求發(fā)現(xiàn)新的缺陷
②確保已經(jīng)被修復(fù)的缺陷不再被引入
部署流水線的不同測(cè)試
在部署流水線流程中瘾婿,代碼提交前蜻牢、構(gòu)建后、預(yù)發(fā)布環(huán)境偏陪、生產(chǎn)環(huán)境都有測(cè)試參與抢呆。
在開發(fā)和提交前測(cè)試中的測(cè)試
在開發(fā)過程中有兩種類型的測(cè)試過程。測(cè)試驅(qū)動(dòng)開發(fā)和單元測(cè)試笛谦。
測(cè)試驅(qū)動(dòng)開發(fā)
傳統(tǒng)開發(fā)流程:先概要設(shè)計(jì)抱虐,再詳細(xì)設(shè)計(jì),編碼完成后進(jìn)行測(cè)試饥脑。
測(cè)試驅(qū)動(dòng)開發(fā):先開發(fā)自動(dòng)化測(cè)試恳邀,再編碼開發(fā)功能懦冰,直到測(cè)試通過。單元測(cè)試
在知曉系統(tǒng)代碼的前提下谣沸,對(duì)單獨(dú)類或方法進(jìn)行測(cè)試刷钢。
在執(zhí)行提交前,自動(dòng)地運(yùn)行以上測(cè)試乳附。提交前測(cè)試通常包含一組相關(guān)的單元測(cè)試内地,還有幾個(gè)冒煙測(cè)試。目標(biāo)是在集成測(cè)試前可以發(fā)現(xiàn)通過單元測(cè)試但未破壞整體系統(tǒng)的缺陷许溅。一旦測(cè)試通過瓤鼻,就可以執(zhí)行代碼提交操作了。
集成測(cè)試
對(duì)系統(tǒng)已構(gòu)建的可執(zhí)行部分的測(cè)試贤重。
功能測(cè)試
對(duì)已構(gòu)建提交的整體系統(tǒng)的功能進(jìn)行逐個(gè)測(cè)試茬祷,測(cè)試是否滿足需求,功能能否正常并蝗,滿足用戶使用需求祭犯。
接口測(cè)試
對(duì)已提交的功能對(duì)應(yīng)的接口進(jìn)行測(cè)試,從接口層面底層是否滿足健壯性滚停,容錯(cuò)性沃粗,易用性。
自動(dòng)化測(cè)試
豐富自動(dòng)化測(cè)試用例键畴,將測(cè)試過的主流測(cè)試功能轉(zhuǎn)化為自動(dòng)化腳本最盅,在后期的回歸測(cè)試中更加容易減少人工投入,豐富測(cè)試手段起惕。
用戶驗(yàn)收測(cè)試/預(yù)發(fā)布/性能測(cè)試
預(yù)發(fā)布是系統(tǒng)部署到生產(chǎn)環(huán)境前的最后一步涡贱,因此預(yù)發(fā)布環(huán)境應(yīng)盡可能貼近生產(chǎn)環(huán)境。在這個(gè)步驟中有以下測(cè)試類型:
- 用戶驗(yàn)收測(cè)試(UAT)
相關(guān)的用戶或獨(dú)立測(cè)試人員根據(jù)測(cè)試計(jì)劃和結(jié)果對(duì)系統(tǒng)進(jìn)行測(cè)試和接收惹想。
可根據(jù)測(cè)試腳本測(cè)試问词,也可使用探索性測(cè)試。 - 自動(dòng)化驗(yàn)收測(cè)試
對(duì)最重要的嘀粱、需要重復(fù)執(zhí)行的激挪,且不太需要做很多維護(hù)的檢查點(diǎn)實(shí)現(xiàn)自動(dòng)化 - 冒煙測(cè)試
是自動(dòng)化驗(yàn)收測(cè)試的一個(gè)自己,用于快速分析提交的代碼是否影響到系統(tǒng)的某些核心功能 - 非功能測(cè)試
對(duì)性能锋叨、安全垄分、容量以及可用性等方面的測(cè)試
生產(chǎn)環(huán)境
在系統(tǒng)部署到生產(chǎn)環(huán)境后,還會(huì)繼續(xù)進(jìn)行觀察和測(cè)試娃磺。
早期發(fā)布
beta發(fā)布
將產(chǎn)品有計(jì)劃地發(fā)布給特定用戶锋喜,讓用戶大量使用來發(fā)現(xiàn)軟件存在的問題與錯(cuò)誤,再把信息反饋給開發(fā)者修改。金絲雀發(fā)布
若系統(tǒng)部署有多臺(tái)服務(wù)器嘿般,先將新版本部署到其中幾臺(tái)服務(wù)器上,然后觀察驗(yàn)證涯冠。確認(rèn)沒有異常后炉奴,后續(xù)再更新剩余的所有服務(wù)器。
若只有一臺(tái)服務(wù)器蛇更,不可以使用金絲雀發(fā)布瞻赶。A/B測(cè)試
beta發(fā)布與金絲雀發(fā)布是發(fā)布策略,A/B測(cè)試關(guān)注的是發(fā)布效果派任。
線上同時(shí)運(yùn)行多個(gè)版本的服務(wù)砸逊,不同服務(wù)會(huì)有一些體驗(yàn)上的差異。相關(guān)人員通過分析各個(gè)版本的實(shí)際效果確定哪個(gè)版本執(zhí)行得更好掌逛。
例如:推薦算法师逸、用戶界面
錯(cuò)誤檢測(cè)
即使系統(tǒng)通過所有測(cè)試,還是有可能存在缺陷豆混。
對(duì)于檢測(cè)非功能的錯(cuò)誤篓像,可以對(duì)系統(tǒng)信息進(jìn)行監(jiān)控。監(jiān)控包括:用戶請(qǐng)求的響應(yīng)時(shí)間皿伺、隊(duì)列長(zhǎng)度等员辩。當(dāng)監(jiān)控?cái)?shù)據(jù)與歷史數(shù)據(jù)有偏差時(shí),會(huì)觸發(fā)報(bào)警并通知給相關(guān)人員鸵鸥。
在檢測(cè)到錯(cuò)誤后奠滑,為了對(duì)錯(cuò)誤進(jìn)行跟蹤溯源,一般要求系統(tǒng)日志有合適的記錄妒穴。
在錯(cuò)誤診斷并修復(fù)后宋税,會(huì)在未來發(fā)布的版本進(jìn)行回歸測(cè)試。
現(xiàn)場(chǎng)測(cè)試
在系統(tǒng)部署后宰翅,通過特殊手段干擾正在運(yùn)行的系統(tǒng)弃甥。例如:宕服務(wù)、宕虛擬機(jī)汁讼、模擬網(wǎng)絡(luò)變慢等淆攻。