去哪兒 http 接口自動化測試實踐

背景

越來越多的應用基於前後端分離構建,後端提供數據接口,前端調用接口返回 json 數據渲染到 UI,這個時候保證後端接口數據正確性變的愈來愈重要,接口測試就是來解決這個問題。很多團隊,接口測試就是手動運行接口,肉眼比對接口返回的數據,這樣的操作流程效率低下,容易出錯。使用 YApi 只需要在可視化 GUI 下,配置下每個接口的入參和對 RESPONSE 斷言,即可實現對接口的自動化測試,大大提升了接口測試的效率。

準備工作

如果您還未部署 yapi 接口管理平臺,可先去示例站點試用。

在創建完項目和接口後,需要進入到測試集頁面,導入需要測試的接口。

去哪兒 http 接口自動化測試實踐

基礎概念

需要學習的基礎概念主要包含測試集、Pre-Script 、Test-Script 三方面。

測試集

在平時的開發過程中,經常遇到的一個問題是每次調試接口都需要重新填寫參數,YApi測試集能夠保存之前填寫的參數,方便下次的調試。每個的請求參數還可以通過前面已請求的接口數據讀取,或填寫mock隨機字符串,通過設置斷言腳本驗證返回數據的正確性。

去哪兒 http 接口自動化測試實踐

在測試列表可以看到每個測試用例的 key,還有 開始測試、報告等功能

點擊開始測試會按照 case 定義的參數從上往下一個一個進行測試,如果順序有問題,可以拖動調整

測試完成之後,點擊報告查看該次請求的結果

Pre-Script

去哪兒 http 接口自動化測試實踐

Pre-Script 包括請求參數處理腳本和響應數據處理腳本兩部分。通過自定義 js 腳本方式改變請求的參數和返回的 response 數據。他的使用場景如下:

1.接口請求參數需要加密及返回 response 解密

2.接口請求參數需要添加計算 token

請求參數處理腳本示例

以 jquery ajax 為例,假設當前的請求參數是

{
url: '/api/user?id=1',
method: 'POST',
headers: {
xxx: 'xxx'
},
data: {
type: 1
}
}

那麼公共變量 context 包含以下屬性:

context = {
pathname: '/api/user',
query: {
id: 1
},
requestHeader: {
xxx: 'xxx'
},
method: 'POST',
requestBody: {
type:1
}
}

假設我們需要在 url 增加一個 token 參數,可以寫如下自定義腳本:

去哪兒 http 接口自動化測試實踐

返回數據處理腳本示例

在上面的示例請求完成後,假設返回 responseBody={a:1},公共變量 context 包含以下屬性:

context = {
pathname: '/api/user',
query: {
id: 1
},
requestHeader: {
xxx: 'xxx'
},
method: 'POST',
requestBody: {
type:1
},
responseData: {
a:1
},
responseHeader: {
content-type: 'application/json'
...
}
}

假設我們需要修改響應數據 responseBody a 的值為 2,可以填寫如下自定義腳本:

去哪兒 http 接口自動化測試實踐

Test-Script (測試腳本)

去哪兒 http 接口自動化測試實踐

通過自定義腳本斷言接口參數或返回 response 數據,在接口用例頁面點擊 Test 編輯。

支持的公共變量

1.assert

assert(value)

判斷 value 是否為 truth, 例如 assert(1) 通過, assert(0) 不通過,只要 value 不是 null, 0, false等值驗證通過

assert.equal(actual, expected)

判斷 actual 是否等於 expected,例如 assert(1, 1)通過

assert.notEqual(actual, expected)

判斷 actual 是否不等於 expected

assert.deepEqual(actual, expected)

假設: actual = {a:1} 是一個對象,即便 expected = {a:1},如果使用 assert.equal 可能也是不相等的,因為在 js 引用的只是對象的一個指針,需要使用 assert.deepEqual 比較兩個對象是否相等

assert.notDeepEaual(actual, expected)

深度比較兩個對象是否不相等

2.status

http 狀態碼

3.params

http request params, 合併了 query 和 body

4.body

返回 response body

5.header

返回 response header

6.records

記錄的 http 請求信息,假設需要獲取 key 為 555 的接口參數或者響應數據,可通過 records[555].params 或 records[555].body 獲取

7.log

log(message) 函數,調試時使用,log 信息僅僅在斷言失敗後打印

示例

assert.equal(body.errcode, 0)
assert.equal(body.data.group_name, 'testGroup')
assert.equal(status, 200)

開始測試

第一步:配置參數

YApi 除了支持常量字符串外,還支持 mock 隨機字符串和變量字符串。

Mock參數

Mock 參數每次請求都會生成隨機字符串,支持 mockjs 所有佔位符

去哪兒 http 接口自動化測試實踐

變量參數

YApi 提供了強大的變量參數功能,你可以在測試的時候使用前面接口的 參數 或 返回值 作為 後面接口的參數,即使接口之間存在依賴,也可以輕鬆 一鍵測試~

格式:

$.{key}.{params|body}.{path}

例如:現有兩個接口,分別是“導航標題”和“文章列表”

去哪兒 http 接口自動化測試實踐

文章列表接口需要傳參數: 當前標題(id),而這個 id 需要通過 導航標題 的返回值獲取,這時應在 文章列表 的參數輸入框中根據前者的 key 找到對應 id。

導航標題 的參數和返回值有如下結構:

參數:

去哪兒 http 接口自動化測試實踐

返回值:

去哪兒 http 接口自動化測試實踐

則 文章列表 的參數可以如下配置:

去哪兒 http 接口自動化測試實踐

其中 [Math Processing Error].269.params 即表示 key 值為 269 用例的請求參數,$.269.body** 即表示 key 值為 269 用例的返回值。

Tips: 上下拖動測試集合的列表項可以調整測試的順序。

目前yapi中的query,body,header和pathParam的輸入參數已經支持點擊選擇功能。無需自己填寫表達式,只需在彈窗中選擇需要展示的表達式即可。 輸入選項包括常量,mock數據,在測試集合中也支持變量選擇。

具體用法:單擊編輯按鈕打開表達式生成器,點擊需要的數據創建表達式,這裡也可以實時查看錶達式結果。

第二步:開始測試

後記:

YApi 自動化測試大大簡化了接口測試數據準備,和驗證環節,目前去哪兒測試團隊已經開始使用。未來 YApi 將會持續優化自動化測試功能,希望大家提出大家寶貴的意見。


分享到:


相關文章: