【问题标题】:Is endpoint unit testing possible based on only OpenAPI 3.0 file?是否可以仅基于 OpenAPI 3.0 文件进行端点单元测试?
【发布时间】:2018-04-19 10:03:06
【问题描述】:

经过一番谷歌搜索后,我决定直接问这个:

是否可以仅基于 OpenAPI 3.0 规范文件运行 REST API 端点“构建测试”?

我想将示例请求-响应对添加到 OpenAPI 规范文件,并让现有的或自己编写的库运行所有此类定义的测试并报告任何失败。

据我了解标准,很容易包含请求示例并以示意方式测试响应(思考http://json-schema.org/)。但是我还没有看到一种方法来合并更具体的测试,例如测试特定响应字段中的数字是否为精确值。此外,有一种方法来顺序测试请求会很好,但我不希望仅从规范文件中实现这一点。

最佳解决方案将包含在我的存储库中并在本地主机上运行测试。提前非常感谢大家。

【问题讨论】:

    标签: rest api testing build openapi


    【解决方案1】:

    是否可以仅基于 OpenAPI 3.0 规范文件运行 REST API 端点“构建测试”?

    是的。该规范至少包含两个允许自动生成测试的组件:

    • 示例。您可以 specify examples 定义端点,这些端点描述了您发送/接收的具体数据样本。
    • 架构。它们描述了数据模型,您可以使用这些模型生成对 API 的请求。

    但我还没有看到一种方法来合并更具体的测试,例如测试特定响应字段中的数字是否为精确值。

    可以使用“enum”关键字和所需字段的架构列表中的单个值来完成。与 JSON Schema 相比,Open API 不支持“const”关键字。

    另外,有一种方法来顺序测试请求会很好,但我不希望仅通过规范文件来实现。

    要实现这一点,您可以使用Open API links,它允许您指定如何从对端点 A 的请求或响应构造到端点 B 的请求。例如:

    paths:
      /users:
        post:
          summary: Creates a user and returns the user ID
          operationId: createUser
          responses:
            '201':
              description: Created
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      id:
                        type: integer
                        format: int64
                        description: ID of the created user.
              links:
                GetUserByUserId:
                  operationId: getUser
                  parameters:
                    userId: '$response.body#/id'
      /users/{userId}:
        get:
          summary: Gets a user by ID
          operationId: getUser
          parameters:
            - in: path
              name: userId
              required: true
              schema:
                type: integer
                format: int64
    

    在本例中,POST /users 的 201 响应中返回的id 值可用作GET /users/{userId} 中的userId 参数。通过这种方式,您可以定义对不同端点的请求序列。

    我想指出两个工具,它们可以仅基于输入的 Open API 规范生成和执行测试用例:

    1. Schemathesis 使用这两种来源,默认情况下不需要配置。它利用基于属性的测试并验证测试模式中定义的属性 - 响应代码、模式和标头。它通过 Open API 链接支持 Open API 2 & 3 和 stateful testing,并可以根据规范文件中的定义自动生成 API 请求序列。
    2. Dredd 更侧重于示例,并提供了几个automatic expectations。它只支持Open API 2,第三个版本是experimental

    两者都提供 CLI,并且可以使用各种挂钩进行扩展以适应所需的工作流程。

    【讨论】:

      猜你喜欢
      • 2017-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-13
      • 1970-01-01
      • 2011-03-16
      • 2015-05-25
      相关资源
      最近更新 更多