API測試最近受到了很多關注。由於不涉及UI,測試變得更容易和更快速。這就是為什麼API測試被認為是進行系統端到端測試的首選原因。將自動化API測試與CI/CD流程集成,讓團隊能夠更快地獲得建置的反饋。
在本部落格中,我們將討論並學習有關使用Playwright Java進行自動化測試的DELETE API請求以及如何處理它們,涵蓋以下內容:
- 什麼是DELETE請求?
- 如何使用Playwright Java測試DELETE API?
入門指南
建議您先查看早期教程部落格以瞭解有關前提條件、設置和配置的詳細信息。
被測應用程式
我們將使用免費使用的RESTful電子商務API,提供與訂單管理功能相關的多個API,讓我們能夠創建、檢索、更新和刪除訂單。
此應用程式可以在本地使用Docker或NodeJS進行設置。
什麼是DELETE請求?
DELETE API 請求會從伺服器刪除指定的資源。一般來說,DELETE 請求沒有回應主體。
資源是由 URI 指定的,伺服器會永久刪除它。DELETE 請求既不被認為是安全的,也不是冪等的,因為它們可能會對伺服器造成副作用,例如從資料庫中刪除數據。
以下是 DELETE 請求的一些限制:
- 使用 DELETE 請求刪除的數據是不可逆的,因此應該小心處理。
- 這不被認為是一種安全的方法,因為它可以直接從資料庫中刪除資源,造成系統中的衝突。
- 這不是一種冪等的方法,這意味著對同一資源多次調用可能會導致不同的狀態。例如,在第一次調用 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 |
系統中找不到具有指定 |
403 | 請求中缺少令牌 |
如何使用Playwright Java測試DELETE API
測試DELETE API是確保應用程序穩定性和可靠性的重要步驟。正確實施DELETE API對於檢查意外數據丟失和不一致性至關重要,因為DELETE API負責從系統中刪除資源。
在這個使用Playwright Java測試DELETE API的演示中,我們將使用/deleteOrder/{id}
來從系統中刪除現有訂單。
測試場景1:刪除有效訂單
- 啟動RESTful電子商務服務。
- 使用POST請求,在系統中創建一些訂單。
- 使用DELETE請求刪除具有
order_id
“1”的訂單。 - 檢查響應中返回的狀態碼204。


測試實現
要實現測試方案,需要執行以下步驟。
- 使用 POST 請求添加新訂單。
- 呼叫
/auth
API 以生成令牌。 - 使用令牌和
order_id
呼叫/deleteOrder/
API 端點以刪除訂單。 - 檢查回應中是否返回狀態碼 204 。
在現有的測試類 HappyPathTests
中創建一個新的測試方法 testShouldDeleteTheOrder()
, 該測試方法實現上述三個步驟以測試 DELETE API。
public void testShouldDeleteTheOrder() {
final APIResponse authResponse = this.request.post("/auth", RequestOptions.create().setData(getCredentials()));
final JSONObject authResponseObject = new JSONObject(authResponse.text());
final String token = authResponseObject.get("token").toString();
final int orderId = 1;
final APIResponse response = this.request.delete("/deleteOrder/" + orderId, RequestOptions.create()
.setHeader("Authorization", token));
assertEquals(response.status(), 204);
}
首先將會呼叫 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來執行我們在測試實施中討論的步驟順序測試。
<suite name="Restful ECommerce Test Suite">
<test name="Testing Happy Path Scenarios of Creating and Updating Orders">
<classes>
<class name="io.github.mfaisalkhatri.api.restfulecommerce.HappyPathTests">
<methods>
<include name="testShouldCreateNewOrders"/>
<include name="testShouldDeleteTheOrder"/>
</methods>
</class>
</classes>
</test>
</suite>
首先,將執行testShouldCreateNewOrders()
測試方法,它將創建新的訂單。接下來,將執行testShouldDeleteTheOrder()
測試方法順序以測試刪除訂單的API。
以下是使用IntelliJ IDE執行的測試執行的螢幕截圖,顯示測試已成功執行。

現在,讓我們通過撰寫一個新的測試來驗證訂單是否已正確刪除,該測試將調用帶有已刪除order_id
的GET /getOrder
API端點。
測試方案2:檢索已刪除的訂單
- 刪除具有
order_id
“1”的有效訂單。 - 使用GET
/getOrder
API,嘗試檢索具有order_id
“1”的訂單。 - 檢查回應中是否返回狀態碼404並顯示消息“找不到具有給定參數的訂單!” 。
測試實現
我們來在現有的類別 HappyPathTests
中創建一個新的測試方法 testShouldNotRetrieveDeletedOrder()
。
public void testShouldNotRetrieveDeletedOrder() {
final int orderId = 1;
final APIResponse response = this.request.get("/getOrder", RequestOptions.create().setQueryParam("id", orderId));
assertEquals(response.status(), 404);
final JSONObject jsonObject = new JSONObject(response.text());
assertEquals(jsonObject.get("message"), "No Order found with the given parameters!");
}
這個場景的測試實現相當簡單。我們將執行 GET /getOrder
API,並使用 order_id
“1” 來獲取已刪除的訂單。
接下來應用一個斷言來驗證 GET API 應該在響應中返回狀態碼 404,並帶有消息 “無法找到具有給定參數的訂單!”
這個測試確保刪除訂單的 API 正常運行,並且該訂單已從系統中刪除。
測試執行
讓我們更新 testng.xml
文件,並在刪除測試之後的末尾添加這個測試場景。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Restful ECommerce Test Suite">
<test name="Testing Happy Path Scenarios of Creating and Updating Orders">
<classes>
<class name="io.github.mfaisalkhatri.api.restfulecommerce.HappyPathTests">
<methods>
<include name="testShouldCreateNewOrders"/>
<include name="testShouldDeleteTheOrder"/>
<include name="testShouldNotRetrieveDeletedOrder"/>
</methods>
</class>
</classes>
</test>
</suite>
現在,所有三個測試應該按順序運行。第一個將創建訂單;第二個將刪除 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