接口測試

一、接口測試的概念

1.什麼是接口?

應用程序編程接口,也稱爲 API,通俗的說,就是某一個功能的實現或展示基於對另一個功能的調用,那麼調用與被調用之間的連接點就是接口。

2.什麼是接口測試?

接口測試,是測試系統組件間接口的一種測試。主要是檢查數據 的交換,傳遞和控制管理過程,以及系統之間的相互邏輯依賴關係。

3.爲什麼做接口測試?

接口測試不同與手工測試,後者檢測出的是表象,外層所暴露出的問題,而從最外層測試,無法保證全面的測試覆蓋。子模塊代碼改動,如果沒有接口測試,發現問題定位難度大,接口測試能夠更好的定位出問題出處,從底層發現BUG,精準定位BUG。

 

接口測試,正如其名,測試的主要對象是接口,是測試系統組件間接口的一種測試方法,主要用於檢測外部系統與被測系統之間以及內部各系統之間的交互點,其中會包括數據的交互、傳遞、關係等等。

以數據驅動的視角來看接口測試,接口測試就是按約定的格式(接口)給待測軟件傳入某種數據,之後檢查接口給的返回值是否正確。

 

接口實際上是無處不在的,要解決接口這個抽象的概念,首先分離兩個大概念,第一種是代碼內部所謂的接口,代碼A與代碼B在組合的時候,必然需要定義一些名稱以及參數、類型,這種在測試中一般劃分在白盒測試中,也算是集成測試階段,需要與開發有類似的代碼知識才能上手。而另一種接口,是系統與系統之間,通過網絡數據的傳遞進行交互,此類測試屬於黑盒層面,也就是看不到代碼,但可以通過各種手段將網絡數據發送到接口從而得到接口的響應信息,達到測試的目標。

只要你測試的不是單機軟件,就離不開接口,就算是網頁從服務器上讀一張圖,實際上也是通過HTTP接口地址去獲取圖片文件,然後再界面上顯示,只是這種類型的靜態文件接口沒有邏輯,確保圖片地址和文件是匹配的即可。但程序動態接口則不一樣,會涉及到各種各樣的參數,即使同一個接口,也會因爲接口傳遞的參數內容不同、用戶不同、權限不同等等出現不一樣的情況。接口、參數就是一種程序的輸入,而接口返回的信息就是一種程序的輸出,其實這也類似於在界面輸入測試用例一樣,但在接口中,用例的數量會大大提升,因爲不受界面文本輸入限制、不受選擇內容限制,甚至還有很多界面上你根本看不到的東西。

接口測試的方法有很多,比較常見的是通過一些接口測試工具來實現接口數據的傳遞,也有編寫代碼來實現數據傳遞,以上都是可以在沒有客戶端界面的情況下做的,但需要對接口的實現比較熟悉。另外其實還有別的方式,比如在網絡中將接口數據調包修改,或者以修改客戶端的方式達到某些目的,且非常真實有效,最終達到測試的目的,找出程序的錯誤。

 

4、HTTP 接口協議

HTTP全稱是超文本傳輸協議( HyperText Transfer Protocol),屬於應用層的面向對象的協議,適用於分佈式超媒體信息系統。

應用層:TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等

  傳輸層:TCP,UDP

  網絡層:IP,ICMP,OSPF,EIGRP,IGMP

  數據鏈路層:SLIP,CSLIP,PPP,MTU

 

HTTP 協議的特點 :

(1)是一個基於請求響應的模型,支持客戶/服務器模式。

(2)簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方式主要有GET,POST,PUT 等。

(3)http 允許傳送任何類型的數據對象。

(4)無連接:限制每次連接只處理一個請求,節省了傳輸時間。

(5)無狀態:協議對於事務處理沒有記憶能力。

HTTP 協議工作流程

(1)首先客戶機與服務器建立連接,點擊超鏈接,http 開始工作。

(2)建立連接後,客戶端發送請求給服務器。

(3)服務器接收請求,給予相應的響應信息,格式爲一個狀態行,包括信息的協議版本號,一個成功或錯誤的代碼,後面是MIME信息。

(4)客戶端接收服務器返回的信息,通過瀏覽器顯示。

 

HTTPS 是 HTTP 的安全版本。HTTPS 其實是有兩部分組成:HTTP + SSL / TLS,也就是在 HTTP 上⼜加了⼀層處理加密信息的模塊。

 

https://zhuanlan.zhihu.com/p/30984806 (比較有用)

https://zhuanlan.zhihu.com/p/22350260

https://zhuanlan.zhihu.com/p/30796518

 

https://zhuanlan.zhihu.com/p/31788304(什麼是接口測試)

 

二、接口測試流程

1、瞭解需求,review定義好的接口需求,瞭解新接口的應用場景,以及儘可能多的細節。2、制定測試方案,除了功能以外,還可能需要考慮性能和安全性要求。根據這些需求設計測試用例。3、測試方案和測試用例review,一般發給相關方:開發,開發組長,運維,運維組長,測試,測試組長,不斷根據大家的意見改進,直到大家都同意通過。4、在測試方案review的過程中開始準備測試數據,測試工具,或者自動化測試用例。5、執行接口測試,提交bug6、驗證修復的bug7、發送測試報告,確定是否可以上線8、歸檔所有測試產出物9、如果有自動化測試用例,加入持續集成系統。如果接口有變更,相應地變更用例。如果持續集成系統的接口自動化測試發現代碼變更的問題,提交bug。

 

 

三、接口測試工具

因爲沒有圖形界面,我們需要有某種方式把準備好的數據傳給要測的接口。這一步通常需要藉助工具。舉個例子,如果目標接口是一個http接口(可以參考w3cschool的web service教程來了解什麼是http接口),那麼在linux使用curl命令就可以去調用這個接口,把數據傳給它了。

如果在windows上做接口測試,可以使用postman這個工具。

另外,抓包工具也是接口測試必備的,linux上可以tcpdump,windows可以fiddler或者charles,抓底層的包用wireshark。

本文主要以http接口爲例子來解釋接口測試的基礎。

 

1、普通的黑盒手工web測試的流程:

 

這中間通過抓包,可以抓到我們要的數據,也就是瀏覽器給服務器傳送的輸入數據,和服務器向瀏覽器傳送的返回值。

比如,用戶登錄時,輸入數據是用戶名密碼,返回值是登錄成功後生成的一個session id和cookie,以及“登錄成功”這句提示信息。

這個就是一個典型的手工接口測試的流程:通過抓包或其他方法(比如看接口文檔)準備好輸入數據包,然後用發包的工具把數據發給服務端的接口,之後校驗其返回值。

如果不清楚某個接口需要什麼數據,可以看接口的設計文檔或者聯繫相關的開發人員,一般會提供給一個調用的例子。

可以使用jmeter或soupUI作爲測試工具,兩者都不需要具備任何代碼功底就能用。

使用python+requests+pytest/robotframework來做接口測試。如果用了python+requests,那麼性能測試方面可以用python+locust。

 

2、常用 HTTP接口調試工具

在編寫接口測試用例之前,我們首先需要找到一個可以進行接口調試的工具。我們可以選擇瀏覽器插件工具或者命令行工具。

常用的瀏覽器插件工具有 Postman,DHC (aka Dev HTTP Client):

命令行工具可以使用 curl

https://weibo.com/ttarticle/p/show?id=2313501000014217896350938141(curl用法)

 

四、接口測試用例設計

按照接口測試的基本流程,首先需要確認需求,同時仔細查看接口定義文檔,確保對被測接口有準確的認識。接下來纔是進行測試用例的設計和代碼編寫。

典型的接口文檔內容如下:

在根據接口文檔設計接口測試用例的過程中,需要注意以下幾點:

(1)確定請求的 uri、url 中的請求參數、header 中的參數,以及各參數的取值範圍。

(2)確定響應的格式、有哪幾種狀態碼、請求參數非法時對應響應的出錯信息等。

(3)尤其注意要結合業務邏輯設計用例,接口測試不能脫離業務邏輯單純的測試單個接口。

 

 

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