HTTP接口功能自動化測試入門


無論是瀏覽器上運行的Web應用還是移動端的H5應用,都離不開HTTP接口。Web應用通常是分為前后台開發的,后台提供接口調用返回Json對象,前台使用JS框架去加載后台返回的Json。而H5頁面動態獲取內容的方式則是采用ajax異步請求后台數據實時刷新,用GET/POST的HTTP請求后台接口,再將返回的數據(一般是json或xml格式)渲染在頁面上。因此,HTTP接口功能測試是確保Web應用和H5應用頁面內容數據正確的關鍵。

簡而言之,HTTP接口功能測試是對服務后台一系列HTTP接口功能測試:

輸入:根據接口描述構造不同的參數輸入值;

輸出:json。

HTTP接口功能測試的相關知識

1、http相關知識

1)、HTTP協議的URL

HTTP(超文本傳輸協議)是一個基於請求與響應模式的、無狀態的、應用層的協議,常基於TCP的連接方式,HTTP1.1版本中給出一種持續連接的機制,絕大多數的Web開發,都是構建在HTTP協議之上的Web應用。

HTTP URL (URL是一種特殊類型的URI,包含了用於查找某個資源的足夠的信息)的格式如下:http://host[:port][abs_path],其中http表示要通過HTTP協議來定位網絡資源;host表示合法的Internet主機域名或者IP地址;port指定一個端口號,為空則使用缺省端口80;abs_path指定請求資源的URI;如果URL中沒有給出abs_path,那么當它作為請求URI時,必須以“/”的形式給出,通常這個工作瀏覽器自動幫我們完成。

eg.: a、輸入:www.guet.edu.cn瀏覽器自動轉換成:http://www.guet.edu.cn/

 b、http://192.168.0.116:8080/index.jsp 

2)、HTTP協議的請求

http請求由三部分組成,分別是:請求行、消息報頭、請求正文.

請求行以一個方法符號開頭,以空格分開,后面跟着請求的URI和協議的版本,格式如下:Method Request-URI HTTP-Version CRLF,其中 Method表示請求方法;Request-URI是一個統一資源標識符;HTTP-Version表示請求的HTTP協議版本;CRLF表示回車和換行(除了作為結尾的CRLF外,不允許出現單獨的CR或LF字符)。請求方法(所有方法全為大寫)有多種,各個方法的解釋如下:

GET:請求獲取Request-URI所標識的資源;

POST:在Request-URI所標識的資源后附加新的數據;

HEAD:請求獲取由Request-URI所標識的資源的響應消息報頭;

PUT:請求服務器存儲一個資源,並用Request-URI作為其標識;

DELETE:請求服務器刪除Request-URI所標識的資源;

TRACE:請求服務器回送收到的請求信息,主要用於測試或診斷;

OPTIONS:請求查詢服務器的性能,或者查詢與資源相關的選項和需求應用;

PATCH:實體中包含一個表,表中說明與該URI所表示的原內容的區別;

MOVE:請求服務器將指定的頁面移至另一個網絡地址;

COPY:請求服務器將指定的頁面拷貝至另一個網絡地址;

LINK:請求服務器建立鏈接關系;

UNLINK:斷開鏈接關系;

WRAPPED:允許客戶端發送經過封裝的請求;

Extension-mothed:在不改動協議的前提下,可增加另外的方法。

3)、HTTP協議的響應

    在接收和解釋請求消息后,服務器返回一個HTTP響應消息,HTTP響應也是由三個部分組成,分別是:狀態行、消息報頭、響應正文。

a、狀態行格式如下:HTTP-Version Status-Code Reason-Phrase CRLF其中,HTTP-Version表示服務器HTTP協議的版本;Status-Code表示服務器發回的響應狀態代碼;Reason-Phrase表示狀態代碼的文本描述。狀態代碼有三位數字組成,第一個數字定義了響應的類別,且有五種可能取值:

1xx:指示信息–表示請求已接收,繼續處理;

2xx:成功–表示請求已被成功接收、理解、接受;

3xx:重定向–要完成請求必須進行更進一步的操作;

4xx:客戶端錯誤–請求有語法錯誤或請求無法實現;

5xx:服務器端錯誤–服務器未能實現合法的請求;

b、響應正文就是服務器返回的資源的內容。

2、JSON

  JSON(JavascriptObjectNotation)是一種輕量級的數據交換語言,以文字為基礎,且易於讓人閱讀。JSON建構有兩種結構:

1)、”名稱/值”對的集合(A collection of name/value pairs)。不同的語言中,它被理解為對象(object),記錄(record),結構(struct),字典(dictionary),哈希表(hash table),有鍵列表(keyed list),或者關聯數組(associative array)。

   2)、值的有序列表(An ordered list of values)。在大部分語言中,它被理解為數組(array)。

eg.:

a、表示名稱 / 值對

{ "firstName": "Brett" }

b、表示數組

{ "people": [

{ "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },

{ "firstName": "Jason", "lastName":"Hunter", "email": "bbbb"},

{ "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }

]}

三、實現方法

1、使用Python語言驅動測試;

2、調用http接口采用pycurl模塊;

3、設置斷言,對比實際返回結果和預期結果的正確性;

4、首次執行測試采用半自動化的方式,即人工檢查輸出的json文件是否正確,一旦正確將封存json文件,為后續回歸測試的預期結果,如果發現錯誤手工修正為預期文件。(注意不是每次測試都人工檢查該文件,只首次測試的時候才檢查)

5、增加測試套件,按照邏輯,或者說按照測試組的理解把測試用例划分成不同的部分,每個部分就是一個test suite。

6、使用HTMLTestRunner模塊生成測試報告

四、舉例說明

以監控寶的2個接口為例

1、 查看接口文檔

1)、用戶管理相關-列出所有用戶接口

 

 

2)、網站監控相關-創建網站監控任務

 

 

 

 

 

 

2、 編寫測試用例

1)、列出所有用戶

 

 

封裝的get請求

 

2)、創建網站監控任務

 

 

封裝的post請求

 

2、執行測試用例

1)、執行單個測試用例(列出所有用戶)

 

 

2)、執行測試集(用戶管理相關接口)

 

3)、創建網站監控任務同上

3、增加測試套件

  

4、運行測試套件生成報告

 

接口自動化后,重復工作(請求接口是否有效、參數校驗、返回數據校驗)都可以用自動化的方式解決,並且研發人員在提測之前可以先進行一輪冒煙測試,根據自動化測試用例檢查結果,提升提測之前的功能質量;提測之后,測試人員再一輪冒煙測試,注重點落到返回結果對比上,這樣測試的效率會得到很大的提升。

或許有人要問,到底提升多少呢?由於每個團隊不同,研發、測試人員磨合程度不同,不能一概而論,大膽邁出一步去嘗試,就會發現價值。

 

 


        長按二維碼識別關注,您的支持是我們最大的動力。        

        公眾號:測試夢工廠

        QQ一群:300897805

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM