愈來愈多的應用基於先後端分離構建,後端提供數據接口,前端調用接口返回 json 數據渲染到 UI,這個時候保證後端接口數據正確性變的越來越重要,接口測試就是來解決這個問題。不少團隊,接口測試就是手動運行接口,肉眼比對接口返回的數據,這樣的操做流程效率低下,容易出錯。去哪兒移動架構組自研了接口管理平臺 YApi 解決這一痛點,用戶只須要在可視化 GUI 下,配置每一個接口的入參和對 RESPONSE 斷言,便可實現對接口的自動化測試,大大提高了接口測試的效率。下面開始詳細解決如何使用 yapi 接口管理平臺自動化測試接口。前端
若是您還未部署 yapi 接口管理平臺,可先去示例站點試用。jquery
在建立完項目和接口後,須要進入到測試集頁面,導入須要測試的接口。git
須要學習的基礎概念主要包含測試集、Pre-Script 、Test-Script 三方面。github
在平時的開發過程當中,常常遇到的一個問題是每次調試接口都須要從新填寫參數,YApi測試集可以保存以前填寫的參數,方便下次的調試。每一個的請求參數還能夠經過前面已請求的接口數據讀取,或填寫mock隨機字符串,經過設置斷言腳本驗證返回數據的正確性。ajax
Pre-Script 包括請求參數處理腳本和響應數據處理腳本兩部分。經過自定義 js 腳本方式改變請求的參數和返回的 response 數據。他的使用場景以下:json
以 jquery ajax 爲例,假設當前的請求參數是後端
{
url: '/api/user?id=1',
method: 'POST',
headers: {
xxx: 'xxx'
},
data: {
type: 1
}
}
複製代碼
那麼公共變量 context 包含如下屬性:api
context = {
pathname: '/api/user',
query: {
id: 1
},
requestHeader: {
xxx: 'xxx'
},
method: 'POST',
requestBody: {
type:1
}
}
複製代碼
假設咱們須要在 url 增長一個 token 參數,能夠寫以下自定義腳本:bash
在上面的示例請求完成後,假設返回 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,能夠填寫以下自定義腳本:
經過自定義腳本斷言接口參數或返回 response 數據,在接口用例頁面點擊 Test 編輯。
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)
深度比較兩個對象是否不相等
http 狀態碼
http request params, 合併了 query 和 body
返回 response body
返回 response header
記錄的 http 請求信息,假設須要獲取 key 爲 555 的接口參數或者響應數據,可經過 records[555].params 或 records[555].body 獲取
log(message) 函數,調試時使用,log 信息僅僅在斷言失敗後打印
assert.equal(body.errcode, 0)
assert.equal(body.data.group_name, 'testGroup')
assert.equal(status, 200)
複製代碼
YApi 除了支持常量字符串外,還支持 mock 隨機字符串和變量字符串。
Mock 參數每次請求都會生成隨機字符串,支持 mockjs 全部佔位符
YApi 提供了強大的變量參數功能,你能夠在測試的時候使用前面接口的 參數
或 返回值
做爲 後面接口的參數
,即便接口之間存在依賴,也能夠輕鬆 一鍵測試~
格式:
$.{key}.{params|body}.{path}
複製代碼
例如:現有兩個接口,分別是「導航標題」和「文章列表」
文章列表接口須要傳參數: 當前標題(id)
,而這個 id 須要經過 導航標題
的返回值獲取,這時應在 文章列表
的參數輸入框中根據前者的 key 找到對應 id。
導航標題
的參數和返回值有以下結構:
參數:
返回值:
則 文章列表
的參數能夠以下配置:
其中 $. 是使用 動態變量 的標誌,$.269.params 即表示 key 值爲 269 用例的請求參數,$.269.body 即表示 key 值爲 269 用例的返回值。
Tips: 上下拖動測試集合的列表項能夠調整測試的順序。
目前yapi中的query
,body
,header
和pathParam
的輸入參數已經支持點擊選擇功能。無需本身填寫表達式,只需在彈窗中選擇須要展現的表達式便可。 輸入選項包括常量
,mock數據
,在測試集合中也支持變量
選擇。 具體用法:單擊編輯按鈕打開表達式生成器,點擊須要的數據建立表達式,這裏也能夠實時查看錶達式結果。
在測試列表能夠看到每一個測試用例的 key,還有 開始測試、報告等功能 點擊開始測試會按照 case 定義的參數從上往下一個一個進行測試,若是順序有問題,能夠拖動調整 測試完成以後,點擊報告查看該次請求的結果
YApi 自動化測試大大簡化了接口測試數據準備,和驗證環節,目前去哪兒測試團隊已經開始使用。將來 YApi 將會持續優化自動化測試功能,但願你們提出你們寶貴的意見。
開源接口管理平臺 YApi 官網
Github: YApi github