RESTful API 測試很煩,只好動手寫屬於自己的測試了

寫在最前面

嗨,大家好久不見!

距離上次發表新文章已經是好久以前了,主要是開始進入職場上班工作後,回家只想休息打遊戲,一不小心就富奸化了。不過也因為工作的因素,最近累積了不少研究記錄可以來慢慢更新上來。

API 測試

RESTful API 測試在許多後端伺服器軟體工程師是非常常見的一個開發環節,而如何驗證與測試 API 的傳呼結果則是一件令人感到煩躁的事。大部分的人應該都有使用過 Postman 這一個圖形化介面的測試工具,他其實算簡單,而且提供的功能相當多樣,幾乎覆蓋了所有 API 的測試需求。此外,這工具也有提供自動化測試工具的方式。

所以,既然有簡單的測試方式,為什麼不乾脆用他就好,還要自己來寫一個呢?

因為當測試項目多又捨不得關掉頁籤的時候,你就會知道那有多煩躁了…在數十個頁籤中翻找那個先前暫時放著的測試內容…

所以我就想說,既然要這樣翻翻找找或使用他的工具建立一套不太活化的自動測試流程的話,那乾脆就自己來寫一個吧!

API Tester

這是一個尚在開發中的小模組,功能可能還不夠齊全,因為目前主要使用者就我一個而已(笑

在這之前你需要有:

  • RESTful API 概念
  • Node.js 基本知識
  • 表單基本知識

安裝

npm i @single9/api-tester

使用方式

const { ApiTester } = require('@single9/api-tester');

建立 API

首先呢,你需要先將 API 定義出來,定義的方式相當簡單,只需要打打名稱輸入必備條件後就可以了。

const api = new ApiTester([
  {
    name: '<Api Name>',       // API 功能名稱
    path: '<Api Path>',       // API 路徑,如:/api/posts
    method: '<HTTP Method>',  // API HTTP 方法,如:post
  },
], {
  rootUrl: '<API root URL>'   // API 呼叫位址,如:https://jsonplaceholder.typicode.com
                              // 這預設為: http://localhost:3000
  headers: {
    // 要附帶的標頭,如:'authorization': 'Bearer SAdoweasd...',
  },
  auth: { // Basic 驗證方式的帳號與密碼,需要時才要填
    username: 'username',
    password: 'password',
  }
})

呼叫 API

這部分是這個套件最有趣的部分,當你定義好你的 API 之後,你將可以透過函式(Function) 的方式直接呼叫 API,再也不需要打一大堆有的沒有的程式碼了!而且,用起來就像是直接使用 Function 一樣的簡單又自然呢!

例如說,我們在初始化的時候定義了一個名為 sendPost 的 API 名稱,那接下來我在程式中只需要 api.sendPost() 就可以呼叫這個 function,是不是相當方便呢?

透過這個套件所產生的 Function 可以直接使用 await 關鍵字來做同步/非同步呼叫,讓開發或測試上面變得更為容易。

來個簡單的例子吧!

const { ApiTester } = require('@single9/api-tester');

// 定義 API
const api = new ApiTester([
  {
    name: 'getTodos',
    path: '/todos',
    method: 'GET',
  },
  {
    name: 'getTodoById',
    path: '/todos/:id',
    method: 'GET',
  },
  {
    name: 'createPost',
    path: '/posts',
    method: 'POST',
  },
], {
  rootUrl: 'https://jsonplaceholder.typicode.com'
})

// 呼叫!
api.getTodos()
  .then(res => {
    console.log(res.body)
  })

api.getTodoById({
  pathParams: {
    id: 1
  }
}).then(res => {
  console.log(res.body)
})

api.createPost({
  body: {
    title: 'foo',
    body: 'bar',
    userId: 1,
  }
}).then(res => {
  console.log(res.body)
})

這樣是不是變得單純很多呢?你只需要將定義寫好,之後就可以用非常簡單的方式來呼叫這些 API 了!

更多細節還請各位移駕至 GitHub Repository 看了,因為我實在很懶得再寫一次這堆東西…XD

GitHub 傳送門:https://github.com/single9/api-tester#readme

duye.chen

Recent Posts

[教學] 打造你的 NFT 智能合約 – ERC721A

GM!前些日子在幣圈亂玩,一路...

3 年 ago

JavaScript – Singleton 設計模式

前言 在設計程式時,我們有時會...

4 年 ago

PlaidML 讓你的 Mac 也能加速 Tensorflow 機器學習!

相信很多使用 Mac 或者手上...

4 年 ago

Node.js 與 Socket.io – 即時聊天室實作:資料庫

經過前兩篇(一、二)文章,我們...

7 年 ago