自動化測試理論(目標、框架要素、深入理解測試金字塔)


1. 自動化測試的目標

2. 理解自動化測試框架(自動化工具原理分析)

3. 深入理解測試金字塔

  • 1)什么是測試金字塔?
  • 2)對測試金字塔的困惑
  • 3)正確理解金字塔模型
  • 4)金字塔模型的適用范圍
  • 5)金字塔模型的實踐目標
  • 6)橄欖球分層模型
  • 7)谷歌如何進行分層測試?

 

 

1. 自動化測試的目標

自動化測試的目標是加快研發過程,而不是試圖省錢。

  • 迅速檢測出新版本中不穩定的變更。

  • 迅速暴露程序回歸的錯誤。

  • 迅速報告問題, 因為這會使程序錯誤修改更容易。

為了達到目標,所需要的測試能力要求

  1. 測試技術:測試的基礎技術,如用例設計方法等。
  2. 業務能力:對被測對象業務的熟悉程度和理解能力。
  3. 拓展能力:如系統架構、主流技術框架、開發模式、思考方式等。

自動化測試如何做到收益最大化?

Ross Collard 在《Use Case Testing》中說到,10-15% 的測試用例可以發現 75% 到 90% 的重要缺陷。

由此,京東金融自動化測試技術高管在跟蹤統計 31 個項目中發現,當測試用例的自動化覆蓋率達到 15% 到 25% 時,收益達到最高。

收益最大化的自動化測試應該包含哪些內容?

  1. 核心和基礎功能
  2. 行業標准高的模板或系統
  3. 公式化/程序化/運算計算/報表類
  4. 邏輯清晰,但輸入組合復雜
  5. 功能專項

 

2. 理解自動化測試框架(自動化工具原理分析)

自動化測試框架的六要素

測試對象:

  • 1)被操作對象
  • 2)操作行為
  • 3)操作的值

測試管理:

  • 4)用例的組織方法
  • 5)用例的執行策略
  • 6)測試結果呈現

1)測試對象

08cee7fa2eee44b9f55caea4b16f953a.png

2)測試管理

以 JUnit 為示例,其三重唱共同產生測試結果

4b723e7be032d1f983f71fc1a63ca276.png

用例的組織方法

  • 當你需要編寫更多的 TestCase 的時候,你可以創建更多的 TestCase 對象。
  • 當你需要一次執行多個 TestCase 對象的時候,您可以創建一個 TestSuite 對象或使用缺省的 TestSuite 對象進行封裝。

用例的執行策略

  • 為了執行 TestSuite,需要使用 TestRunner。

測試結果呈現

  • 通過 TestRunner 的執行生成 TestResult 對象。

 4f210e885d070c86358828e683c5d9e8.png

  

3. 深入理解測試金字塔

1)什么是測試金字塔?

Mike Cohn 在他的著作《Succeeding with Agile》一書中提出了測試金字塔這一概念。根據 Mike Cohn 的測試金字塔,測試組合應該由三層組成(自下往上分別是):單元測試、服務測試、UI 測試

  1. 單元測試:最下層是單元測試,單元測試是自動化測試策略穩固的根基,因此也是金字塔結構的最底層。
  2. UI 測試:最上層是用戶界面,通常用戶界面是脆弱的,測試和修改的經濟成本和時間成本較高。
  3. 服務測試:中間的服務層是為了過渡用戶界面和程序單元而設計的,認為所有應用程序都由各種服務組成,服務是指實現某一具體功能的程序集合,服務通過對輸入進行響應而體現。通過對服務進行測試,而不是對用戶界面進行測試,可以極大縮短時間和成本。

Cohn 測試金字塔中提到的兩件事:

  1. 編寫不同粒度的測試;
  2. 層次越高,編寫的測試應該越少。

即為了維持金字塔形狀,一個正常、快速、可維護的測試組合應該是這樣的:

  1. 寫許多小而快的單元測試;
  2. 適當寫一些更粗粒度的服務相關的測試,對某些業務可以理解為編寫適當的接口測試;
  3. 只需寫很少的高層次的端到端測試。

2)對測試金字塔的困惑

開發為什么不願意編寫單元測試?

單元測試的好處:

  1. 單元測試執行速度快。
  2. 發現 bug 時修復成本低。

但未考慮單元測試的開發成本高:

  1. 目前為止沒有很好的單元測試框架來支持業務開發需求。
  2. 由於業務場景流向的串行化,測試時需要准備大量的數據,因此單元測試時需要 mock 數據,而 mock 數據本身也是較為復雜的。
  3. 由於業務復雜,因此寫單元測試(如異常場景用例)時更復雜。

為什么大部分公司還在做 UI 測試?

單元測試、接口自動化測試覆蓋足夠高,是不是就不需要 UI 測試了呢?—— 並不是。

因為質量有兩層含義:

  1. 基於用戶體驗 —— UI 測試
  2. 基於產品品質(內建質量) —— 單元、接口測試

質量的兩層含義,也對應着測試人員發展的兩個方向:

  1. 測試技術
  2. 測試開發能力

3)正確理解金字塔模型

按照 Cohn 在測試金字塔模型中提到的觀點,在開發過程中,應該編寫和開發更多小而快的單元測試,以更快更高效完成質量反饋,而應該寫很少的端到端 UI 測試。

但實際上在大部分的公司里,開發同學還是不太願意寫更多的單元測試,而是更多的進行 UI 層的測試呢?難道說測試金字塔模型有問題?要搞明白這個問題,我們先要思考一下,在軟件測試的過程中測試是希望達成什么樣的目標?在保障過程中是在保障哪一部分內容?

在 ISO25000 標准中,測試質量被分為內部質量和外部質量

  • 外部質量:就是我們常說的用戶體驗,是用戶使用過程中的用戶體驗,是否好用,是否易用,是否可靠等等。
  • 內部質量:更多的是內建質量,關注的是產品安全性、可測性、可重用性、可維護性以及可移植性等等。

03179cbaa37446e98e4c619b5db9e827.png

用戶量較小的 C 端產品或者業務復雜的產品中,測試的過程更多的關注於用戶體驗屬性;而用戶量大的產品更多關注於產品的內建質量

  • 比如在創業團隊中,一般更多的關注於用戶體驗,在保障產品質量的過程中一般會有更多的資源投入到 UI 層面的測試和質量保障。測試的模型大概率是冰淇淋(倒三角)模型。
  • 而在雲和大數據、人工智能的團隊中,因為對安全性、可測性、可重用性、可維護性以及可移植性等方面的要求很高,測試資源會更多的向單元測試和接口測試層面傾斜。

4)金字塔模型的適用范圍

按照以上分析,測試金字塔模型的也是有一定適用范圍的:

  • 對於用戶體驗要求更高的產品或者業務更復雜產品,測試金字塔模型匹配度較低;
  • 而對於內建質量要求更高的產品,比如雲、大數據、人工智能等產品,更適合使用金字塔模型構建我們的測試策略或者測試組合。

ccffecbeb161939f82b17bd9ade905f3.png

這也很好地解釋了,金字塔模型既然得到了那么多人的認可,為什么在真正落地的時候,大部分團隊還是按照冰激凌(倒三角)模式執行。不管是金字塔模型還是冰激凌模型,其實都是都是一種測試組合或者策略。

5)金字塔模型的實踐目標

08411cf223e314cbe02c24d3b8b9842f.png

如上圖所示凈化水的裝置,也是通過不同的組合得到干凈的水質,紗布過濾較大的浮塵和雜物,小卵石和石英砂凈化泥沙,活性炭進行殺菌消毒,蓬松棉在此過濾細粒度的雜物,確保得到更干凈的水(分層測試的每個層次都只有一個重點,解決一種問題)。

其實測試金字塔模型是分層測試策略,是通過按照單元測試、接口測試、UI 測試按照不同的目標要求,總結出來的一套最佳分層測試實踐。

對於每一個層次所達成的目標也是在一定范圍之內的,比如:

  1. 單元測試主要解決單功能或者函數的正確性;
  2. 接口測試確保各種異常輸入輸出的正確性;
  3. UI 測試主要保障產品符合用戶需求,滿足用戶心理預期,可以給用戶提供良好的使用體驗。

通過金字塔模型進行組合測試,最大程度保障測試能夠被快速執行,快速反饋,進而降低質量保障的總成本。 

6)橄欖球分層模型

既然單元測試實現難度較高,而在微服務架構下,還有一種新興的備受推崇的橄欖球分層模型,即盡可能接口測試先行

7)谷歌如何進行分層測試?

谷歌采用 70/20/10 原則:70% 小型測試,20% 中型測試,10% 大型測試

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM