起源
這陣子開始重構公司的 legacy code,應該說是porting到新的repo。但舊專案有個很大的問題: 沒寫測試。
這讓重構增加一些不確定性。還好,這些 API 都有經過 QA 測試。
我們需要寫 API integration test。但在時程壓力下,有沒有方法不需要寫 test code 去檢驗 porting 的 API 呢?
於是就有了這篇文章,說明如何使用 postman 和 npm package newman 完成這個任務。
作法
- 在 postman 建立新的 collection
- 建立新的 request,填好 request 所需要的參數。這裡會以公司的dev環境為主
send request。得到正確的 response 後,這裡有二種作法:
- 使用 https://autotester.softwareontheroad.com/。它會幫你產出 postman 的測項,將它貼在 postman 的 Tests
使用 https://jsonschema.net/home 。它會產出 schema,在 postman 的 Pre-request Script 貼上
schema = [產出的 schema]
,並且在 Tests 加上1
2
3
4
5
6pm.test("Validating is API schema correct", function() {
var response = pm.response.json();
console.log(response);
var result=tv4.validateResult(response, schema)
pm.expect(result.valid).to.be.true;
});cauiion: 上述二個網站雖然只貼上response,如果有敏感的資料還是要謹慎使用
- 完成後,儲存 request 和 collection 並 export json
- 在 nodejs project 安裝 newman
npm install -g newman
- 新增測試檔案,並且將剛才 export 的 json file移到同一個目錄
1 | const newman = require('newman') |
到這裡,已經可以針對各 API 做 integration test。不需要寫code,也不用怕改壞 API。
如果在本地端準備好測試資料的 seeder,還能進一步結合 CI/CD 讓測試可以自動化。之後工程師也可以安心地重構程式碼。
references: