spring-boot - 合同测试 - 带有外部 SOAP/REST 下游服务的 Spring Boot 微服务
问题描述
我们有一组相互通信的微服务和一些外部下游服务。Spring Cloud Contract 用于集成测试以检查服务接口。我能够测试微服务之间的通信合同。
我想知道如何为生产者编写合同测试
- 不提供任何合约(无法访问源代码)
- 基于 SOAP
我可以强加消费者自己的合同吗?
在这方面找不到有用的 SCC 文档。任何有用的指针表示赞赏。谢谢!
解决方案
如果它是基于 SOAP 的,那么它就是基于标准 XML 的通信。您可以生成基于 XML 的合同(示例在这里https://docs.spring.io/spring-cloud-contract/docs/current-SNAPSHOT/reference/htmlsingle/#contract-dsl-xml)。现在,至于您无法访问源代码的那个,您可以:
- 您可以创建一个通过代理(例如 WireMock 代理)到真实应用程序的测试,然后您将以存根的形式存储该通信(https://www.youtube.com/watch?v=ZyHG- VOzPZg),您还可以检查代码(https://github.com/spring-cloud-samples/the-legacy-app/tree/master/stubs_with_proxy)。这里的问题是生产者可能不是幂等的,或者可能需要对输入进行大量具体设置才能获得正确的响应(例如,精确定义的日期)。
- 您可以在消费者端创建合同,告诉 stubrunner 他们在哪里(https://docs.spring.io/spring-cloud-contract/docs/current-SNAPSHOT/reference/htmlsingle/#features-stub-runner-stubs-协议)并打开
generateStubs
功能(https://docs.spring.io/spring-cloud-contract/docs/current-SNAPSHOT/reference/htmlsingle/#features-stub-runner-generate-stubs-at-runtime),例如代码(https://github.com/spring-cloud-samples/spring-cloud-contract-samples/blob/master/consumer_with_latest_2_2_features/src/test/java/com/example/GenerateStubsTest.java)。这里的问题是,作为消费者,你可以写任何你想要的东西,它可能与现实没有任何关系。另一方面,您已经拥有可以上传到生产者方的合同,并要求他们在某一天实施他们的部分。
由您决定您更喜欢哪一个,请记住每个解决方案都可能存在问题。
至于 Pact,Pact 遵循第二种方法,因为消费者定义了交互的外观。这又可能与现实无关。
推荐阅读
- php - 在 cron 中出现错误:要求:找不到命令
- mysql - 如何计算与 MySQL 中另一列中特定行关联的唯一值?
- swift - 为什么blob插入失败?
- apache-kafka - 将 IBM MQ 与 Kafka 进行比较
- lua - 尝试索引 upvalue 'player'(一个 nil 值)
- angular - 想将数据从角度发送到spring boot api
- java - 将 Java 添加到 NGINX Docker 或将 NGINX 添加到 Alpine 上的 Java Docker?
- node.js - 未使用 jwt 登录以返回身份验证失败
- python - 为什么 find 对象不可迭代?
- wso2 - 如何在 WSO2 DSS 的输出 json 映射中将 json 元素配置为可选?