使用 Java REST-Assured 框架进行 DELETE API 接口测试指南
API 测试在近年来变得越来越流行。由于它不涉及用户界面(UI),因此执行速度通常更快、更容易。这使得 API 测试成为验证端到端系统功能的首选方案。此外,将自动化 API 测试集成到 CI/CD 流水线中,可以使团队更快速地获得构建反馈。
在本教程中,我们将探讨 DELETE API 请求,并学习如何使用 Java 中的 Rest-Assured 进行自动化测试。我们将涵盖以下主题:
- 什么是 DELETE 请求?
- 如何使用 Rest-Assured Java 测试 DELETE API?
什么是 DELETE API 请求?
DELETE API 请求用于从服务器中删除特定资源。在大多数情况下,DELETE 请求不会返回响应体。
被删除的资源通过 URI 进行标识,一旦请求被处理,该资源将从服务器中永久移除。因此,DELETE 操作可能会产生副作用,例如从数据库中删除记录。在处理 DELETE 请求时,以下是一些重要的注意事项:
- 使用 DELETE 请求删除的数据无法恢复,因此应谨慎处理。
- 它不被视为一种安全的方法,因为它直接影响服务器数据,如果管理不当,可能会导致数据不一致。
- 在实践中,DELETE 并不总是幂等的。例如,第一次 DELETE 调用可能会返回 204(无内容)状态码表示删除成功,而对同一资源进行后续调用时,可能会返回 404(未找到),因为该资源已不存在。
测试应用
在本教程中,我们将使用可免费获取的 RESTful e-commerce API,它提供了多个与订单管理相关的端点,支持创建、检索、更新和删除订单等操作。该应用可以通过 Docker 或 Node.js 在本地部署。
以下是 RESTful e-commerce 项目中 DELETE API 端点的示例。
DELETE /deleteOrder/{id}
[LOADING...]
此 API 需要一个 order_id 作为路径参数,以标识应从系统中删除的订单。此 DELETE 请求无需发送请求体。但是,出于安全考虑,请求头中必须包含有效的身份验证令牌。
API 执行成功后,指定的订单将从系统中移除,并返回 204(无内容)状态码。如果订单不存在,或者令牌缺失或无效,API 将返回相应的错误响应。
如何使用 REST-Assured Java 测试 DELETE API 请求
测试 DELETE API 对于维护应用程序的稳定性和可靠性非常重要。由于这些 API 负责从系统中删除数据,因此必须验证其行为,以避免意外的数据丢失和系统不一致。在本次演示中,我们将使用 REST-Assured Java 来测试 DELETE /deleteOrder/{id} 端点,该端点用于从系统中删除现有订单。
入门指南
建议先阅读之前的教程,以了解先决条件、设置和配置。
查看 什么是 API 测试 以了解如何高效地测试 API。
测试场景 1:删除有效订单
本次演示将使用以下测试场景来演示 DELETE API 请求的测试:
测试实现
要实现此测试场景,我们需要系统中存在有效订单。这些订单可以通过运行 POST /addOrder API 来注入。查看这篇教程了解如何测试 POST /addOrder API,其中讨论了生成请求负载的不同方法。此外,在发送 Delete API 请求之前,我们需要授权令牌。
此测试场景将分为两部分实现:
- 请求 POST
/authAPI 端点并从中提取令牌。 - 使用步骤 1 中生成的令牌请求 Delete
/deleteOrder/{id}API 端点。
步骤 1:生成并提取令牌
让我们创建一个新的 Java 类 TestDeleteRequestExamples,并添加测试方法 testTokenGeneration()。
testTokenGeneration() 测试方法向 /auth 端点发送 POST 请求,使用用户名和密码生成身份验证令牌。由于这是一个演示 API,登录凭据已硬编码并直接作为字符串使用。
在实际场景中,不应暴露凭据,而应使用环境变量访问。
它验证响应状态码是否为 201,并检查响应体中是否存在 token 字段。然后,它从响应中提取令牌并将其存储在 token 变量中,以便在后续 API 请求中使用。
步骤 2:测试删除订单 API
让我们创建一个新的测试方法 testDeleteOrder() 来实现删除订单的测试。
testDeleteOrder() 测试方法向 /deleteOrder/{id} 端点发送 DELETE 请求,并在请求头中传递身份验证令牌。
- header():
header()方法用于向请求添加 Authorization 标头。它确保 API 调用经过身份验证,仅允许有效用户执行删除操作。 - token:
token变量保存了使用testAuthorizationToken()测试方法生成的身份验证令牌。 - delete(): 此方法向
/deleteOrder/{id}端点发送 DELETE 请求,指示服务器删除指定的订单 (1)。 - statusCode(): 测试验证响应是否返回 204(无内容)状态码,表明请求成功且资源已被删除,且没有响应体。
测试场景 2:获取已删除的订单
此测试场景确保指定的资源已成功从系统中删除。
- 请求 GET
/getOrderAPI,尝试检索 order_id 为 1 的订单。 - 验证响应是否返回 404 状态码。
测试实现
让我们在已编写删除 API 测试的现有测试类中创建一个新的测试方法 testFetchingDeletedOrder()。
testFetchingDeletedOrder() 方法使用之前通过 DELETE /deleteOrder API 删除的同一个 order_id 向 GET /getOrder API 发送请求。此测试的断言验证返回的状态码是否为 404(未找到),以检查资源是否已被删除且不再在系统中可用。
查看这篇教程了解如何使用 REST-Assured Java 测试 GET API 请求。
尽管之前的删除测试场景中使用的断言已经确认数据已被删除,但通过获取已删除资源来测试的场景可以作为额外的验证,特别是在执行端到端 API 测试时。
查看这篇教程,其中提供了用于验证响应数据、状态码、标头等的综合断言示例列表。
测试执行
让我们创建一个 testng.xml 文件,并将所有用于顺序验证 DELETE API 请求的测试添加到其中。
现在,所有三个测试都应该按顺序运行。第一个将生成令牌,第二个将删除 order_id 为 1 的订单,最后一个将尝试检索已删除的订单。
[LOADING...]
上面的截图显示测试已成功运行,DELETE API 按预期工作。
总结
DELETE API 请求用于从系统中删除资源。由于删除是 CRUD 操作的关键部分,因此彻底测试它以确保系统按预期运行非常重要。同时,请记住 DELETE 操作是不可逆的,因此应始终谨慎处理。从实践角度来看,一个好的方法是在执行 DELETE 请求后调用 GET API,以验证资源已成功从系统中移除。
接下来,学习如何使用 JSON、Excel 和 CSV 等文件通过 REST Assured 执行数据驱动测试。祝测试愉快!