Apifox 進行團隊接口管理指南
Apifox
,同 postman 一樣,最基本的功能用來接口聯(lián)調。
稍微高級點的用法可以使用 Apifox 生成各個語言發(fā)送請求的代碼,針對 Image/File 進行請求,對 Request Body 與 Response Body 進行數(shù)據(jù)校驗及測試。
「僅僅做到這些只是滿足一個開發(fā)者的使用場景。而 Apifox 更高級的用法可以使整個團隊進行受益,滿足開發(fā)測試的各個階段,對開發(fā)環(huán)境,測試環(huán)境,生產(chǎn)環(huán)境進行全環(huán)境覆蓋。對開發(fā)、測試、文檔進行更進一步的自動化」

1.?Apifox API 管理分層

Apifox 可對后端的所有請求按功能或者業(yè)務模塊進行組織,使用 markdown 對所有請求和示例添加適當?shù)拿枋觥?/p>
我們看一下 Apifox 關于組織請求及分組的建議。
項目: 對應一個團隊中某個服務。項目在項目組內各個成員(server, client, QA)間進行共享。可以對整個項目添加請求,文檔、單API測試等。最重要的是可以添加「測試流程」和「數(shù)據(jù)模型」,后續(xù)講到。對于一開始未在 apifox 組織請求的項目,可以「根據(jù) apidoc、swagger 等文檔自動轉化為 apifox 組織好的項目」。
分組: 對應一個模塊,或者各層級子路由。如?
router.use('/users')
?所有的請求都在一個分組,可以根據(jù)路由互相嵌套分組。請求: 對應一個API請求,一個文檔。
實例: 對應一個請求不同的參數(shù)以及響應,用于 Mock Server 以及文檔。
PS: 關于 Mock Server 和團隊共享 API,在 postman 中也存在,不過 apifox 全部免費,優(yōu)勢在我。
PS2: 一個小建議,如果能夠通過一個 Proxy,跑一遍項目,將所有請求收集起來并存儲為 Apifox 的項目,可最大幅度地節(jié)省了人為添加 API 的繁瑣性。特別是由其它工具,剛轉化為 apifox 時。
1.1.?文檔
apifox 自動生成文檔有助于團隊協(xié)作,解決了手動寫文檔,「以及更新不及時的重大bug」。
喂,那個后端,就是說你了,你文檔沒更新害我白折騰了三天三夜。
不過這樣冗余字段過多,更好的解決方案是在測試中對請求進行 json 校驗,同時充當了一部分文檔的功能。畢竟 json-schema 就是用來描述數(shù)據(jù)使數(shù)據(jù)更加可讀。
以上說到請求,對于響應的文檔,可以 json-schema 校驗或者每個字段的描述,以及更多的測試用例代表更多的細節(jié)。
1.2.?Mock
當服務器端還沒有寫好 API 時,客戶端可以自定義規(guī)則來生成接口。
更多參考 「前端該如何優(yōu)雅地Mock數(shù)據(jù)??」每個前端都應該學會的技巧[1]
2.?測試
對于每一個 Request 都需要有測試用例,驗證響應是否成功,響應時間是否過長或者響應 json 的數(shù)據(jù)類型是否正確。
測試可以使用?pm.expect
?進行?BDD
?測試,風格和?chai
?很像,如果熟悉?chai
?就很容易上手,pm.expect
?底層使用 chai 實現(xiàn),與 chai BDD API 一致。
apifox 也有一些 HTTP 相關的測試 API,如 status code,header, body,并且也提供了一些 snippets。
// 響應成功
pm.test('Status code is 200', () => {
?pm.response.to.have.status(200)
})
// 響應成功 chai.expect
pm.test('Status code is 200', () => {
?chai.expect(pm.response).to.have.property('code', 200)
})
// 校驗響應數(shù)據(jù)
pm.test('Page is 100', () => {
?const jsonData = pm.response.json()
?chai.expect(jsonData.page).to.eql(100)
})
重點不在這里,使用?「apifox 可以使用圖形界面交互式無需寫代碼對接口進行測試」。

以上截圖對以下數(shù)據(jù)進行了校驗
API 請求成功,狀態(tài)碼必須是 200
響應體數(shù)據(jù)必須是 JSON
響應體中 code 字段必須是數(shù)字
2.1.?示例: 測試請求參數(shù)
一個請求帶有若干參數(shù),如?GET
?的?querystring(search)
?以及?POST
?的?body
,「不同的參數(shù)會有不同數(shù)據(jù)結構的響應」。
假設一個請求不同參數(shù)返回的 json schema 完全不同,則可以寫成兩個 API 分開測試。
如果返回的 Json Schema 相同,只是值不同,則使用兩個不同的示例進行測試。
3.?集成測試
單個API測試通過后,需要把所有請求集成在一起進行測試。這時候出現(xiàn)了兩個問題
如何確保API依賴
API之間如何傳遞數(shù)據(jù)
在 apifox 中可以使用環(huán)境變量維護數(shù)據(jù),在請求中用?{{}}
?占位符替代。
一個常見的場景是項目使用 token 來保存登錄信息,每次請求都需要攜帶token。可以在登錄的測試代碼中設置 token 的環(huán)境變量
const url = 'http://{{HOST}}/api/login'
pm.test('There is a token', () => {
?const jsonData = pm.response.json()
?pm.expect(jsonData.token).to.a('string')
?pm.environment.set('token', jsonData.token)
})
const urlNext = 'http://{{HOST}}/api/profile?token={{token}}'

PS: 那如何自動控制所有測試的順序呢?比如以下三步,登錄成功后走第二步,登錄失敗走第三步
登錄
發(fā)帖
XXX
4.?持續(xù)集成
如何將集成測試與項目集成在一起,納入版本管理,保留測試記錄,方便準時定位 bug。
可以可使用 Apifox CLI,不過僅僅能測試離線數(shù)據(jù)??蓞⒖嘉臋n Apifox: 持續(xù)集成[2]
$ apifox run examples/sample.apifox-cli.json -r cli,html
5.?總結及更多疑問總結
如何編寫測試用例
apifox 底層使用?
[chai.js](http://chaijs.com/api/bdd/)
?的 bdd 語法作為斷言庫,另外加了一些特有的語法。apifox 可通過圖形化界面交互式校驗數(shù)據(jù)
如何debug
點擊菜單欄 View -> Show Devtools (Show Postman Console) 可以查看響應,檢查輸出。
集成測試如何管理請求依賴
比如: 兩個API需要有依賴關系,比如當創(chuàng)建完一個用戶后(注冊),獲取他的個人信息。獲取個人信息就需要依賴創(chuàng)建用戶這個API。
使用 Environment Variables 可以管理依賴
如何集成到服務器端項目中
可以使用 npm 包 apifox-cli 來集成到項目中