spryker-sdk / testify-openapi

TestifyOpenApi 模块

dev-master / 1.0.x-dev 2022-12-05 10:51 UTC

This package is auto-updated.

Last update: 2024-09-20 03:48:43 UTC


README

Latest Stable Version Minimum PHP Version

TestifyOpenAPI 为测试您的 API 架构提供基本测试基础设施。

安装

composer require spryker/testify-openapi --dev

文档

模块文档

集成

\Spryker\Glue\TestifyOpenApi\Helper\OpenApiHelper 辅助器添加到您的 codeception.yml 中,然后运行构建命令,将生成的新方法添加到您的测试器类中。

此辅助器提供以下方法

  • setAccessToken() 您可以向此方法传递一个有效的访问令牌,该令牌将用于所有受保护的请求。
  • setOpenApi() 此方法设置 OpenAPI 架构文件的路径,该文件将用于测试 API。
  • setDebugPath() 当您只想运行一个特定的路径时,可以使用此方法与 testAllPaths() 方法一起使用。
  • testAllPaths() 此方法将使用架构文件运行每个操作,并尝试根据您的架构定义自动创建有效请求。它还尝试对所有预期响应进行测试(尚未完成的特性)
  • testPath() 此方法将运行确切的一条路径,可用于边缘情况或无法自动设置的测试。
  • testPathWithoutSchemaValidation() 此方法将运行确切的一条路径而不进行架构验证,可用于需要发送无效请求的边缘情况。
  • addHook() 此方法接受一个 \Spryker\Glue\TestifyOpenApi\Helper\Hook\AbstractHook 实例,请参阅此文档中的挂钩部分。

此工具如何工作

OpenAPI 架构文件定义了 API,包括其所有预期的请求属性、预期响应代码和预期响应体。为了确保架构文件与 API 后端代码一致,它会从传递的架构文件中读取必要的信息。

从架构文件中构建一个请求并对其进行验证。当验证通过时,它将请求发送到应用程序。应用程序返回一个响应代码,该代码将与架构文件中定义的代码进行验证。

数据处理

在许多情况下,您需要在数据库中具有数据才能运行测试,例如,GET /pets/{petId} 需要在您的数据库中有一个宠物。您可以手动设置它并使用带有创建数据的定义 URL,或者您可以使用响应此类请求的挂钩。请参阅此文档中的挂钩部分。

安全处理

当架构中的操作包含安全配置(目前仅支持 Bearer 令牌授权)时,此工具将需要添加正确的安全头。

要获取有效的访问令牌,您需要添加一个 AccessTokenHelper,请参阅 https://github.com/spryker-projects/registry-service/blob/master/tests/RegistryTest/Glue/Testify/_support/Helper/AccessTokenHelper.php 作为示例实现。

您可以使用任何您喜欢的方法来获取有效的访问令牌,但请勿使用 Auth0 API 为测试创建一个令牌,因为每个令牌都会产生费用。

使用挂钩

挂钩是操纵发送到应用程序的请求的多种方式之一。使用 \Spryker\Glue\TestifyOpenApi\Helper\Hook\AbstractHook 类构建一个挂钩。

抽象类扩展了Codeceptions \Codeception\Module,用于获取对其他Helper的访问权限,并且通过_beforeSuite()方法自动将当前Hook附加到OpenApiHelper中。

抽象类定义了以下方法:

  • accept()该方法用于判断当前Hook是否应该用于当前请求。
  • setUp该方法可以用于在发送请求前准备数据库数据或其他需要设置的数据。
  • getPathParameters()当路径包含路径占位符时(如/pets/{petId}),可以使用该方法。之前通过setUp()方法创建的Pet可以保存例如创建的Pet的id,并在该方法中返回它,以便生成的URL将针对现有的数据库实体。
  • getQueryParameters()getPathParameters()相同,但将用于查询参数,例如/pets/{petId}?key=value
  • manipulateRequest()该方法可以用于进一步操作创建的ServerRequestInterface,例如添加头部信息。