目前,我有几个运行良好的集成测试,但是我正在使用注释@QuarkusTestResource在夸克启动之前通过测试容器启动容器,并通过重写扩展QuarkusTestResourceLifecycleManager的容器类的开始方法来调整属性以适应随机测试容器端口。
为了进行一些优化,例如,我希望重用启动kafka的容器,因为启动它需要6-8秒,并在我的几个集成测试中重用它。我一直没能这么做。因为Quarkus管理生命周期,每次它停止,在每个测试类之间,它也停止每个容器。我尝试将来自测试容器的单例容器与Quarkus测试资源混合使用,但它不起作用。下面是我的一个集成测试类开始的片段:
@QuarkusTest
@Tag(INTEGRATION_TEST)
@QuarkusTestResource(value = KafkaNode.class, restrictToAnnotatedClass = true, parallel = true)
class MyIntegrationTest { ... }我的KafkaNode课程:
public class KafkaNode implements QuarkusTestResourceLifecycleManager {
static KafkaContainer kafka = new KafkaContainer(DockerImageName.parse("confluentinc/cp-kafka:6.2.1"))
.withNetworkAliases("kafkaNode")
.withNetwork(CommonNetwork.getInstance());
@Override
public Map<String, String> start() {
kafka.start();
return Collections.singletonMap("myapp.kafka.servers",
kafka.getBootstrapServers());
}
@Override
public void stop() {
kafka.close();
}
}我对重用甚至重做测试的想法持开放态度,这样我就可以以另一种方式重用容器。
发布于 2022-04-01 15:30:41
您可以通过.withReuse(true)对容器使用实验性的可重用模式。
请注意,为了使其发挥作用,您需要:
testcontainers.reuse.enable=true文件中设置~/.testcontainers.properties属性.close() (它以任何方式以编程方式停止容器)一旦您相应地设置了所有内容,您的容器应该
请注意,所有运行时修改(配置、数据、主题等)在下一次测试时还会在那里。您需要采取适当的措施来避免不确定的测试,比如在每次测试运行中使用不同的/随机的主题名称。
还要注意,当您完成容器时,需要手动停止/删除它。Testcontainers将不再为您移除容器。
您还可以阅读本文,其中描述了如何从spring获得灵感:用于快速集成测试的带有测试容器的重用容器
发布于 2022-06-03 20:10:49
当使用多个QuarkusTestProfile时,测试上下文将被完全重新处理,因此即使是静态变量也不会被保留。我还没有找到一种方法来使用例如,当使用不同的QuarkusTestProfiles时,在一个测试中跨所有QuarkusTest的单个数据库。即使容器似乎存在于测试运行边界之间,我也不能在以后的测试运行中引用它来确定映射的端口,等等。
https://stackoverflow.com/questions/71680113
复制相似问题