我想为一个管道编写一个端到端测试,用 Spring Boot 构建。
考虑两个微服务A、B,其中B使用A的输出并生成RESTful API,它们使用rabbitmq连接并依赖于外部数据库。
我希望实现以下目标:
1.创建一个同时包含两个微服务的新项目
1.创建将JPA提供程序配置为内存中数据库的测试配置
1.将自定义MQ注入A、B以连接它们(rabbitmq不是紧耦合的)
1.写入测试
基本上是将白色部件替换为仿制品,并测试彩色部件。
这样做有意义吗?A和B的测试覆盖率是不完整的,这样的测试将保证A和B之间的契约成立。有更好的方法吗?
4条答案
按热度按时间osh3o9ms1#
如果你有时间,我建议你读一读这个:https://martinfowler.com/articles/microservice-testing/
端到端测试的目的不是要进行100%的线路覆盖。
gwbalxhn2#
我建议你使用Spring-cloud-contract,它可以帮助你维护微服务之间的合同(生产者-消费者合同),它既可以用于基于HTTP的通信,也可以用于基于事件的通信。
ztmd8pv53#
关于这个主题,我的第一个想法是,如果它是一个端到端的测试,那么你应该忘记你使用的是哪个框架,因为这关系到这个上下文中的实现。
从这个Angular 来看,您有两种方式来行程env特定的组态:
SPRING_PROFILES_ACTIVE
env var来激活它测试运行器可以保持简单,我会编写一个基于JUnit的测试套件,它使用RestAssured,或者类似的东西。
我希望这能给你一个线索。当然,这是一个广泛的主题,所以进入每一个细节不适合这样的答案。
pinkon5k4#
另一种方法是单独测试每个组件,并模拟RabbitMQ服务器另一端的依赖服务。
例如,您可以使用Traffic Parrot,它可以作为CI/CD管道的一部分在Docker容器中运行。
下面是一个video demo,说明如何使用该工具将模拟响应消息发送到aysnc request/response pattern中的RabbitMQ队列。
第一次