【问题标题】:How to validate API in tests with Swagger?如何使用 Swagger 在测试中验证 API?
【发布时间】:2016-01-15 18:17:44
【问题描述】:

我正在尝试找出让我的 API 文档成为事实来源的最佳方法,并通过集成测试或类似的东西理想地使用它来验证实际的 Java REST 代码。我们使用的是契约优先或消费者契约类型的方法,因此我们不希望文档必须从带注释的代码中生成,并且每次开发人员进行更改时都会更新。

一个想法是使用 Swagger,但我不确定如何最好地使用它来验证 API。理想情况下,最好在构建或集成测试过程中进行验证,以查看真正的响应(如果可能,请求)是否符合预期。我知道 Swagger 有很多用途和工具,我只是想把它包起来。或者,如果有更好的替代方法来处理 Java 代码。

【问题讨论】:

    标签: java api validation continuous-integration swagger


    【解决方案1】:

    最近,我们(swagger-codegen 社区)开始向 API 客户端(C#、PHP、Ruby)添加自动测试用例生成功能。我们还没有将它添加到 Java 中。以下是 Swagger-Codegen 为 C# 生成的一些示例测试用例:

    https://github.com/swagger-api/swagger-codegen/tree/master/samples/client/petstore/csharp/SwaggerClient/src/IO.Swagger.Test

    这仍然是非常初步的,我们希望听到您的反馈,看看这是否是您想要的。

    【讨论】:

    • 我想知道背后的想法是什么。基本上,Swagger 让您描述的是多种选择。对于某个资源上的 PUT,我可能可以得到响应 200、400、404、500,最后三个可能带有一些错误负载。但是测试也需要一个具体的选择——对于这个特定的输入,我得到这个输出。据我了解,很难从 Swagger 的定义中推断出来。或者我们在谈论不同的测试?顺便说一句,上面的链接是 404 的
    • 是的,很难从 swagger 规范中推断出测试。自动生成的测试用例旨在让开发人员更容易编写测试。我们还探索了使用供应商扩展来记录规范中的测试用例的可能性,但似乎社区目前对此并不感兴趣。 (我已经修复了链接)
    【解决方案2】:

    我认为你应该尝试 swagger-request-validator: https://bitbucket.org/atlassian/swagger-request-validator

    以下是一些如何使用它的示例: https://bitbucket.org/atlassian/swagger-request-validator/src/master/swagger-request-validator-examples/

    另一种选择是 assertj-swagger: https://github.com/RobWin/assertj-swagger

    【讨论】:

    • assertj-swagger 仅支持 swagger 2.0。
    【解决方案3】:

    您可能想查看Spring Cloud Contract。它为您提供了一个 DSL,您可以在其中描述场景(或多或少我对给定请求的响应是什么),并且它似乎非常适合您所描述的需求......

    【讨论】:

    • Spring Cloud Contract 是否允许与 Swagger 集成?根据我的阅读,这听起来像是两种完全不同的意图和目的。
    • 你在考虑什么样的集成?
    • 如果 Spring Cloud Contract 能够读取和使用 Swagger JSON/YAML 文件作为验证的基础,那将是理想的。
    【解决方案4】:

    如果您使用的是 Spring 框架,我强烈建议您查看Spring RestDocs,它允许您生成

    【讨论】:

    • 我不想生成 api 文档。相反,我希望采用合同优先的想法,其中招摇是事实的来源,然后根据招摇来验证请求、响应、有效负载,以确保开发人员没有违反合同。
    猜你喜欢
    • 2017-08-22
    • 2017-11-21
    • 1970-01-01
    • 2014-11-28
    • 1970-01-01
    • 2011-01-24
    • 2018-10-11
    • 2022-11-04
    • 2016-03-05
    相关资源
    最近更新 更多