yapi調研
2021-01-13
目錄
1 yapi ER圖
2 數據管理
2.1 修改接口
2.2 同一接口處理邏輯
3 Mock 優先級說明
3.1 mock期望
3.2 自定義 Mock 腳本
3.3 全局mock
3.4 普通mock
4 自動化
4.1 參數化&變量傳遞
4.2 響應校驗
0 簡介
YApi 是高效、易用、功能強大的 api 管理平台,旨在為開發、產品、測試人員提供更優雅的接口管理服務。
特性
- 基於 Json5 和 Mockjs 定義接口返回數據的結構和文檔,效率提升多倍
- 扁平化權限設計,即保證了大型企業級項目的管理,又保證了易用性
- 類似 postman 的接口調試
- 自動化測試, 支持對 Response 斷言
- MockServer 除支持普通的隨機 mock 外,還增加了 Mock 期望功能,根據設置的請求過濾規則,返回期望數據
- 支持 postman, har, swagger 數據導入
- 免費開源,內網部署,信息再也不怕泄露了
1 yapi ER圖
2 數據管理
2.1 修改接口
備注:
同一接口:按2.2章節處理方式,原先的用例不會刪除,還能對對應上接口,見下圖
不同接口:按新接口處理方式,原先導入的不刪除。
2.2 同一接口處理邏輯
只對接口做請求和響應報文(包括其中字段或報文對象)進行修改
只要影響接口表 interface表 db.getCollection('interface').find({"title":"根據id更新用戶的接口"})
- 普通模式:不導入已存在的接口,即使請求,響應內容不一樣
無修改,除了"edit_uid" : 0, 這個是user id
- 智能合並:
"type" : "var", 變成 "type" : "static",
請求相應報文被覆蓋
add_time沒有改變
up_time有改變
- 完全覆蓋:
同智能合並
3 Mock 優先級說明
請求 Mock 數據時,規則匹配優先級:Mock 期望 > 自定義 Mock 腳本 > 項目全局 mock 腳本 > 普通 Mock。
如果前面匹配到 Mock 數據,后面 Mock 則不返回。
3.1 mock期望
導航: 接口-》接口列表-》具體接口-》高級mock-》添加期望
注:參數過濾不支持正則表達式
注:mock地址 在設置->項目地址->mock地址獲得
3.2 自定義 Mock 腳本
在前端開發階段,對於某些接口,業務相對復雜,而 UI 端也需要根據接口返回的不同內容去做相應的處理。
YApi 提供了寫JS 腳本方式處理這一問題,可以根據用戶請求的參數修改返回內容。
全局變量
請求
- header 請求的 HTTP 頭
- params 請求參數,包括 Body、Query 中所有參數
- cookie 請求帶的 Cookies
響應
- mockJson 接口定義的響應數據 Mock 模板
- resHeader 響應的 HTTP 頭
- httpCode 響應的 HTTP 狀態碼
- delay Mock 響應延時,單位為 ms
- Random Mock.Random 方法,可以添加自定義占位符,詳細使用方法請查看 Wiki
使用方法
- 首先開啟此功能
- Mock 腳本就是用 JavaScript 對 mockJson 變量修改,請避免被全局變量(httpCode, resHeader, delay)的修改
3.3 全局mock
v1.3.21 新增全局 mock 設置,方便用戶在項目層面上全局設置公共的mock數據,具體 mock 腳本詳細使用方法詳見 3.2自定義 Mock 腳本
導航 :設置-》全局mock
3.4 普通mock
1 mock.js
原理
基於 mockjs,跟 Mockjs 區別是 yapi 基於 json + 注釋 定義 mock 數據,無法使用 mockjs 原有的函數功能。
正則表達式需要基於 rule 書寫,示例如下:
{ "name|regexp": "[a-z0-9_]+?", "type|regexp": "json|text|xml" }
mock函數
{ "errcode": 0, "errmsg": "@word", "data": { "id": "@id", //@id 隨機生成 id "name": "@name" //@name 隨機生成用戶名 } }
支持替換請求的 query, body 參數
{ "name": "${query.name}", //請求的url是/path?name=xiaoming, 返回的name字段是xiaoming "type": "${body.type}", //請求的requestBody type=1,返回的type字段是1 }
注:mock.js是基於 json+注釋
的方式,使用mockjs,需要在項目設置中開啟json5選項(開啟后可在接口 body 和返回值中寫 json 字段)。
導航:接口-》接口列表-》具體接口-》編輯 -》 返回數據設置
{ "errcode": 0, "errmsg": "@word", "name|regexp": "[a-z0-9_]+?", "type|regexp": "json|text|xml", "queryname": "${query.name}", //請求的url是/path?name=xiaoming, 返回的name字段是xiaoming "sex": "${body.sex}", //請求的requestBody type=1,返回的type字段是1 "data": { "id": "@id", //@id 隨機生成 id "name": "@name" //@name 隨機生成用戶名 } }
請求mock返回如下
{ "errcode": 0, "errmsg": "wbh", "name": "o_", "type": "json", "queryname": "", "sex": 1, "data": { "id": "650000200308233351", "name": "Steven Clark" } }
2 json-schema
導航:同mock.js
3 mock請求嚴格模式
版本 v1.3.22 新增 mock 接口請求字段參數驗證功能,具體使用方法如下:
- 打開 項目 -> 設置 開啟 mock 嚴格模式
- 針對 query, form 中設置的必須字段會進行必填校驗
4 自動化
4.1 參數化&變量傳遞
目前 yapi 中的query,body,header和pathParam的輸入參數已經支持點擊選擇功能
注:不支持復雜的jsonpath語法,像 $.userlist[?(@.name=='hins')].userid 並不支持
4.2 響應校驗
編寫完請求參數,可通過 js 腳本寫斷言
常用js函數
1.assert
斷言函數,詳細 api 可查看 document
常用 api
- 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 獲取