去哪兒 Api 自動化測試實踐
背景
越來越多的應用基於前後端分離構建,後端提供數據介面,前端調用介面返回 json 數據渲染到 UI,這個時候保證後端介面數據正確性變的愈來愈重要,介面測試就是來解決這個問題。很多團隊,介面測試就是手動運行介面,肉眼比對介面返回的數據,這樣的操作流程效率低下,容易出錯。去哪兒移動架構組自研了介面管理平台 YApi 解決這一痛點,用戶只需要在可視化 GUI 下,配置每個介面的入參和對 RESPONSE 斷言,即可實現對介面的自動化測試,大大提升了介面測試的效率。下面開始詳細解決如何使用 yapi 介面管理平台自動化測試介面。
準備工作
如果您還未部署 yapi 介面管理平台,可先去示例站點試用。
在創建完項目和介面後,需要進入到測試集頁面,導入需要測試的介面。
基礎概念
需要學習的基礎概念主要包含測試集、Pre-Script 、Test-Script 三方面。
測試集
在平時的開發過程中,經常遇到的一個問題是每次調試介面都需要重新填寫參數,YApi測試集能夠保存之前填寫的參數,方便下次的調試。每個的請求參數還可以通過前面已請求的介面數據讀取,或填寫mock隨機字元串,通過設置斷言腳本驗證返回數據的正確性。
Pre-Script
Pre-Script 包括請求參數處理腳本和響應數據處理腳本兩部分。通過自定義 js 腳本方式改變請求的參數和返回的 response 數據。他的使用場景如下:
- 介面請求參數需要加密及返回 response 解密
- 介面請求參數需要添加計算 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 參數,可以寫如下自定義腳本:
返回數據處理腳本示例
在上面的示例請求完成後,假設返回 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,可以填寫如下自定義腳本:
Test-Script (測試腳本)
通過自定義腳本斷言介面參數或返回 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 所有佔位符
變數參數
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
推薦閱讀:
※【免費直播】後端實戰:搭建一個簡易Flask Web伺服器
※[譯] 將一個舊的大型項目遷移到 Python 3
TAG:後端技術 |