導讀:在所有的開發測試中,介面測試是必不可少的一項。有效且覆蓋完整的介面測試,不僅能保障新功能的開發質量,還能讓開發在修改功能邏輯的時候有迴歸的能力,同時也是能優雅地進行重構的前提。編寫介面測試要遵守哪些原則?測試程式碼的結構應該是什麼樣的?介面測試有哪些實踐技巧?本文分享作者在介面測試上的實踐總結。
測試工程師是一個高技術含量的崗位,但現在不少人誤以為測試工程師就是“點工”,拿到軟體“點點點”,就可以完成測試了,沒啥技術含量,而一些測試工程師錯誤的工作方法也滋長了這種誤解。
1、什麼是介面測試
介面測試是測試系統元件間介面的一種測試。介面測試主要用於檢測外部系統與系統之間以及內部各個子系統之間的互動點。測試的重點是要檢查資料的交換,傳遞和控制管理過程,以及系統間的相互邏輯依賴關係等。
2、為什麼要做介面測試
- 網際網路的快速發展,公司內部系統或與外部系統的關聯越來越多,一個業務流程關聯多個後端系統,它們的關聯都是基於介面來實現,介面測試可以將複雜的系統關聯進行簡化,只要做好每個介面的測試就能夠較好的保證系統質量。
- 單個系統的變更,是否會影響到關聯業務系統,比較難用常規的測試方面來覆蓋相關的應用系統(例如使用此介面的外部 系統有N個,不可能每個做功能相容性測試),但可以通過對介面功能的覆蓋來驗證是否影響它人對介面的呼叫。
- 介面功能比較單一,能夠比較好的進行測試覆蓋,也相對容易實現自動化持續整合,,可以減少人工迴歸成本與時間,縮短測試周期。
- 介面相對於介面功能,會更底層一些,測試覆蓋會更容易(如業務在呼叫介面時做了判斷,當不滿足條件時連結就不顯示,此時從介面無法測試相關功能是否做好判斷,通過介面就比較容易)
3、介面測試的範圍
- a)業務功能(包括正常、異常場景是否實現)
- b)業務規則(覆蓋度是否全面)
- c)引數驗證(邊界、業務規則是否達到要求)
- d)異常場景(重複提交、併發提交、事務中斷、多機環境、大資料量測試)
- e)效能測試(響應時間、吞吐量、併發數、資源要求)
- f)安全測試(許可權驗證、SQL隱碼攻擊等)
4、介面測試的重點
- a)檢查介面返回的資料是否與預期結果一致。
- b)檢查介面的容錯性,假如傳遞資料的型別錯誤時是否可以處理。
- c)介面引數的邊界值。例如,傳遞的引數足夠大或為負數時,介面是否可以正常處理。
- d)介面的效能,http請求介面大多與後端執行的SQL語句效能、演算法等比較相關。
- e)介面的安全性,外部呼叫的介面尤為重要。
5. 測試原則
基礎原則:
- 自動化:介面測試是非互動式的自動化執行,不需要人蔘與。
- 獨立性:介面測試之間不應該相互依賴。
- 可重複:介面測試可重複執行,不受環境影響。
- 介面測試遵守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工具獲得傳送的訊息物件,進行訊息體校驗。
6、介面測試常用工具
1、JMeter
JMeter是Apache組織開發的基於Java的壓力測試工具,能夠將請求轉換為指令碼來實現,並允許使用正規表示式建立斷言來對請求返回結果進行判斷,具備介面測試功能和效能的能力。
2、Robot Framework
Robot Framework是一款Python編寫的功能自動化測試框架。具備良好的可擴充套件性,支援關鍵字驅動,可以同時測試多種型別的客戶端或者介面,可以進行分散式測試執行。常用於輪次很多的驗收測試和驗收測試驅動開發(ATDD)。
3、SOAPUI
SoapUI是一個完整的自動化測試解決方案。支援SOAP和REST的Web服務,JMS企業訊息層,資料庫,豐富的網際網路應用,等等。而在SoapUI,你從它的直觀和強大的使用者介面這一切。對於自動化程度較高,SoapUI還提供了命令列工具,讓您執行的功能/負載測試和幾乎所有的任務排程程式,或作為您的構建過程中的一個組成部分MockServices集。
4、PostMan
Postman是一款功能強大的網頁除錯與傳送網頁HTTP請求的Chrome外掛,具備Fiddler、httpwatch之類的工具除錯請求的功能,同時具備介面管理功能,官網提升指令碼儲存同步功能,支援介面匯入匯出。
如果你覺得文章對你有用,歡迎 點贊、轉發、關注、留言。