本文為《DevOps軟件架構(gòu)師行動(dòng)指南》一書測試相關(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í)行提交前測試
- 測試通過后,提交代碼,提交操作觸發(fā)集成構(gòu)建,并進(jìn)行集成測試
- 集成測試通過,提升到準(zhǔn)生產(chǎn)環(huán)境(預(yù)發(fā)布環(huán)境),再次測試
- 測試通過后,部署到生產(chǎn)環(huán)境,并進(jìn)行密切監(jiān)控
- 經(jīng)過一段時(shí)間的密切監(jiān)控后,部署到正式生產(chǎn)環(huán)境
- 結(jié)束
- 持續(xù)集成:通過自動(dòng)觸發(fā)器進(jìn)行集成,直到集成測試
- 持續(xù)交付:使用自動(dòng)觸發(fā)器,直到預(yù)發(fā)布系統(tǒng)
- 持續(xù)部署:直到部署到生產(chǎn)系統(tǒng),都是自動(dòng)化的
環(huán)境
不同環(huán)境用于不同的測試類型。成功完成的測試越多,對系統(tǒng)版本質(zhì)量更有信心。
- 提交前:開發(fā)本地環(huán)境或開發(fā)服務(wù)器,有更詳細(xì)的日志記錄以幫助發(fā)現(xiàn)缺陷
- 構(gòu)建與集成測試:持續(xù)集成服務(wù)器,有足夠多的測試數(shù)據(jù)
- 用戶驗(yàn)收測試/預(yù)發(fā)布/性能測試:盡可能接近生產(chǎn)環(huán)境。數(shù)據(jù)庫應(yīng)包含真實(shí)生產(chǎn)數(shù)據(jù)的一個(gè)子集
- 生產(chǎn):正式生產(chǎn)環(huán)境,應(yīng)有足夠的資源以滿足其日常需要
測試關(guān)注點(diǎn)
- 測試框架
軟件以及配置的測試數(shù)據(jù),通過在各種條件下運(yùn)行它,并對行為和輸出進(jìn)行監(jiān)控,來測試一個(gè)程序單元。測試框架會(huì)產(chǎn)生報(bào)表,并識別測試失敗的測試用例。 - 負(fù)面測試
即異常測試。違背正確輸入和執(zhí)行順序操作的測試。在進(jìn)行異常測試時(shí),常見期望是程序可能優(yōu)雅地降級或失敗。若故障不可避免,反饋有意義的錯(cuò)誤信息,并以可控方式退出。 - 回歸測試:
①在程序變更后力求發(fā)現(xiàn)新的缺陷
②確保已經(jīng)被修復(fù)的缺陷不再被引入
部署流水線的不同測試
在部署流水線流程中,代碼提交前、構(gòu)建后、預(yù)發(fā)布環(huán)境、生產(chǎn)環(huán)境都有測試參與。
在開發(fā)和提交前測試中的測試
在開發(fā)過程中有兩種類型的測試過程。測試驅(qū)動(dòng)開發(fā)和單元測試。
測試驅(qū)動(dòng)開發(fā)
傳統(tǒng)開發(fā)流程:先概要設(shè)計(jì),再詳細(xì)設(shè)計(jì),編碼完成后進(jìn)行測試。
測試驅(qū)動(dòng)開發(fā):先開發(fā)自動(dòng)化測試,再編碼開發(fā)功能,直到測試通過。單元測試
在知曉系統(tǒng)代碼的前提下,對單獨(dú)類或方法進(jìn)行測試。
在執(zhí)行提交前,自動(dòng)地運(yùn)行以上測試。提交前測試通常包含一組相關(guān)的單元測試,還有幾個(gè)冒煙測試。目標(biāo)是在集成測試前可以發(fā)現(xiàn)通過單元測試但未破壞整體系統(tǒng)的缺陷。一旦測試通過,就可以執(zhí)行代碼提交操作了。
集成測試
對系統(tǒng)已構(gòu)建的可執(zhí)行部分的測試。
功能測試
對已構(gòu)建提交的整體系統(tǒng)的功能進(jìn)行逐個(gè)測試,測試是否滿足需求,功能能否正常,滿足用戶使用需求。
接口測試
對已提交的功能對應(yīng)的接口進(jìn)行測試,從接口層面底層是否滿足健壯性,容錯(cuò)性,易用性。
自動(dòng)化測試
豐富自動(dòng)化測試用例,將測試過的主流測試功能轉(zhuǎn)化為自動(dòng)化腳本,在后期的回歸測試中更加容易減少人工投入,豐富測試手段。
用戶驗(yàn)收測試/預(yù)發(fā)布/性能測試
預(yù)發(fā)布是系統(tǒng)部署到生產(chǎn)環(huán)境前的最后一步,因此預(yù)發(fā)布環(huán)境應(yīng)盡可能貼近生產(chǎn)環(huán)境。在這個(gè)步驟中有以下測試類型:
- 用戶驗(yàn)收測試(UAT)
相關(guān)的用戶或獨(dú)立測試人員根據(jù)測試計(jì)劃和結(jié)果對系統(tǒng)進(jìn)行測試和接收。
可根據(jù)測試腳本測試,也可使用探索性測試。 - 自動(dòng)化驗(yàn)收測試
對最重要的、需要重復(fù)執(zhí)行的,且不太需要做很多維護(hù)的檢查點(diǎn)實(shí)現(xiàn)自動(dòng)化 - 冒煙測試
是自動(dòng)化驗(yàn)收測試的一個(gè)自己,用于快速分析提交的代碼是否影響到系統(tǒng)的某些核心功能 - 非功能測試
對性能、安全、容量以及可用性等方面的測試
生產(chǎn)環(huán)境
在系統(tǒng)部署到生產(chǎn)環(huán)境后,還會(huì)繼續(xù)進(jìn)行觀察和測試。
早期發(fā)布
beta發(fā)布
將產(chǎn)品有計(jì)劃地發(fā)布給特定用戶,讓用戶大量使用來發(fā)現(xiàn)軟件存在的問題與錯(cuò)誤,再把信息反饋給開發(fā)者修改。金絲雀發(fā)布
若系統(tǒng)部署有多臺服務(wù)器,先將新版本部署到其中幾臺服務(wù)器上,然后觀察驗(yàn)證。確認(rèn)沒有異常后,后續(xù)再更新剩余的所有服務(wù)器。
若只有一臺服務(wù)器,不可以使用金絲雀發(fā)布。A/B測試
beta發(fā)布與金絲雀發(fā)布是發(fā)布策略,A/B測試關(guān)注的是發(fā)布效果。
線上同時(shí)運(yùn)行多個(gè)版本的服務(wù),不同服務(wù)會(huì)有一些體驗(yàn)上的差異。相關(guān)人員通過分析各個(gè)版本的實(shí)際效果確定哪個(gè)版本執(zhí)行得更好。
例如:推薦算法、用戶界面
錯(cuò)誤檢測
即使系統(tǒng)通過所有測試,還是有可能存在缺陷。
對于檢測非功能的錯(cuò)誤,可以對系統(tǒng)信息進(jìn)行監(jiān)控。監(jiān)控包括:用戶請求的響應(yīng)時(shí)間、隊(duì)列長度等。當(dāng)監(jiān)控?cái)?shù)據(jù)與歷史數(shù)據(jù)有偏差時(shí),會(huì)觸發(fā)報(bào)警并通知給相關(guān)人員。
在檢測到錯(cuò)誤后,為了對錯(cuò)誤進(jìn)行跟蹤溯源,一般要求系統(tǒng)日志有合適的記錄。
在錯(cuò)誤診斷并修復(fù)后,會(huì)在未來發(fā)布的版本進(jìn)行回歸測試。
現(xiàn)場測試
在系統(tǒng)部署后,通過特殊手段干擾正在運(yùn)行的系統(tǒng)。例如:宕服務(wù)、宕虛擬機(jī)、模擬網(wǎng)絡(luò)變慢等。