如何使用 Playwright Java 測試 API 測試中的 DELETE 請求

API測試最近受到了很多關注。由於不涉及UI,測試變得更容易和更快速。這就是為什麼API測試被認為是進行系統端到端測試的首選原因。將自動化API測試與CI/CD流程集成,讓團隊能夠更快地獲得建置的反饋。

在本部落格中,我們將討論並學習有關使用Playwright Java進行自動化測試的DELETE API請求以及如何處理它們,涵蓋以下內容:

  1. 什麼是DELETE請求?
  2. 如何使用Playwright Java測試DELETE API?

入門指南

建議您先查看早期教程部落格以瞭解有關前提條件、設置和配置的詳細信息。

被測應用程式

我們將使用免費使用的RESTful電子商務API,提供與訂單管理功能相關的多個API,讓我們能夠創建、檢索、更新和刪除訂單。

此應用程式可以在本地使用Docker或NodeJS進行設置。

什麼是DELETE請求?

DELETE API 請求會從伺服器刪除指定的資源。一般來說,DELETE 請求沒有回應主體。

資源是由 URI 指定的,伺服器會永久刪除它。DELETE 請求既不被認為是安全的,也不是冪等的,因為它們可能會對伺服器造成副作用,例如從資料庫中刪除數據。

以下是 DELETE 請求的一些限制:

  1. 使用 DELETE 請求刪除的數據是不可逆的,因此應該小心處理。
  2. 這不被認為是一種安全的方法,因為它可以直接從資料庫中刪除資源,造成系統中的衝突。
  3. 這不是一種冪等的方法,這意味著對同一資源多次調用可能會導致不同的狀態。例如,在第一次調用 DELETE 時,它會返回狀態碼 204,表示資源已被刪除,如果再次對同一資源調用 DELETE,則可能會返回 404 NOT FOUND,因為該資源已經被刪除。

以下是來自 RESTful 電子商務專案的 DELETE API 端點示例。

DELETE /deleteOrder/{id} :  按 ID 刪除訂單

此 API 需要提供 order_id 作為 路徑參數 以刪除系統中相應的訂單。這個 DELETE API 請求不需要提供請求主體。然而,作為安全措施,必須作為 header 提供 token 以刪除訂單。

一旦執行API,系統將刪除指定的訂單並返回狀態碼204。

如果找不到訂單,或者令牌無效或未提供,將相應顯示以下響應:

Status Code Description
400

無法驗證令牌

404

系統中找不到具有指定order_id的訂單

403 請求中缺少令牌

如何使用Playwright Java測試DELETE API

測試DELETE API是確保應用程序穩定性和可靠性的重要步驟。正確實施DELETE API對於檢查意外數據丟失和不一致性至關重要,因為DELETE API負責從系統中刪除資源。

在這個使用Playwright Java測試DELETE API的演示中,我們將使用/deleteOrder/{id}來從系統中刪除現有訂單。

測試場景1:刪除有效訂單

  1. 啟動RESTful電子商務服務。
  2. 使用POST請求,在系統中創建一些訂單。
  3. 使用DELETE請求刪除具有order_id“1”的訂單。
  4. 檢查響應中返回的狀態碼204。


測試實現

要實現測試方案,需要執行以下步驟。

  1. 使用 POST 請求添加新訂單。
  2. 呼叫 /auth API 以生成令牌。
  3. 使用令牌和 order_id 呼叫 /deleteOrder/ API 端點以刪除訂單。
  4. 檢查回應中是否返回狀態碼 204 

在現有的測試類 HappyPathTests中創建一個新的測試方法 testShouldDeleteTheOrder(), 該測試方法實現上述三個步驟以測試 DELETE API。

Java

 

首先將會呼叫 POST /auth API 端點以生成令牌。收到的 token 將儲存在 token 變數中,以便在 DELETE API 請求中進一步使用。

接下來,將使用 testShouldCreateNewOrders() 方法生成新訂單,該方法已在 前一個教程 中討論過,我們談到了如何使用 Playwright Java 測試 POST 請求。

在生成訂單後,下一步是使用有效的 order_id 進行 DELETE 請求,以刪除指定的訂單。


我們將使用 Playwright 框架提供的 delete() 方法刪除 order_id 為 “1” 的訂單。 

刪除訂單後,回應中會返回狀態碼 204。將對狀態碼進行斷言以驗證刪除操作是否成功。由於回應中沒有返回請求主體,這是唯一可以驗證的事項。

測試執行

我們將創建一個名為testng-restfulecommerce-deleteorders.xml的新testng.xml來執行我們在測試實施中討論的步驟順序測試。

XML

 

首先,將執行testShouldCreateNewOrders()測試方法,它將創建新的訂單。接下來,將執行testShouldDeleteTheOrder()測試方法順序以測試刪除訂單的API。

以下是使用IntelliJ IDE執行的測試執行的螢幕截圖,顯示測試已成功執行。

現在,讓我們通過撰寫一個新的測試來驗證訂單是否已正確刪除,該測試將調用帶有已刪除order_id的GET /getOrder API端點。

測試方案2:檢索已刪除的訂單

  1. 刪除具有order_id“1”的有效訂單。
  2. 使用GET /getOrder API,嘗試檢索具有order_id“1”的訂單。
  3. 檢查回應中是否返回狀態碼404並顯示消息“找不到具有給定參數的訂單!” 

測試實現

我們來在現有的類別 HappyPathTests 中創建一個新的測試方法 testShouldNotRetrieveDeletedOrder()

Java

 

這個場景的測試實現相當簡單。我們將執行 GET /getOrder API,並使用 order_id “1” 來獲取已刪除的訂單。

接下來應用一個斷言來驗證 GET API 應該在響應中返回狀態碼 404,並帶有消息 “無法找到具有給定參數的訂單!”

這個測試確保刪除訂單的 API 正常運行,並且該訂單已從系統中刪除。

測試執行

讓我們更新 testng.xml 文件,並在刪除測試之後的末尾添加這個測試場景。

Java

 

現在,所有三個測試應該按順序運行。第一個將創建訂單;第二個將刪除 order_id “1”的訂單;最後一個測試將調用 GET API 來獲取 order_id “1”的訂單並返回狀態碼 404。

上面的截圖顯示所有三個測試都成功執行,並且 DELETE API 按預期正常工作。

總結

DELETE API 請求允許從系統中刪除資源。由於刪除是一個重要的 CRUD 功能,因此測試它並驗證系統是否按預期運行是很重要的。然而,應該注意的是 DELETE 是一個不可逆的過程,因此應始終小心使用。

根據我的經驗,在執行DELETE請求後,調用GET API來檢查指定的資源是否已成功從系統中刪除是一個不錯的方法。

祝測試愉快!

Source:
https://dzone.com/articles/test-delete-requests-for-api-testing-with-playwright-java