测试容器:服务就绪后同步日志
Testcontainers: Synchronizing on Logs after the Service Was Ready
我正在使用 Testcontainers 开发一些组件测试。我可以同步服务就绪测试。但是,服务准备就绪后,我需要准备夹具和 运行 测试,直到夹具完全加载。
被测容器会写一个日志,我可以用它来了解夹具何时完全加载。但是,我找不到同步该日志的方法。
Testcontainers 库是否为此提供任何实用程序?
如果您使用的是 GenericContainer 对象类型,您可以简单地执行如下操作:
WaitingConsumer consumer = new WaitingConsumer();
container.followOutput(consumer, STDOUT);
consumer.waitUntil(frame ->
frame.getUtf8String().contains("STARTED"), 30, TimeUnit.SECONDS);
否则您可以使用以下方法处理整个日志:
container.getLogs();
希望对您有所帮助!
可以使用日志消息等待策略来实现。
public GenericContainer containerWithLogWait = new GenericContainer(DockerImageName.parse("redis:5.0.3"))
.withExposedPorts(6379)
.waitingFor(
Wait.forLogMessage(".*Ready to accept connections.*\n", 3)
);
您还可以通过从 AbstractWaitStrategy
.
扩展它来创建自己的策略
查看 this page 了解更多详情。
我正在使用 Testcontainers 开发一些组件测试。我可以同步服务就绪测试。但是,服务准备就绪后,我需要准备夹具和 运行 测试,直到夹具完全加载。
被测容器会写一个日志,我可以用它来了解夹具何时完全加载。但是,我找不到同步该日志的方法。
Testcontainers 库是否为此提供任何实用程序?
如果您使用的是 GenericContainer 对象类型,您可以简单地执行如下操作:
WaitingConsumer consumer = new WaitingConsumer();
container.followOutput(consumer, STDOUT);
consumer.waitUntil(frame ->
frame.getUtf8String().contains("STARTED"), 30, TimeUnit.SECONDS);
否则您可以使用以下方法处理整个日志:
container.getLogs();
希望对您有所帮助!
可以使用日志消息等待策略来实现。
public GenericContainer containerWithLogWait = new GenericContainer(DockerImageName.parse("redis:5.0.3"))
.withExposedPorts(6379)
.waitingFor(
Wait.forLogMessage(".*Ready to accept connections.*\n", 3)
);
您还可以通过从 AbstractWaitStrategy
.
查看 this page 了解更多详情。