Spring微服务端到端测试

hmae6n7t  于 2022-11-21  发布在  Spring
关注(0)|答案(4)|浏览(192)

我想为一个管道编写一个端到端测试,用 Spring Boot 构建。
考虑两个微服务A、B,其中B使用A的输出并生成RESTful API,它们使用rabbitmq连接并依赖于外部数据库。

我希望实现以下目标:
1.创建一个同时包含两个微服务的新项目
1.创建将JPA提供程序配置为内存中数据库的测试配置
1.将自定义MQ注入A、B以连接它们(rabbitmq不是紧耦合的)
1.写入测试
基本上是将白色部件替换为仿制品,并测试彩色部件。
这样做有意义吗?A和B的测试覆盖率是不完整的,这样的测试将保证A和B之间的契约成立。有更好的方法吗?

osh3o9ms

osh3o9ms1#

如果你有时间,我建议你读一读这个:https://martinfowler.com/articles/microservice-testing/
端到端测试的目的不是要进行100%的线路覆盖。

gwbalxhn

gwbalxhn2#

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

ztmd8pv5

ztmd8pv53#

关于这个主题,我的第一个想法是,如果它是一个端到端的测试,那么你应该忘记你使用的是哪个框架,因为这关系到这个上下文中的实现。

  • 服务A
  • 服务B
  • 兔MQ
  • 也可以使用数据库,除非您想坚持使用内存方法
  • 和用于运行测试的单独容器

从这个Angular 来看,您有两种方式来行程env特定的组态:

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

测试运行器可以保持简单,我会编写一个基于JUnit的测试套件,它使用RestAssured,或者类似的东西。
我希望这能给你一个线索。当然,这是一个广泛的主题,所以进入每一个细节不适合这样的答案。

pinkon5k

pinkon5k4#

另一种方法是单独测试每个组件,并模拟RabbitMQ服务器另一端的依赖服务。
例如,您可以使用Traffic Parrot,它可以作为CI/CD管道的一部分在Docker容器中运行。
下面是一个video demo,说明如何使用该工具将模拟响应消息发送到aysnc request/response pattern中的RabbitMQ队列。
第一次

相关问题