不管是瀏覽器上運行的Web應用仍是移動端的H5應用,都離不開HTTP接口。Web應用一般是分爲先後臺開發的,後臺提供接口調用返回Json對象,前臺使用JS框架去加載後臺返回的Json。而H5頁面動態獲取內容的方式則是採用ajax異步請求後臺數據實時刷新,用GET/POST的HTTP請求後臺接口,再將返回的數據(通常是json或xml格式)渲染在頁面上。所以,HTTP接口功能測試是確保Web應用和H5應用頁面內容數據正確的關鍵。python
簡而言之,HTTP接口功能測試是對服務後臺一系列HTTP接口功能測試:ajax
輸入:根據接口描述構造不一樣的參數輸入值;json
輸出:json。數組
HTTP接口功能測試的相關知識瀏覽器
一、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時,必須以「/」的形式給出,一般這個工做瀏覽器自動幫咱們完成。curl
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、響應正文就是服務器返回的資源的內容。
二、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" }
]}
3、實現方法
一、使用Python語言驅動測試;
二、調用http接口採用pycurl模塊;
三、設置斷言,對比實際返回結果和預期結果的正確性;
四、首次執行測試採用半自動化的方式,即人工檢查輸出的json文件是否正確,一旦正確將封存json文件,爲後續迴歸測試的預期結果,若是發現錯誤手工修正爲預期文件。(注意不是每次測試都人工檢查該文件,只首次測試的時候才檢查)
五、增長測試套件,按照邏輯,或者說按照測試組的理解把測試用例劃分紅不一樣的部分,每一個部分就是一個test suite。
六、使用HTMLTestRunner模塊生成測試報告
4、舉例說明
以監控寶的2個接口爲例
一、 查看接口文檔
1)、用戶管理相關-列出全部用戶接口
2)、網站監控相關-建立網站監控任務
二、 編寫測試用例
1)、列出全部用戶
封裝的get請求
2)、建立網站監控任務
封裝的post請求
二、執行測試用例
1)、執行單個測試用例(列出全部用戶)
2)、執行測試集(用戶管理相關接口)
3)、建立網站監控任務同上
三、增長測試套件
四、運行測試套件生成報告
接口自動化後,重複工做(請求接口是否有效、參數校驗、返回數據校驗)均可以用自動化的方式解決,而且研發人員在提測以前能夠先進行一輪冒煙測試,根據自動化測試用例檢查結果,提高提測以前的功能質量;提測以後,測試人員再一輪冒煙測試,注重點落到返回結果對比上,這樣測試的效率會獲得很大的提高。
或許有人要問,到底提高多少呢?因爲每一個團隊不一樣,研發、測試人員磨合程度不一樣,不能一律而論,大膽邁出一步去嘗試,就會發現價值。
長按二維碼識別關注,您的支持是咱們最大的動力。
公衆號:測試夢工廠
QQ一羣:300897805