如何進行有效的接口測試?
導讀:在所有的開發(fā)測試中,接口測試是必不可少的一項。有效且覆蓋完整的接口測試,不僅能保障新功能的開發(fā)質(zhì)量,還能讓開發(fā)在修改功能邏輯的時候有回歸的能力,同時也是能優(yōu)雅地進行重構(gòu)的前提。編寫接口測試要遵守哪些原則?測試代碼的結(jié)構(gòu)應該是什么樣的?接口測試有哪些實踐技巧?本文分享作者在接口測試上的實踐總結(jié)。
1
什么是接口測試
接口測試是測試系統(tǒng)組件間接口的一種測試。接口測試主要用于檢測外部系統(tǒng)與系統(tǒng)之間以及內(nèi)部各個子系統(tǒng)之間的交互點。測試的重點是要檢查數(shù)據(jù)的交換,傳遞和控制管理過程,以及系統(tǒng)間的相互邏輯依賴關(guān)系等
2
為什么要做接口測試
a)互聯(lián)網(wǎng)的快速發(fā)展,公司內(nèi)部系統(tǒng)或與外部系統(tǒng)的關(guān)聯(lián)越來越多,一個業(yè)務流程關(guān)聯(lián)多個后端系統(tǒng),它們的關(guān)聯(lián)都是基于接口來實現(xiàn),接口測試可以將復雜的系統(tǒng)關(guān)聯(lián)進行簡化,只要做好每個接口的測試就能夠較好的保證系統(tǒng)質(zhì)量。
b)單個系統(tǒng)的變更,是否會影響到關(guān)聯(lián)業(yè)務系統(tǒng),比較難用常規(guī)的測試方面來覆蓋相關(guān)的應用系統(tǒng)(例如使用此接口的外部 系統(tǒng)有N個,不可能每個做功能兼容性測試),但可以通過對接口功能的覆蓋來驗證是否影響它人對接口的調(diào)用。
c)接口功能比較單一,能夠比較好的進行測試覆蓋,也相對容易實現(xiàn)自動化持續(xù)集成,,可以減少人工回歸成本與時間,縮短測試周期。
d)接口相對于界面功能,會更底層一些,測試覆蓋會更容易(如業(yè)務在調(diào)用接口時做了判斷,當不滿足條件時鏈接就不顯示,此時從界面無法測試相關(guān)功能是否做好判斷,通過接口就比較容易)
3
接口測試的范圍
a)業(yè)務功能(包括正常、異常場景是否實現(xiàn))
b)業(yè)務規(guī)則(覆蓋度是否全面)
c)參數(shù)驗證(邊界、業(yè)務規(guī)則是否達到要求)
d)異常場景(重復提交、并發(fā)提交、事務中斷、多機環(huán)境、大數(shù)據(jù)量測試)
e)性能測試(響應時間、吞吐量、并發(fā)數(shù)、資源要求)
f)安全測試(權(quán)限驗證、SQL注入等)
4
接口測試的重點
a)檢查接口返回的數(shù)據(jù)是否與預期結(jié)果一致。
b)檢查接口的容錯性,假如傳遞數(shù)據(jù)的類型錯誤時是否可以處理。
c)接口參數(shù)的邊界值。例如,傳遞的參數(shù)足夠大或為負數(shù)時,接口是否可以正常處理。
d)接口的性能,http請求接口大多與后端執(zhí)行的SQL語句性能、算法等比較相關(guān)。
e)接口的安全性,外部調(diào)用的接口尤為重要。
5
測試原則
?自動化:接口測試是非交互式的自動化執(zhí)行,不需要人參與。
?獨立性:接口測試之間不應該相互依賴。
?可重復:接口測試可重復執(zhí)行,不受環(huán)境影響。
?接口測試遵守BCDE原則,保障接口交付質(zhì)量。
Border:邊界測試。
Correct:正確的輸入,正確的預期輸出。
Design:按照需求和設(shè)計文檔編寫測試邏輯。
Error:錯誤輸入,預期輸出。
?數(shù)據(jù)準備:數(shù)據(jù)準備通過系統(tǒng)服務進行,不能通過直接插入db方式。
?可測性:對于不可測的代碼需要進行重構(gòu)成合理的結(jié)構(gòu)。
?覆蓋性:接口測試需要覆蓋所有UC,同時代碼覆蓋率和分支覆蓋率應達到一定標準,新增代碼必須被覆蓋。
?持續(xù)性:如果代碼修改導致已有接口測試執(zhí)行失敗,必須修復代碼問題或者測試代碼邏輯。
?時間要求:接口測試應該在項目發(fā)布之前完成,不應放到項目發(fā)布之后補充。

?外圍系統(tǒng)調(diào)用由我們系統(tǒng)提供的服務。
?系統(tǒng)執(zhí)行了一堆代碼邏輯,其中包含有分支邏輯。
?系統(tǒng)執(zhí)行過程中依賴外部HSF服務,進行了調(diào)用,并得到了返回值。
?系統(tǒng)執(zhí)行過程中依賴DB查詢或者落地了數(shù)據(jù),依賴緩存查詢或者落地了數(shù)據(jù)。
?系統(tǒng)執(zhí)行過程中對外發(fā)送了消息。
?給上游系統(tǒng)返回HSF執(zhí)行結(jié)果。
?入口覆蓋:接口測試用例必須覆蓋HSF服務入口、消息入口、定時任務入口。
?依賴mock:在基本原則中,有可重復這個原則,即接口測試不能受環(huán)境依賴,需要mock掉對外依賴。但對于db依賴,不建議完全mock掉,一方面mock成本高,另外可能覆蓋不到sql和表約束邏輯。
?校驗完整:有效的接口測試,應該具備完整的校驗,沒有校驗的接口測試是沒有意義的。只要執(zhí)行過程中,留下的痕跡對業(yè)務有影響,都要進行完整校驗,方能保障接口測試的有效性。
HSF接口返回值校驗:按照場景和接口約定進行HSF返回參數(shù)校驗。
DB校驗:校驗落地數(shù)據(jù)的正確性。
緩存校驗:校驗存入緩存中數(shù)據(jù)的正確性。
HSF依賴入?yún)⑿r灒和ㄟ^mock工具獲得依賴HSF調(diào)用的入?yún)ⅲM行入?yún)⑿r灐?/span>
消息校驗:通過mock工具獲得發(fā)送的消息對象,進行消息體校驗。
6
接口測試常用工具
1、JMeter
JMeter是Apache組織開發(fā)的基于Java的壓力測試工具,能夠?qū)⒄埱筠D(zhuǎn)換為腳本來實現(xiàn),并允許使用正則表達式創(chuàng)建斷言來對請求返回結(jié)果進行判斷,具備接口測試功能和性能的能力。
2、SOAPUI
SoapUI是一個完整的自動化測試解決方案。支持SOAP和REST的Web服務,JMS企業(yè)消息層,數(shù)據(jù)庫,豐富的互聯(lián)網(wǎng)應用,等等。而在SoapUI,你從它的直觀和強大的用戶界面這一切。對于自動化程度較高,SoapUI還提供了命令行工具,讓您運行的功能/負載測試和幾乎所有的任務調(diào)度程序,或作為您的構(gòu)建過程中的一個組成部分MockServices集。
3、PostMan
Postman是一款功能強大的網(wǎng)頁調(diào)試與發(fā)送網(wǎng)頁HTTP請求的Chrome插件,具備Fiddler\httpwatch之類的工具調(diào)試請求的功能,同時具備接口管理功能,官網(wǎng)提升腳本保存同步功能,支持接口導入導出
4、Autotestplat
體驗中心:http://www.autotestplat.com/home/
源碼:https://github.com/testdevhome/Autotestplat
-------- THE END --------
