【发布时间】: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