如何使用Playwright Java测试API测试中的DELETE请求

API 测试最近变得非常流行。由于不涉及用户界面,测试变得更加简单和快捷。这就是为什么 API 测试被认为是执行系统端到端测试的首选方法。将自动化 API 测试与 CI/CD 流水线集成,可以让团队更快地获得构建的反馈。

在本博客中,我们将讨论并学习如何使用 Playwright Java 进行自动化测试,涵盖以下要点:

  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 请求中不需要提供请求主体。但是,作为安全措施,需要提供token 作为header来删除订单。

一旦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() 方法来删除订单ID为“1”的订单。

在订单被删除后,响应中返回状态码204。将对状态码进行断言,以验证删除操作是否成功。由于响应中没有返回请求体,因此这是唯一可以验证的内容。

测试执行

我们将创建一个新的 testng.xml,命名为 testng-restfulecommerce-deleteorders.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