【问题标题】:Spring microservice end-to-end testingSpring微服务端到端测试
【发布时间】:2018-04-26 10:18:13
【问题描述】:

我想为使用 Spring Boot 构建的管道编写端到端测试。

考虑两个微服务 A、B,其中 B 使用 A 的输出并生成一个 RESTful API。它们使用 rabbitmq 连接并依赖于外部数据库。

我想实现如下目标:

  1. 创建一个包含两个微服务的新项目
  2. 创建一个测试配置,将 JPA 提供程序配置为内存数据库
  3. 将自定义 MQ 注入 A、B 以连接它们(rabbitmq 未紧密耦合)
  4. 编写测试

基本上用模拟替换白色部分并测试彩色部分。

这有意义吗? A 和 B 的测试覆盖不完整,这样的测试将保证 A 和 B 之间的合同成立。有更好的方法吗?

【问题讨论】:

    标签: java spring testing


    【解决方案1】:

    如果您有时间,我建议您阅读以下内容: https://martinfowler.com/articles/microservice-testing/

    端到端测试的目的不是要做到 100% 的线路覆盖率。

    【讨论】:

      【解决方案2】:

      我建议您使用Spring-cloud-contract。它可以帮助您维护微服务之间的合同(生产者-消费者合同)。 它可用于基于 HTTP 和基于事件的通信。

      【讨论】:

        【解决方案3】:

        我对这个主题的第一个想法是,如果它是一个端到端的测试,那么你应该忘记你使用哪个框架,因为这与在这个上下文中的实现有关。所以我会创建一个测试项目,它本质上是一个 docker-compose 文件,并为

        定义了 5 个容器
        • 服务 A
        • 服务 B
        • RabbitMQ
        • 也可能是数据库,除非您想坚持使用内存中的方法
        • 以及用于运行测试的单独容器

        从这个角度来看,您有两种处理特定环境配置的方法:

        • 您在单独的 spring 配置文件中定义特定于测试的配置,并通过在 docker-compose 文件中定义 SPRING_PROFILES_ACTIVE env var 来激活它
        • 您将配置传递到属性文件中,然后将其挂载到 docker-compose 文件中

        测试运行器可以保持简单,我会编写一个基于 JUnit 的测试套件,它使用 RestAssured 或类似的东西。

        我希望这能提供一个线索。当然,这是一个广泛的话题,因此深入每个细节并不适合 SO 答案。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-10-23
          • 1970-01-01
          • 2020-01-11
          • 2021-11-03
          • 2020-02-14
          • 2020-04-16
          • 2021-11-08
          相关资源
          最近更新 更多