【发布时间】:2020-11-12 20:38:22
【问题描述】:
我浏览了多个博客和官方文档,但无法解决我的问题。我正在使用 testContainers-scala 版本 0.38.1 和 scala 版本 2.11。
我正在尝试使用 testContainer-scala 创建一个简单的测试,如下所示:
class MyServiceITSpec extends AnyFlatSpec with ForAllTestContainer {
override val container = GenericContainer(dockerImage="my-service",
exposedPorts = Seq(8080),
env=(HashMap[String, String]("PARAM1" -> "value1", "PARAM2" -> "value2", "PARAM3" -> "value3")),
waitStrategy = Wait.forHttp("/")
)
"GenericContainer" should "start my service and say Hello! Wassupp" in {
assert(Source.fromInputStream(
new URL(s"http://${container.containerIpAddress}:${container.mappedPort(8080)}/").openConnection().getInputStream
).mkString.contains("Hello! Wassupp"))
}
}
在上面sn-p的基础上,我的理解是这样的(错的请指正):
- 端口 8155 由 docker 容器公开,并且将分配一个随机主机端口针对该端口。
- 我们可以将分配的端口作为 container.mappedPort 获取
在这里,我试图断言 http://localhost:mappedPort/ 返回 Hello! Wassupp。
但是,我收到以下错误:
Caused by: org.testcontainers.containers.ContainerLaunchException: Could not create/start container
at org.testcontainers.containers.GenericContainer.tryStart(GenericContainer.java:498)
at org.testcontainers.containers.GenericContainer.lambda$doStart$0(GenericContainer.java:325)
at org.rnorth.ducttape.unreliables.Unreliables.retryUntilSuccess(Unreliables.java:81)
... 18 more
Caused by: org.testcontainers.containers.ContainerLaunchException: Timed out waiting for URL to be accessible (http://localhost:32869/ should return HTTP 200)
at org.testcontainers.containers.wait.strategy.HttpWaitStrategy.waitUntilReady(HttpWaitStrategy.java:214)
at org.testcontainers.containers.wait.strategy.AbstractWaitStrategy.waitUntilReady(AbstractWaitStrategy.java:35)
at org.testcontainers.containers.GenericContainer.waitUntilContainerStarted(GenericContainer.java:890)
at org.testcontainers.containers.GenericContainer.tryStart(GenericContainer.java:441)
... 20 more
相同的图像运行得很好:
docker run -p 8081:8080 -e PARAM1=value1 -e PARAM2=value2 -e PARAM3=VALUE3 my-service
【问题讨论】:
-
您确定您的应用程序返回 http 代码 200? waitStrategy = Wait.forHttp("/") 意味着应该返回一个http响应。
-
是的,确实如此。但是,我发现这个问题的根源是缺少标题。添加下面的答案以供可能遇到类似问题的任何人参考。
标签: scala integration-testing testcontainers