【问题标题】:Testing REST API provider response without mock在没有模拟的情况下测试 REST API 提供程序响应
【发布时间】:2018-05-20 16:18:56
【问题描述】:

目前,我正在开发一个与外部 REST API 集成的 Spring Boot 项目。作为集成套件测试的一部分,我们正在对作为 CI/CD 的一部分执行的实际外部 API 进行模拟测试。

我的问题是在生产中它调用实际的 API,所以我们如何在测试环境中做到这一点。我认为我们不需要在加载外部 API 的多重集成测试期间进行实际的外部提供程序调用,同时也希望使用来自服务的实际 REST 响应进行测试。

有什么建议吗?

【问题讨论】:

  • WireMock。或者当然,使用 Pact,因为您已经使用了该标签。
  • 过去我使用了一个静态 .json 文件,可以从包含固定数据的服务器请求该文件。或者你可以设置一个简单的 Flask / Express.js 模拟器服务。设置模拟器并不少见,您说得对,进行真正的呼叫可能不切实际,尤其是在服务每次请求都需要花钱的情况下。
  • @jonrsharpe 是的。我通过在具有不同场景的 json 文件中定义请求、响应来使用协议。但这是一种方式,因为与消费者不同,提供者永远不会验证合同。不过,我不确定公共 API 提供商如何确保他们的更改不会破坏现有客户端,特别是当 API 是公共的并且有数百/Ks 客户端时。
  • 通常,公共 API 使用 API 的语义版本控制来引入重大更改。希望他们遵循良好的流程!虽然不是很推荐,但您可以使用 pact 测试公共 API,并自己执行验证步骤,但这有点繁琐。您必须先使用 API 为提供者状态设置数据,然后才能执行实际在协议测试中的 API 请求。
  • 如何使用TestRestTemplate 进行这些外部 API 调用。

标签: spring-boot integration-testing pact


【解决方案1】:

如果公共 API 有夸张的描述,您可以使用 Atlassian Pact Swagger Validator。我在这次演讲中描述了工作流程:https://www.youtube.com/watch?v=79GKBYSqMIo#t=39m10s

【讨论】:

    【解决方案2】:

    另一种选择是为外部服务创建一个模拟 API。有一些免费的服务,如https://mockfirst.comhttps://www.mockable.io/ 等,您可以在其中执行此操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多