spryker/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() 此方法设置用于测试 API 的 OpenAPI 模式文件的路径。
  • 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,用于访问其他助手并使用_beforeSuite()方法自动将当前钩子附加到OpenApiHelper中。

抽象类定义了以下方法

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