您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“spring怎么編寫有效的接口測試”,內容詳細,步驟清晰,細節處理妥當,希望這篇“spring怎么編寫有效的接口測試”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
測試也是分層的,如下圖所示:
在一個系統內,自動化測試一般分單元測試、模塊測試和接口測試。
單元測試
目前我的應用代碼基本都是基于spring框架面向接口這種編程模式,單元測試已被弱化。單元測試的要求基本上是單個類單個方法的測試,在我們當前模式下,編寫成本太高。當然,如果是一個工具或者一段比較內聚而又復雜的邏輯(例如算法邏輯),還是應該使用單元測試來保障邏輯的正確性。
模塊測試
在系統比較大、模塊比較多的情況下,可以建立模塊測試層,保障各模塊功能的正確性。不過當前的系統發展趨勢是微服務架構,因此模塊測試層并非十分必要,可以通過接口測試層來覆蓋。
接口測試
個人覺得準確來說應該叫入口測試,這一層,是從系統入口出發進行集成測試。應用入口通常是HSF(一個分布式RPC服務框架)服務,消息,定時任務。
作為開發,測試手段千萬條,接口測試不可少。在我們應用的接口測試有效且覆蓋完整的情況下,不僅能保障我們新功能的開發質量,還能讓我們在修改功能邏輯的時候有回歸的能力,同時這也是我們做代碼重構的前提。同時,易測性也是代碼結構合理的一個指標,如果發現一段代碼編寫測試腳本困難或者無法測試,那就說明當前代碼結構不合理需要重構。接下來,我將主要談一談接口測試的有效性。
基礎原則:
自動化:接口測試是非交互式的自動化執行,不需要人參與。
獨立性:接口測試之間不應該相互依賴。
可重復:接口測試可重復執行,不受環境影響。
接口測試遵守BCDE原則,保障接口交付質量。Border:邊界測試。Correct:正確的輸入,正確的預期輸出。Design:按照需求和設計文檔編寫測試邏輯。Error:錯誤輸入,預期輸出。
數據準備:數據準備通過系統服務進行,不能通過直接插入db方式。
可測性:對于不可測的代碼需要進行重構成合理的結構。
覆蓋性:接口測試需要覆蓋所有UC,同時代碼覆蓋率和分支覆蓋率應達到一定標準,新增代碼必須被覆蓋。
持續性:如果代碼修改導致已有接口測試執行失敗,必須修復代碼問題或者測試代碼邏輯。
時間要求:接口測試應該在項目發布之前完成,不應放到項目發布之后補充。
以上的基本原則應適用于所有層的自動化測試用例,在編寫接口測試時,除了上面這些原則,還有其他原則需要遵守,先看一張圖:
從系統角度來分析入口調用,以HSF服務為例:
外圍系統調用由我們系統提供的服務。
系統執行了一堆代碼邏輯,其中包含有分支邏輯。
系統執行過程中依賴外部HSF服務,進行了調用,并得到了返回值。
系統執行過程中依賴DB查詢或者落地了數據,依賴緩存查詢或者落地了數據。
系統執行過程中對外發送了消息。
給上游系統返回HSF執行結果。
有效接口測試的關鍵原則是要覆蓋所有入口,mock所有依賴,校驗執行過程中所留下的痕跡,總結如下:
入口覆蓋:接口測試用例必須覆蓋HSF服務入口、消息入口、定時任務入口。
依賴mock:在基本原則中,有可重復這個原則,即接口測試不能受環境依賴,需要mock掉對外依賴。但對于db依賴,不建議完全mock掉,一方面mock成本高,另外可能覆蓋不到sql和表約束邏輯。
校驗完整:有效的接口測試,應該具備完整的校驗,沒有校驗的接口測試是沒有意義的。只要執行過程中,留下的痕跡對業務有影響,都要進行完整校驗,方能保障接口測試的有效性。HSF接口返回值校驗:按照場景和接口約定進行HSF返回參數校驗。DB校驗:校驗落地數據的正確性。緩存校驗:校驗存入緩存中數據的正確性。HSF依賴入參校驗:通過mock工具獲得依賴HSF調用的入參,進行入參校驗。消息校驗:通過mock工具獲得發送的消息對象,進行消息體校驗。
在編寫測試代碼的時候,也應跟寫業務代碼一樣,考慮代碼的可讀、可擴展、可復用性。同時也可以根據系統的業務特性,在測試框架的基礎上封裝適合當前系統的測試組件,提高測試代碼編寫效率,規范測試代碼結構。
一個接口的測試代碼,大概的結構如下:
1 測試準備
依賴數據準備
很多時候,我們的測試有數據依賴,可能是配置數據,也有可能是業務數據(例如退款需要依賴支付數據)。
配置數據:可以通過定義配置文件來初始化配置。
業務數據:這類數據,禁止通過直接插入數據方式產生,而是應通過調用業務服務產生。
依賴mock
對于外部依賴,需要對被依賴的服務進行mock,避免真實調用。
接口測試入參準備
準備接口方面的入參。
2 測試執行
調用接口方法,執行業務邏輯。
3 測試校驗
返回參數校驗:校驗接口的返回參數。
DB:校驗DB落地數據。
緩存數據校驗:校驗落地到緩存中的數據。
消息校驗:校驗對外發送的消息對象。
對外HSF調用校驗:校驗對外HSF調用的入參。
1 執行效率
對于接口測試,執行效率是不得不關注的一個點,若一個接口測試執行3分鐘以上才能看到結果,會大大降低開發同學編寫接口測試的熱情。對于測試執行效率提高,建議的方案為:
最小化啟動測試上下文,例如spring boot的應用,啟動spring就可以了
使用內存數據庫,例如h3
將中間件依賴mock掉
2 測試框架選擇
對于測試框架,建議選擇基于testng,能夠提供通過配置文件做數據準備的測試框架。如果找不到合適的,可以自己基于testng進行封裝。
3 接口測試覆蓋度
場景的完整性影響著測試用例的覆蓋度,一方面需要開發同學基于業務場景的輸入和測試經驗枚舉出正常和異常情況,另一方面接口方法也有一些固定需要測試的點,例如冪等測試,邊界值測試,參數不正確測試等等。
同時也要通過覆蓋率工具查看接口未覆蓋的代碼或分支邏輯,進行針對性的場景覆蓋測試。根據我的經驗,分支完整覆蓋非常重要,特別是異常的分支。
讀到這里,這篇“spring怎么編寫有效的接口測試”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。