Alex Liang

[Working with legacy code] 使用 newman 建立整合測試

起源

這陣子開始重構公司的 legacy code,應該說是porting到新的repo。但舊專案有個很大的問題: 沒寫測試

這讓重構增加一些不確定性。還好,這些 API 都有經過 QA 測試。

我們需要寫 API integration test。但在時程壓力下,有沒有方法不需要寫 test code 去檢驗 porting 的 API 呢?

於是就有了這篇文章,說明如何使用 postman 和 npm package newman 完成這個任務。

作法

  1. 在 postman 建立新的 collection create new collection
  2. 建立新的 request,填好 request 所需要的參數。這裡會以公司的dev環境為主 create new request
  3. 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
      6
        pm.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,如果有敏感的資料還是要謹慎使用

  4. 完成後,儲存 request 和 collection 並 export json
  5. 在 nodejs project 安裝 newman npm install -g newman
  6. 新增測試檔案,並且將剛才 export 的 json file移到同一個目錄
1
2
3
4
5
const newman = require('newman')
newman.run({
collection: require('./APIContractTest.postman_collection.json'),
reporters: 'cli',
})

到這裡,已經可以針對各 API 做 integration test。不需要寫code,也不用怕改壞 API。

如果在本地端準備好測試資料的 seeder,還能進一步結合 CI/CD 讓測試可以自動化。之後工程師也可以安心地重構程式碼。

references: