1. 自動化測試的目標
2. 理解自動化測試框架(自動化工具原理分析)
3. 深入理解測試金字塔
- 1)什么是測試金字塔?
- 2)對測試金字塔的困惑
- 3)正確理解金字塔模型
- 4)金字塔模型的適用范圍
- 5)金字塔模型的實踐目標
- 6)橄欖球分層模型
- 7)谷歌如何進行分層測試?
1. 自動化測試的目標
自動化測試的目標是加快研發過程,而不是試圖省錢。
-
迅速檢測出新版本中不穩定的變更。
-
迅速暴露程序回歸的錯誤。
-
迅速報告問題, 因為這會使程序錯誤修改更容易。
為了達到目標,所需要的測試能力要求
- 測試技術:測試的基礎技術,如用例設計方法等。
- 業務能力:對被測對象業務的熟悉程度和理解能力。
- 拓展能力:如系統架構、主流技術框架、開發模式、思考方式等。
自動化測試如何做到收益最大化?
Ross Collard 在《Use Case Testing》中說到,10-15% 的測試用例可以發現 75% 到 90% 的重要缺陷。
由此,京東金融自動化測試技術高管在跟蹤統計 31 個項目中發現,當測試用例的自動化覆蓋率達到 15% 到 25% 時,收益達到最高。
收益最大化的自動化測試應該包含哪些內容?
- 核心和基礎功能
- 行業標准高的模板或系統
- 公式化/程序化/運算計算/報表類
- 邏輯清晰,但輸入組合復雜
- 功能專項
2. 理解自動化測試框架(自動化工具原理分析)
自動化測試框架的六要素
測試對象:
- 1)被操作對象
- 2)操作行為
- 3)操作的值
測試管理:
- 4)用例的組織方法
- 5)用例的執行策略
- 6)測試結果呈現
1)測試對象
2)測試管理
以 JUnit 為示例,其三重唱共同產生測試結果
用例的組織方法
- 當你需要編寫更多的 TestCase 的時候,你可以創建更多的 TestCase 對象。
- 當你需要一次執行多個 TestCase 對象的時候,您可以創建一個 TestSuite 對象或使用缺省的 TestSuite 對象進行封裝。
用例的執行策略
- 為了執行 TestSuite,需要使用 TestRunner。
測試結果呈現
- 通過 TestRunner 的執行生成 TestResult 對象。
3. 深入理解測試金字塔
1)什么是測試金字塔?
Mike Cohn 在他的著作《Succeeding with Agile》一書中提出了測試金字塔這一概念。根據 Mike Cohn 的測試金字塔,測試組合應該由三層組成(自下往上分別是):單元測試、服務測試、UI 測試。
- 單元測試:最下層是單元測試,單元測試是自動化測試策略穩固的根基,因此也是金字塔結構的最底層。
- UI 測試:最上層是用戶界面,通常用戶界面是脆弱的,測試和修改的經濟成本和時間成本較高。
- 服務測試:中間的服務層是為了過渡用戶界面和程序單元而設計的,認為所有應用程序都由各種服務組成,服務是指實現某一具體功能的程序集合,服務通過對輸入進行響應而體現。通過對服務進行測試,而不是對用戶界面進行測試,可以極大縮短時間和成本。
Cohn 測試金字塔中提到的兩件事:
- 編寫不同粒度的測試;
- 層次越高,編寫的測試應該越少。
即為了維持金字塔形狀,一個正常、快速、可維護的測試組合應該是這樣的:
- 寫許多小而快的單元測試;
- 適當寫一些更粗粒度的服務相關的測試,對某些業務可以理解為編寫適當的接口測試;
- 只需寫很少的高層次的端到端測試。
2)對測試金字塔的困惑
開發為什么不願意編寫單元測試?
單元測試的好處:
- 單元測試執行速度快。
- 發現 bug 時修復成本低。
但未考慮單元測試的開發成本高:
- 目前為止沒有很好的單元測試框架來支持業務開發需求。
- 由於業務場景流向的串行化,測試時需要准備大量的數據,因此單元測試時需要 mock 數據,而 mock 數據本身也是較為復雜的。
- 由於業務復雜,因此寫單元測試(如異常場景用例)時更復雜。
為什么大部分公司還在做 UI 測試?
單元測試、接口自動化測試覆蓋足夠高,是不是就不需要 UI 測試了呢?—— 並不是。
因為質量有兩層含義:
- 基於用戶體驗 —— UI 測試
- 基於產品品質(內建質量) —— 單元、接口測試
質量的兩層含義,也對應着測試人員發展的兩個方向:
- 測試技術
- 測試開發能力
3)正確理解金字塔模型
按照 Cohn 在測試金字塔模型中提到的觀點,在開發過程中,應該編寫和開發更多小而快的單元測試,以更快更高效完成質量反饋,而應該寫很少的端到端 UI 測試。
但實際上在大部分的公司里,開發同學還是不太願意寫更多的單元測試,而是更多的進行 UI 層的測試呢?難道說測試金字塔模型有問題?要搞明白這個問題,我們先要思考一下,在軟件測試的過程中測試是希望達成什么樣的目標?在保障過程中是在保障哪一部分內容?
在 ISO25000 標准中,測試質量被分為內部質量和外部質量:
- 外部質量:就是我們常說的用戶體驗,是用戶使用過程中的用戶體驗,是否好用,是否易用,是否可靠等等。
- 內部質量:更多的是內建質量,關注的是產品安全性、可測性、可重用性、可維護性以及可移植性等等。
在用戶量較小的 C 端產品或者業務復雜的產品中,測試的過程更多的關注於用戶體驗屬性;而用戶量大的產品更多關注於產品的內建質量。
- 比如在創業團隊中,一般更多的關注於用戶體驗,在保障產品質量的過程中一般會有更多的資源投入到 UI 層面的測試和質量保障。測試的模型大概率是冰淇淋(倒三角)模型。
- 而在雲和大數據、人工智能的團隊中,因為對安全性、可測性、可重用性、可維護性以及可移植性等方面的要求很高,測試資源會更多的向單元測試和接口測試層面傾斜。
4)金字塔模型的適用范圍
按照以上分析,測試金字塔模型的也是有一定適用范圍的:
- 對於用戶體驗要求更高的產品或者業務更復雜產品,測試金字塔模型匹配度較低;
- 而對於內建質量要求更高的產品,比如雲、大數據、人工智能等產品,更適合使用金字塔模型構建我們的測試策略或者測試組合。
這也很好地解釋了,金字塔模型既然得到了那么多人的認可,為什么在真正落地的時候,大部分團隊還是按照冰激凌(倒三角)模式執行。不管是金字塔模型還是冰激凌模型,其實都是都是一種測試組合或者策略。
5)金字塔模型的實踐目標
如上圖所示凈化水的裝置,也是通過不同的組合得到干凈的水質,紗布過濾較大的浮塵和雜物,小卵石和石英砂凈化泥沙,活性炭進行殺菌消毒,蓬松棉在此過濾細粒度的雜物,確保得到更干凈的水(分層測試的每個層次都只有一個重點,解決一種問題)。
其實測試金字塔模型是分層測試策略,是通過按照單元測試、接口測試、UI 測試按照不同的目標要求,總結出來的一套最佳分層測試實踐。
對於每一個層次所達成的目標也是在一定范圍之內的,比如:
- 單元測試主要解決單功能或者函數的正確性;
- 接口測試確保各種異常輸入輸出的正確性;
- UI 測試主要保障產品符合用戶需求,滿足用戶心理預期,可以給用戶提供良好的使用體驗。
通過金字塔模型進行組合測試,最大程度保障測試能夠被快速執行,快速反饋,進而降低質量保障的總成本。
6)橄欖球分層模型
既然單元測試實現難度較高,而在微服務架構下,還有一種新興的備受推崇的橄欖球分層模型,即盡可能接口測試先行。
7)谷歌如何進行分層測試?
谷歌采用 70/20/10 原則:70% 小型測試,20% 中型測試,10% 大型測試