API 测试最近变得非常流行。由于不涉及用户界面,测试变得更加简单和快捷。这就是为什么 API 测试被认为是执行系统端到端测试的首选方法。将自动化 API 测试与 CI/CD 流水线集成,可以让团队更快地获得构建的反馈。
在本博客中,我们将讨论并学习如何使用 Playwright Java 进行自动化测试,涵盖以下要点:
- 什么是 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 请求中不需要提供请求主体。但是,作为安全措施,需要提供token
作为header
来删除订单。
一旦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()
方法来删除订单ID为“1”的订单。
在订单被删除后,响应中返回状态码204。将对状态码进行断言,以验证删除操作是否成功。由于响应中没有返回请求体,因此这是唯一可以验证的内容。
测试执行
我们将创建一个新的 testng.xml,命名为 testng-restfulecommerce-deleteorders.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