摘要:軟件質量是衡量一個軟件是否成功的重要標准,在軟件的生命周期中,自動化測試金字塔給大家提供了一種測試策略,根據項目具體的情況,優化測試活動,最終讓軟件質量得到提升。
本文分享自華為雲社區《測試金字塔,你在哪一層?》,作者:敏捷的小智 。
前言
軟件質量是衡量一個軟件是否成功的重要標准,在軟件的生命周期中,如果沒有良好的質量管控,很容易造成產品質量不滿足客戶預期,最終導致項目交付困難。軟件質量可以通過規范化的研發流程、系統的軟件測試等方式進行保障,本文我們就聊點測試相關的內容。
測試金字塔
軟件測試是伴隨着軟件開發一同誕生的,隨着軟件規模大型化,結構復雜化,軟件測試也從最初的簡單“調試”,發展到當今的自動化測試。原始的“調試”,在這里就不細聊了,那自動化測試是什么呢?自動化測試是把以人為驅動的測試行為轉化為機器執行的一種過程,自動化測試通常會借助某些工具或者框架。雖然不能完全取代手工測試,但相比手工測試來講,自動化測試可以減少人力成本,降低重復工作,從而更快速、高效的進行測試活動。
測試金字塔是一種自動化測試過程的金字塔形策略結構,用來指導軟件開發過程中,各層自動化測試的投入比例,其最早由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新學期挑戰賽