iT邦幫忙

2023 iThome 鐵人賽

DAY 20
1

學習原因:

我們常說的 API 測試,一般來說,測的是 Web API / REST API。這篇文章就是來講述怎樣做 API 的 Automation Test。

學習目標:

  • 了解 API 的測試目的
  • 知道進行 API 測試需要知道哪些資訊
  • 應用 Developer Tool 截取 API 的資訊
  • 設計 API 測試

API 的測試目的:

  1. 功能測試: 確保 API 能夠正確執行其設計和預期的功能。這包括驗證 API 的輸入和輸出是否符合預期的行為。
  2. 開發者體驗 (DX: Developer Experience)
    • 錯誤處理: 驗證當 API 遭遇錯誤時是否能正確處理,例如返回適當的錯誤代碼和訊息。

    這裡我必須強調在測試過程中出現 500 Internal Server 都不是合理的 Status Code,我們故意輸入的錯誤資訊,都應當為 Bad Request,系統應該有阻擋並回傳正確的錯誤訊息。

    • 測試 API 規格: 驗證 API 的規範是否被準確實施,例如 URL、HTTP 方法、參數、請求和回應格式等。
  3. 性能測試: 評估 API 的性能,包括處理請求的速度、並發處理能力和資源使用等。
  4. 安全性測試: 是否有足夠的授權和身份驗證機制來保護敏感數據。

進行 API 測試需要知道的資訊:

  1. 用法 / 使用規則 / 特別處理的情境
  2. URL
  3. HTTP Request Method
  4. Header Parameters (I.e. Cookies 的資訊, Access Key 等)
  5. Request Body 格式 (Content-Type - I.e. application/json)
  6. Request Body 內容
  7. Request Payload 內每個 Attribute 的限制
    • 型別 (I.e. str, int, float, etc.)
    • 若為 String 的長度限制
    • 限制的可填項目 (I.e. Sex: 只能填 female 或是 male)
    • 是否為必填
  8. Response Body 格式 (Content-Type - I.e. application/json)
  9. Response Samples
    • 成功情境 : 回傳的內容 (包括 HTTP Status Code)
    • 失敗情境 : 各種情境會回傳的結果 (包括 HTTP Status Code 和 Error Message)

那要如何取得這些資訊?

  • 最理想的是由 Developer 撰寫的 API 文件,比較常用的 API 文件工具有 Swagger。
  • 最壞的情況就是完全沒有文件,那只能用 Browser 的 Developer Tool 來查看 API 的內容。

    但這個辦法真的是沒辦法之中的辦法,怎樣去應用那支 API,大概是用猜的。我是驗過一支 API 有幾千個 Attributes,這支 API 背後做了怎樣的邏輯處理是經過無數次測試推敲出來。。。整整花了一個禮拜時間去拆解。真心勸告需要寫 API 文件,不然這樣太浪費時間,太沒有效率了。
    但慎防大家會經歷相同的不幸,還是要分享一下怎樣猜測的~XD

應用 Developer Tool 截取 API 的資訊

以這個 Demo 網站作為例子: https://automationintesting.online/
這裡是要給店家留言,提交表格會發出 API Request 到 Server (後端)。

打開 Browser 的 Developer Tool F12 ,點選 Network Tab,再在頁面操作輸入資料。
https://ithelp.ithome.com.tw/upload/images/20230923/20162038YoI1XN86Ox.png

再來看看 Developer Tool 的內容,分別為 Headers, Payload, Response 來收集你需要的資訊。
https://ithelp.ithome.com.tw/upload/images/20230923/20162038KksdKr4YBC.png

https://ithelp.ithome.com.tw/upload/images/20230923/20162038iDMqhD92aq.png

https://ithelp.ithome.com.tw/upload/images/20230923/201620383pwomqctBA.png

整理一下所得的資訊:

URL: https://automationintesting.online/message/

Request:
Method: POST
Content-Type: application/json

Body: {
	"description": string,
	"email": string,
	"name": string,
	"phone": string,
	"subject": string
}

Response:
Content-Type: application/json

Body:{
	"messageId": int
	"description": string,
	"email": string,
	"name": string,
	"phone": string,
	"subject": string
}

Success Status Code: 201

這些資訊大概讓你知道這支 API 長怎樣的,如何可以成功建立給店家的留言。

但還是很有限,至少還需要知道每個 attribute string 的長度限制,會有什麼的錯誤情境等,才比較好設計對應的 Test Cases。

如果有權限看 Database,或許也可以猜測 attribute 的長度限制,因為一般跟 database 設定的字數限制有關。剩下的就只能自己試出來,或是跟 Developer 查問了。

好~最壞情況的經驗分享過了,先給你點心理準備,因為還真的蠻多公司沒有 API 文件的。

API 測試用例設計

有足夠的資料就可以開始來設計 Test Case 了,基本上同樣應用黑箱測試技術。

這裡提供 3 個方向去協助思考 Test Cases:

  1. 正常使用情境

    例如:測試登入 API,輸入正確的登入資料,預期登入應該會成功。

  2. 錯誤使用情境

    針對 Request Body 的每個 Attribute 的限制,輸入錯誤的資料,而每個測試情境只能有一個錯誤資料

    例如: 輸入錯誤的 Username / Password, 不輸入 Username / Password 等等。。。

  3. 特殊使用情境

    例如:註冊 API,Username 不能重覆註冊,但因為有註銷功能,註銷後應該可以再註冊。

以下我把常見的 API 主要分為幾個大類,提供一些發想測試的方向,不盡完美,也不是所謂的 SOP,僅供參考,讓你可以寫出最基本的 Test Cases。

第一類: Search API - 查詢類型的 API 測試

https://ithelp.ithome.com.tw/upload/images/20230923/20162038eIDWimyqAo.png

第二類:CRUD API - 新增/讀取/更新/刪除的 API 測試

https://ithelp.ithome.com.tw/upload/images/20230923/20162038l8ceM1kGrX.png

第三類: Import API - 匯入類型的 API 測試

https://ithelp.ithome.com.tw/upload/images/20230923/20162038xI4ELJ6yMI.png

第四類 : Export API - 匯出類型的 API 測試

https://ithelp.ithome.com.tw/upload/images/20230923/20162038MaHO6zN83G.png

推薦一個練習 API 測試用的網站:Dummy API
需要注冊取得 app-id 才能用,可以嘗試閱讀 API 文件,想像一下 Test Case 要怎樣設計。

明天的內容將會是應用 Python 作 API 測試。


上一篇
Day 19: HTTP and REST API
下一篇
Day 21: 應用 Python 作 API 測試
系列文
從 0 開始培育成為自動化測試工程師的學習指南30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言