測試金字塔,你在哪一層?

華為雲開發者社群發表於2021-09-08
摘要:軟體質量是衡量一個軟體是否成功的重要標準,在軟體的生命週期中,自動化測試金字塔給大家提供了一種測試策略,根據專案具體的情況,優化測試活動,最終讓軟體質量得到提升。

本文分享自華為雲社群《測試金字塔,你在哪一層?》,作者:敏捷的小智 。

前言

軟體質量是衡量一個軟體是否成功的重要標準,在軟體的生命週期中,如果沒有良好的質量管控,很容易造成產品質量不滿足客戶預期,最終導致專案交付困難。軟體質量可以通過規範化的研發流程、系統的軟體測試等方式進行保障,本文我們就聊點測試相關的內容。

測試金字塔

軟體測試是伴隨著軟體開發一同誕生的,隨著軟體規模大型化,結構複雜化,軟體測試也從最初的簡單“除錯”,發展到當今的自動化測試。原始的“除錯”,在這裡就不細聊了,那自動化測試是什麼呢?自動化測試是把以人為驅動的測試行為轉化為機器執行的一種過程,自動化測試通常會藉助某些工具或者框架。雖然不能完全取代手工測試,但相比手工測試來講,自動化測試可以減少人力成本,降低重複工作,從而更快速、高效的進行測試活動。

測試金字塔,你在哪一層?

測試金字塔是一種自動化測試過程的金字塔形策略結構,用來指導軟體開發過程中,各層自動化測試的投入比例,其最早由Mike Cohn在2009年的著作《Scrum敏捷軟體開發》中提出。Mike Cohn在書中指出:測試金字塔從上到下分為三層,分別是UI測試、服務/介面測試、單元測試,越接近金字塔底部的測試活動,投入的工作量應該越多,即單元測試投入工作量最多,介面測試次之,UI測試投入最少。

測試金字塔,你在哪一層?

測試金字塔最底層——單元測試

單元測試屬於程式碼級別的測試,編寫成本低,執行速度快,能夠快速定位問題,極限程式設計中的TDD測試驅動開發很多時候都是圍繞單元測試開展。單元測試可以說是最低階別的測試活動,關於單元測試的內容也很多,在這不做過多介紹。

測試金字塔,你在哪一層?

測試金字塔中間層——介面測試

隨著微服務架構的廣泛普及,API也成為大勢所趨。因而,對API進行持續測試成為DevOps的關注點之一,如果沒有API介面測試,微服務架構的實施對於企業將會成為一場災難。

介面測試是測試系統元件間介面的一種測試,主要用於測試系統與外部其他系統之間的介面,以及系統內部各個子模組之間的介面。介面測試既可關注單個介面的引數取值和引數取值組合的合理性,也可以驗證產品功能的完整性和正確性。相對比單元測試,服務/介面測試的覆蓋範圍要大一些。

介面測試的重點如下:

  • 檢查介面引數傳遞的正確性;
  • 介面功能實現的正確性;
  • 輸出結果的正確性;
  • 對各種異常情況的容錯處理的完整性和合理性。

如何進行介面測試

Swagger是一種可生成、描述並呼叫RESTFUL風格API的框架。Swagger官網的樣例Demo——petstore(寵物商店)對外提供一系列可以對寵物資訊進行增刪改查的介面,本文使用這些介面進行介面測試。

1.準備工作

首先,通過華為雲DevCloud的雲測功能中的“測試用例”,建立介面測試的測試用例。

測試金字塔,你在哪一層?

將petstore專案的網址設為預設環境變數,這裡給他命名為“pethost”,測試用例可通過“$$petstore”的形式,直接呼叫該變數。

測試金字塔,你在哪一層?

環境變數也可以不設定,但每次測試都需要輸入petstore的域名,很麻煩,設定成環境變數可以減少工作量,雲測中輸入“$$”可以直接關聯預設的環境變數。

測試金字塔,你在哪一層?

2.建立“新增寵物資訊”的介面測試用例

petstore專案中,“新增寵物資訊”是通過post請求完成的,該請求的請求體如下所示

測試金字塔,你在哪一層?

建立“URL請求”,將請求型別設定為“POST”,請求地址為“$${pethost}/v2/pet”,在請求體中輸入上圖Json字串,請求部分設定完成。

測試金字塔,你在哪一層?

接下來,我們設計我們預期的檢查結果,期望返回值是200,即成功,如果返回其他響應碼則測試失敗。

測試金字塔,你在哪一層?

同時,還要對響應體中的某些引數做提取,便於後續業務的測試使用。在這裡我們提取相應體中category.id的值,並將他賦給區域性變數“id”。

測試金字塔,你在哪一層?

3.執行用例並檢視返回值

請求設定完成後,我們執行用例,可以看到響應碼是200,結果是成功的。如果想看到測試不成功的場景,可以試試不按照引數列表規定,使用其他引數。

測試金字塔,你在哪一層?

通過“近一次的結果”中“響應”,可以看到這次請求的返回值,返回值中提供的各類引數都可以通過上文提到的“響應提取”功能進行提取,供其他測試使用。

測試金字塔,你在哪一層?

4.建立“查詢寵物資訊”的介面測試用例

寵物資訊建立完成後,我們通過Get請求查詢寵物是否真的新增完成。

建立“URL請求”,將請求型別設定為“GET”,請求地址中,通過“$id”直接呼叫之前介面返回的id(同“$$”,“$”可以直接關聯預設的區域性變數)。

測試金字塔,你在哪一層?

響應碼設定為200,預計測試通過。

測試金字塔,你在哪一層?

5.執行用例檢視是否可以查詢到寵物資訊

執行用例後可以看到響應碼是200,和預期相符,測試成功。

測試金字塔,你在哪一層?

通過“id”查詢到的寵物資訊也和之前建立的寵物資訊一致,表示這兩個功能是OK的。

測試金字塔,你在哪一層?

6.建立“刪除寵物資訊”的介面測試用例

測試完成後,需要刪除測試資料。

建立“URL請求”,將請求型別設定為“DELETE”,同樣通過“$id”刪除對應的寵物資訊。

測試金字塔,你在哪一層?

響應碼設定為200,預計測試通過。

測試金字塔,你在哪一層?

7.刪除測試用例

執行用例後可以看到響應碼是200,和預期相符,測試成功。

測試金字塔,你在哪一層?

通過響應體也可以看出,寵物資訊刪除完成。

測試金字塔,你在哪一層?

以上就是一個簡單的介面測試的例子,體現了介面測試既可以測試單個介面的功能,也可以測試產品多個模組聯動的功能。

測試金字塔最高層——UI測試

在測試金字塔中,UI測試的覆蓋範圍廣,接近業務側,但是編寫成本高、執行速度和穩定性都會下降,問題定位也很難。所以在測試設計中,要減少介面層的測試。如果是下層測試可以覆蓋的場景和邏輯,為了提高測試的速度和節省資源,儘量放到下層去進行。

總結

軟體想要有一個好的質量,嚴謹的測試活動必不可少,自動化測試金字塔給大家提供了一種測試策略,我們要根據專案具體的情況,優化測試活動,最終讓軟體質量得到提升。

最近華為雲與高校聯合發起的開學季活動,邀請了華為專家、斬獲21offer的優秀學長,採用線上直播+賽道闖關+豐厚獎品的形式進行,旨在讓同學們瞭解華為前沿研發理念和先進技術,體驗用華為雲不同產品進行場景應用的開發,加深高校學生對企業技術應用的瞭解,讓校園學習與企業技術應用接軌,為高校學生的擇業就業進行助力賦能。

獎品多多,瞭解一下:華為雲DevCloud&AI&IoT新學期挑戰賽

測試金字塔,你在哪一層?

 

點選關注,第一時間瞭解華為雲新鮮技術~

相關文章