【问题标题】:What is best practice to test error responses with Dredd?使用 Dredd 测试错误响应的最佳实践是什么?
【发布时间】:2019-09-02 12:56:28
【问题描述】:

我想用 openapi 3 描述我现有的 API,并用 dredd 证明我的描述。我知道 openapi 3 实现是实验性的,但我不使用任何 the elements which are not supported yet

这是我的 spec.yaml 的一部分

paths:
  /login:
    post:
      summary: Login
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/login_request'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/login_response'
        "401":
          description: Not authenticated
        "404":
          description: Other Error

...

  schemas:
    login_request:
      type: object
      properties:
        n:
          type: string
          description: Username
          example: super
        p:
          type: string
          description: Password
          example: user123

所以我可以测试正确输入凭据的情况(假设测试用户在那里),因为它们在规范中作为示例给出。但是错误案例呢?当然我可以在 hooks.js 文件中跳过它们:

var hooks = require('hooks');

hooks.before('/login > Login > 401', function (transaction, done) {
    transaction.skip = true;
    done();
});

hooks.before('/login > Login > 404', function (transaction, done) {
    transaction.skip = true;
    done();
});

注意:就我而言,可能是由于使用了 openapi 3,Dredd 的行为与 here 所说的相矛盾:错误响应不会自动跳过。

但这是可取的吗?我也更愿意测试正确的错误反应。但是怎么做?我怀疑它现在是否受支持,但至少在理论上我可以insert multiple examples 到规范中,从而也包括导致错误的示例。但另一方面,任意错误的示例不会包含在文档中,不是吗?

这里的最佳做法是什么?

【问题讨论】:

    标签: openapi dredd


    【解决方案1】:

    您询问的区域is documented in the Dredd docs,但仅限于 API Blueprint 和 OpenAPI 2 格式:

    OpenAPI 2 格式允许为单个操作指定多个响应。默认情况下,Dredd 仅测试带有 2xx 状态代码的响应。带有其他代码的响应被标记为已跳过,并且可以在挂钩中激活 - 请参阅多个请求和响应操作指南。

    但是,对于 OpenAPI 3,这是未定义、未测试且未记录的。有一个GitHub issue about the problem,在它关闭之前,我相信您的问题无法得到解答。

    issue about future of Dredd 已将“让 OpenAPI 3 成为 Dredd 的一等公民”声明为优先事项之一,因此这只是时间问题。

    【讨论】:

    • 是的,我知道 dredd 不支持示例(复数形式)。这就是我写“理论上”的原因。我编写了一个脚本,它将包含 n 个示例的规范定义拆分为 n 个文件,每个文件都有一个示例,以规避问题,直到示例得到 dredd 的支持。比听起来更好,更直接;)我的问题更具概念性,并且朝着如何处理导致错误的示例的方向发展。我想让它们在我的 openapi 文件中吗?然后它们也会出现在我的文档中,但这有意义吗?为那些仅用于测试的人创建第二个 openapi 文件?
    • 抱歉,在回复之前我没有正确阅读您的问题 :( 我会说 Dredd 类似于 docstest,但适用于 API。它仍然不会取代您对 API 的单元/集成测试包含所有极端情况,但它确保用户在文档中阅读的内容始终有效。您可以指定所有极端情况或为它们提供单独的 API 描述,但会感觉很奇怪。
    猜你喜欢
    • 2010-09-17
    • 2019-07-20
    • 1970-01-01
    • 1970-01-01
    • 2012-04-05
    • 1970-01-01
    • 1970-01-01
    • 2017-11-16
    • 1970-01-01
    相关资源
    最近更新 更多