Categories
程式開發

你應該知道的自動化API測試知識


你應該知道的自動化API測試知識 1

API 日漸成為當今應用程序開發的核心。作為 Web 組件間通信的主要模式,API 被用於跨系統之間的數據連接和傳輸以及業務互聯。這意味著,產品上線前,通過 API 測試可以提高軟件質量,並將重大安全風險降到最低。

什麼是API測試?

API測試是直接在API上執行的軟件測試類型,用它來驗證該API是否滿足預期的功能、安全性、可靠性和性能需求。一般測試API通過向API後端發送直接請求來進行測試,無需加載或與用戶界面交互。

如下圖所示,API測試是在業務層執行,GUI和數據庫層間的所有邏輯操作和處理都在這一層進行。對軟件質量而言,API測試至關重要,因為它可以在短時間內驗證構建中的程序的邏輯。

GUI測試不同,API測試能適應更快的發布週期和定期更改。

你應該知道的自動化API測試知識 2

可以測試的API類型?

從允許應用程序在同一設備上運行代碼的簡單代碼庫,到如今的遠程API(允許在一個設備上運行的應用程序調用另一個設備上的託管代碼),API一直在不斷演進。

在選擇API測試的自動化工具時,了解正使用的API技術和測試的最佳方式,這些很重要。

當下,最常見的web服務API包括:

自動化API測試的必要性

API測試可以提高整個test suite的效率。從更高的角度而言,API測試能幫助開發者對解決方案進行驗證和維護,並消除錯誤。

然而,如果API測試執行地不徹底,問題可能在很久後才有人發現。這就迫使開發團隊必須暫停當前的sprint開發週期,回去重新尋找問題所在。

如果在測試週期的後期發現大量bug,這可能阻礙開發進度,從長遠來看,這樣的代價非常昂貴。通過設置自動化的API測試,你可以:

  • 確保所有服務都按預期運行;
  • 確認所有端點是否安全,不受未授權用戶和未經身份驗證用戶的影響;
  • 提高功能性和非功能性測試的覆蓋率;
  • 能及時地給開發團隊提供反饋,這樣就能更快地發布產品;
  • 無論應用程序的端點託管在何處(從AWS Lambda雲端到本地設備),所有端點都能測試。

一般,API測試允許你驗證web服務API中的四個主要操作——即GET、POST、PUT和DELETE方法。

以下面的一個代碼片段為例,它使用了java rest-assured庫,驗證從服務器接收的JSON格式的響應。

我們假設響應是這樣的:

你應該知道的自動化API測試知識 3

我們可以用REST assured來驗證該響應。在這種情況下,一個簡單的測試如下所示:

你應該知道的自動化API測試知識 4

在上面的代碼片段中,validateDataOnResponse() 函數調用API端點/data?id=254,然後,我們收到一個JSON格式的響應。該測試也能驗證statusCode是否為200,並對該響應在其主體中是否包含名為“Tom”的名字做出判斷。

哪種類型的API測試可以自動化?

你可以為API執行不同類型的測試。雖然由於API的測試範圍有所不同,但大多數測試可分為以下幾類:

  • 功能測試——側重於測試應用程序代碼庫中的特定功能。其目的是確保API功能在預期的參數範圍內,如果不在預定範圍內,則適當的處理錯誤。理想情況下,這類測試包括的測試用例會支持對HTTP響應代碼、錯誤代碼和響應功能的驗證。

  • 負載測試——這種類型的測試是為了測試一個特定單元或整個代碼庫能夠承載多少負載。對於設計用來處理大量數據或多個用戶的應用程序來說,這種測試尤其必要。為保證峰值性能,你要確定API是否能夠實際支持預期的負載量,例如500個請求、5千個請求、5萬個請求甚至10萬個請求。

  • 安全性測試——安全性測試非常重要,因為它有助於確保API的代碼實現免受安全漏洞的影響。基於這個原因,開發人員應該確保他們的API測試用例集中包含驗證授權、加密機制、訪問控制、會話管理等等。 API安全驗證和審查流程有時還會涉及模糊測試(fuzz testing)和滲透測試(Penetration testing),這兩種測試都可以確保API不受外部安全漏洞的影響。

  • 驗證測試——這是在API實現中最後執行但卻非常重要的測試之一。這類測試會對產品開發、API行為和整體效率等重要方面進行驗證。這種類型的測試服務驗證API開發和實現是否符合標準的一致性以及是否符合預期的用戶需要和需求。

  • 運行時/錯誤檢測——與上述各類測試不同,以上測試主要關注在特定場景中運用該API後得到的結果,而這類測試關注的是API本身如何運行。這包括監控代碼實現、執行、錯誤檢測和資源洩漏中的異常。

API的測試策略

不僅僅只是針對API測試,總體而言,當使用自動化測試時,最大的好處之一是它能配置你的test suite來自動提供輸出,這樣你就不必人為地去觀察系統的響應。

自動API測試可以根據輸入條件返回這三類輸出中的任何一種:

  • 布爾狀態——通過或失敗
  • 任何類型的數據或信息
  • 對另一個API函數或事件的調用

但是,在直接對API進行測試時,有時候設定具體的通過或失敗場景可能並不容易。

有些情況下,可能沒有輸出或發生一些不可預知的事情。但是,通過比較測試後產生的響應數據或調用另一個API後的行為,測試人員就能為他們的測試例創建明確的驗證場景。

執行全面而嚴格的API測試是一個可靠的辦法,它能確保你的應用程序可以端到端地正常運行。然而,為確保代碼更改不會破壞API本身並保證API能正常投入使用,可以考慮將自動化的API測試集成到你的CI/CD(持續集成/持續部署)流水線管道中。

用Loadmill自動化你的API測試

測試的最佳實踐之一是用自動化實現那些可重用的迭代測試用例。

同樣地,API測試也不例外——你需要在每次發布前重複運行某些特定的測試用例。這意味著從一個版本到另一個版本的發布和維護只能通過自動化來讓工作變得更簡單。

Loadmill工具能很好地支持API測試,它允許測試人員在應用程序中記錄真實的用戶會話,並將這些會話轉換為可靠的test suites

你應該知道的自動化API測試知識 5

創建這些用戶會話記錄的過程也超級簡單,只需要幾分鐘就能完成。這個工具消除了手工編寫測試腳本的繁瑣且耗時的過程。你還可以使用該工具的node模塊CLI來運行API和負載測試。

測試自動化可以讓開發團隊的進度更快,並將更多精力放在更重要的事情上。隨著市場上各種自動化工具爭相問世,API測試的效率已經今非昔比。

英文原文:

All you need to know about automated API tests