什麼是接口測試?用例設計

接口測試是測試系統組件間接口的一種測試,主要用於測試系統與外部其他系統之間的接口,以及系統內部各個子模塊之間的接口。測試的重點是要檢查接口參數傳遞的正確性,接口功能實現的正確性,輸出結果的正確性,以及對各種異常情況的容錯處理的完整性和合理性。針對軟件接口的分類一般有如下幾種情況:

1)系統與系統之間的調用,如微信向用戶提供統一的對外接口,程序員調用接口完成基於微信的小程序等;

2)同一系統內部上層服務對下層服務的調用,如一個軟件程序一般分爲表示層,業務層和數據層,表示層調用業務層的接口來完成自己的工作,而業務層又會調用數據層的接口來實現相應的業務等。

其以保證系統的正確和穩定爲核心,重要性主要體現爲以下幾個方面:

(1)能夠提早發現 bug,符合質量控制前移的理念。

(2)接口測試低成本高效益,因爲接口測試可以自動化並且是持續集成的。

(3)接口測試從用戶的角度對系統接口進行全面檢測。實際項目中,接口測試會覆蓋一定程度的業務邏輯。

接口測試的用例設計

 

接口測試的用例設計與單元測試有相似之處。都需要用到如:邊界值法,等價類法等基本測試方法。

首先,設計接口測試用例的出發點是要驗證接口實現的功能與性能指標與接口設計文檔的一致性,同時測試接口具有良好的容錯機制,能在接收到各種異常輸入數據時做到:返回對錯誤定位具有良好參考意義的錯誤碼,屏蔽底層錯誤信息,同時接口測試用例需要暴露接口代碼更多的代碼缺陷,以這個出發點爲導向。

其次,選擇合適的測試對象。對一個系統做接口測試,識別出合理的測試對象才能保證接口測試達到預期效果,甚至能達到事半功倍的效果。一個系統可能有很多的層次結構,也就有了不同層級的許多接口,如果對每個接口分別進行測試,時間和人力消耗較大,且用例數量大,用例的維護成本很大。分析出系統的關鍵模塊和核心接口,並對其進行完整的測試,能以最小的測試投入,達到最好的測試效果。接口測試用例的內容應該包括:

輸入參數組合、預期結果、實際運行結果以及備註的其他相關信息,如:測試功能點說明,測試環境說明等。其中,預期結果包括接口返回值以及接口的輸出參數的內容。輸入參數的組合應遵循等價類法和邊界值法等常用用例設計方法,以最少的用例數量覆蓋所有典型參數組合,做到每條用例覆蓋不同的測試點,且每條用例都不可被取代。另外,接口測試用例設計時,需要注意的是以下幾點:

(1)每一條用例需要有完善的初始化操作和結束操作。在每條用例開始時,由於不確定上一條用例的執行結果對測試環境的影響,因此需要把涉及到此條用例的相關數據進行初始化,比如:測試創建文件的接口,需要把已存在的文件全部刪除,然後在用例中創建相應數量的文件,才能準確的在驗證點中寫明,調用創建文件接口以後,設備上存在幾個文件,如果不進行初始化操作,有可能上一條用例產生的文件依然存在,那驗證點中寫明的文件個數就與實際情況不符,該條用例運行結果就是失敗,但這個結果實際上是因爲沒有進行用例數據初始化造成的。同樣接口的結束操作也是爲了儘可能不影響後續用例的測試環境和執行結果,比如:該條用例創建的文件夾和文件,分配的內存空間等等,都需要在用例執行結束時將其刪除或釋放空間。我們知道,不管是內存,還是磁盤空間或者是其他資源都不是無限的,如果不在使用完畢後及時釋放,就會出現意想不到的測試結果,比如相關資源被耗盡導致接口調用失敗,文件數達到上限,內存被耗盡等,尤其是在 API 接口的性能測試和穩定性測試中出現此類問題,會嚴重影響測試結果的正確性,由於需要排查到底是接口本身的 bug還是測試腳本或用例的 bug 引發的不通過的測試結果,增大了測試難度,也增加了測試的時間成本。

(2)接口的初始化操作和結束操作通常是通過調用其他接口來完成的,部分初始化操作和結束操作的接口調用時,不用判斷其接口調用返回值就可以直接往下執行。原因有兩點,一是用於初始化和結束操作的接口往往是比較簡單的或是基礎性的接口,這類接口往往是最先被測試並已通過測試的,因此我們假定這些接口都是被正確實現了,不需要通過判定其返回值來確認該操作是否成功,二是此類接口的調用結果往往既可能成功也可能失敗,但就算失敗了,也不影響接口測試本身,因此不需要判定其返回值。舉個例子,如果我在調用創建文件接口前,爲了初始化測試環境調用了刪除文件接口,那麼它的執行結果有兩個,成功或失敗。如果執行成功,則證明之前的測試環境中殘留有其他用例創建的文件,刪除操作有效,如果執行失敗,則確認了該測試環境中已無影響測試的其他數據,可以順利進行下一步接口調用,因此無論初始化接口調用結果爲成功或失敗,都確保了測試環境與預期一致,不需要對初始化接口進行調用結果判斷。不需要對結束清理接口進行結果判斷的原因類似,被測接口創建文件的執行結果可能爲成功或失敗,兩種結果會導致測試環境中數據的不同變化,因此統一調用刪除文件操作並不判斷其調用返回值是簡單有效的清理數據的方法。

因爲接口測試的依據往往是需求規格說明書等軟件設計文檔,測試手段是把接口內的程序邏輯看作一個黑盒,只根據接口定義來編寫測試代碼,相當於把一個接口當作一個函數來進行測試,爲了確保測試的覆蓋率,可能會使用到單元測試的用例設計方法。具體的測試用例設計描述如下:

(1)正常用例的設計方法。

具體是指根據該接口實現的功能分析出該接口的正常用例包括哪幾種輸入參數的組合,從而在用例中構造相應的參數組合來覆蓋所有的正常分支。輸入參數分爲兩種類型,一種是可以直接賦值的,這種參數直接賦值即可,另一種參數是其他接口調用的輸出參數,無法直接給出,這種參數就需要在調用被測接口前先調用其他接口,將其輸出參數作爲被測接口所需要的輸入參數傳入,或者事先將所需要的參數數據寫入文件中,通過讀取文件的方式獲取輸入參數的數據。對接口輸入參數的組合,一是需要根據自然邏輯進行排列組合,排除無效的組合,以及將可以劃分等價類的組合進行合併同類項,控制用例總數,避免冗餘重複的用例耗費測試資源。

同時還應從業務上分析有沒有特殊的組合是沒有考慮到的,此類用例往往不止涉及單一接口,而是涉及到根據某個特定業務流程而產生的接口調用流程,通過接口調用的方式模擬關鍵業務流程,可以在不用搭建輔助測試環境的情況下單純的測試被測接口,去除測試環境複雜性對測試結果的影響,極大提升測試效率。比如,要測試該接口涉及到的某個特定關鍵業務流程,有兩種方式覆蓋測試,第一種方式是搭建真實的測試環境,將該業務流程涉及到的所有模塊,設備,軟件全部準備到位,然後進行業務流程測試,此種測試的優點是最大程度還原了用戶真實業務使用場景,缺點是出現異常極難定位問題原因到底是出在被測接口上,還是其他陪測設備或軟件上,或者是幾者之間的銜接出了問題。第二種方式則是剛纔提到的通過調用接口模擬業務流程來覆蓋業務測試的方式,這種方式不需要額外搭建測試環境,只需要通過編寫腳本的方式進行接口調用,來測試業務流程即可,雖然會花費一些人力成本編寫腳本代碼,但測試結果直觀,出現問題後便於定位解決。

還有一種情況會明顯體現出這種業務測試方法的優勢,就是不同型號的設備或軟件都有類似業務流程,測試該接口只需保證接口的業務流程測試通過,就可判斷如果實際業務流程出問題,多半是出在其他產品或者產品之間的銜接上,錯誤定位成本可控。一個完整的用例,除了輸入參數的組合,還包括接口執行結果的預期值,預期值也包括兩部分,一個是接口調用本身的返回值,該返回值反映了該接口調用結果是成功還是失敗,一般來說,結果爲0表示執行成功,非0則表示執行失敗。非 0 的值一般是事先定義好的錯誤碼,提示接口調用失敗的原因,便於用戶進行故障診斷。大部分接口的參數除了輸入參數外,還包括輸出參數,對於正常用例的輸出參數也需要在用例中明確寫出預期值,作爲用例是否成功執行的依據。

(2)異常用例的設計方法。

異常用例的設計一般採用以下方法。選取一條正常用例的數據作爲基礎數據,然後遍歷所有的輸入參數,針對每一個輸入參數,分別使用等價類法,邊界值法等用例設計方法枚舉出該參數的所有異常值,該用例除了該參數爲異常外,其餘參數均保持正常值不變,以保證測試結果僅由異常的那一個參數導致。當所有輸入參數都使用上述方法設計了對應的異常用例之後,進一步補充不方便在用例文件中輸入的異常參數到測試腳本中,通過 switch 分支判斷,在測試腳本中將無法通過文件讀取的異常輸入值(如:錯誤指針等),直接賦值給接口的輸入參數,測試某些指針類型的數據錯誤是否被及時捕獲並返回正確無歧義的錯誤碼。

異常用例的設計需要注意的是以下幾點:

首先,接口應在任何時候都返回錯誤碼,而不能存在未經處理,直接導致調用接口的程序異常退出,或者將底層錯誤信息直接返回給上一層調用程序。調用程序異常退出會給用戶非常不好的用戶體驗,同時,無法進行故障診斷和錯誤定位,而未經處理的底層錯誤信息直接返回給調用程序,有可能將不應被用戶知曉的數據信息返回給用戶,比如數據庫相關信息,造成可能被攻擊的漏洞或安全隱患。

其次,錯誤碼的準確性很重要。錯誤碼的準確性對接口調用失敗原因的定位有非常重要的意義,將極大降低後續維護成本,錯誤碼的設置應當準確,無歧義,一種錯誤類型一個錯誤碼,儘量將錯誤碼編得更細,更有利於錯誤排查。比如:參數長度錯誤和參數類型錯誤應當爲不同的錯誤碼,而不應該是統一的參數錯誤的錯誤碼。同時,錯誤碼應當在接口設計文檔中有明確定義,並且在不同接口中保持一致。

一個很好的測試用例設計過程應該是建立在前期深入的需求分析和文檔設計的基礎之上。需求分析得越深入全面、文檔描述越詳細清晰,則設計的接口測試用例就會越全面,越能暴露出接口的缺陷,從而提供出高質量的服務接口。並且在後續接口維護過程中,有詳盡的接口設計文檔作爲支撐,也可以降低維護成本。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章