Spring微服务端到端测试

时间:2018-04-26 10:18:14

标签: java spring testing

我想为一个用spring boot构建的管道编写端到端测试。

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

System scheme

我想实现类似的目标:

  1. 创建一个包含两个微服务的新项目
  2. 创建一个将JPA提供程序配置为内存数据库的测试配置
  3. 将自定义MQ注入A,B以连接它们(rabbitmq没有紧密耦合)
  4. 编写测试
  5. 基本上用模具替换白色部件并测试彩色部件。

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

定义了5个容器
  • 服务A
  • 服务B
  • 的RabbitMQ
  • 也许是数据库,除非你想坚持内存中的方法
  • 和一个用于运行测试的单独容器

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

  • 您可以在单独的弹簧配置文件中定义特定于测试的配置,并通过在docker-compose文件中定义SPRING_PROFILES_ACTIVE env var来激活它。
  • 您在属性文件中传递配置,并将其安装在docker-compose文件

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

我希望这给出一个线索。当然,这是一个广泛的主题,所以进入每个细节并不适合SO答案。

答案 2 :(得分:1)

如果你有时间,我建议你阅读: https://martinfowler.com/articles/microservice-testing/

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

相关问题