问题标签 [testcontainers]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
305 浏览

docker - 无法从同一网络中的另一个测试容器连接到 neo4j 测试容器

这里有一个在同一网络中创建 Testcontainers 的好例子:如果 Testcontainers 不存在,可以为我创建 docker 网络吗?

我的环境有点不同,不幸的是我没有得到两个容器之间的连接。

我的设置如下所示:

Wenn 我使用这个配置运行测试,我得到了错误

知道如何正确地将 neo4j 容器的 ip 传递给 myservice 容器吗?

0 投票
1 回答
2553 浏览

java - 如何将本地 Docker 映像与测试容器一起使用?

我想在testcontainers中使用仅限本地的 Docker 映像。

代码如下所示:

然而,看起来另一个同名的图像是从远程注册表中获取的。

如何强制测试容器使用本地图像?

0 投票
2 回答
7004 浏览

java - Testcontainer 的 Redis 容器连接到另一个容器,然后是测试中定义的容器

我正在我的 Spring Boot 应用程序中进行集成测试。该应用程序需要一个 Redis 才能使用。

在开发阶段,我有一个应用程序连接到的 Redis 本地容器。

对于集成测试,我使用的是testcontainers,并且我还按照他们的示例说明了如何使用 Redis 容器

在某些时候,我明白只有在开发容器启动并运行时测试才能正确运行。如果它关闭,则集成测试正在下降,因为它们无法到达 Redis。

所以集成测试类看起来像这样:

运行测试时,我可以在日志中看到:

但随后应用程序失败,因为它无法访问 Redis:

Caused by: redis.clients.jedis.exceptions.JedisConnectionException: java.net.ConnectException: Connection refused: connect

在某些时候,我尝试更改容器应该启动的端口。从 6379 到 16379(在代码和 yml 文件中都进行了更改),但随后测试进入了无限循环并打印到屏幕:

14:41:57.258 [ducttape-0] DEBUG org.testcontainers.containers.ExecInContainerPattern - /amazing_beaver: Running "exec" command: /bin/bash -c </dev/tcp/localhost/16379 && echo

0 投票
1 回答
2197 浏览

java - 带有公司代理的测试容器

不同测试容器的每次启动都会抛出com.github.dockerjava.api.exception.InternalServerErrorException: {"message":"Get https://quay.io/v1/_ping: dial tcp x.x.x.x: getsockopt: connection refused"}

这并不奇怪(docker 在公司代理后面)。如何配置测试容器以使用特定的 HTTP 代理?

另一种方法可能是禁用“ping”命令并​​使用我们公司的 docker repo。

0 投票
1 回答
149 浏览

testing - 每个 Spek 套件运行一次数据库

一些测试需要运行数据库,例如,使用测试容器库。显然,启动它需要时间。

有没有办法在跨多个文件的整个 Spek 套件中只执行一次此操作?文档对此只字未提。

任何人都知道为什么这还没有实施?

0 投票
2 回答
416 浏览

java - 使用 DockerComposeContainer 从 compose 文件中仅启动一项服务

是否有可能以某种方式仅在 Testcontainers 中运行特定服务DockerComposeContainer

使用官方文档中的示例,我们可以只启动 Redis 吗?对我来说,所有服务都一直在启动(我是否使用过该withExposedService方法并不重要)。

我的意思是这样的方法:

0 投票
2 回答
1627 浏览

docker - 使用 docker compose 运行 Testcontainers 时的静态容器名称

我的应用程序由一个 Spring Boot 应用程序和一个数据库组成。我可以使用 docker-compose 在 Docker 中成功运行它们。我现在想使用一个类似的 Docker compose 文件和 testcontainers 来编写一些自动化测试。我失败了,因为 Spring Boot 应用程序的 application.yml 文件中的主机名与分配给数据库容器的随机名称不匹配,因此应用程序无法连接到数据库。

码头工人撰写

班级规则设置

应用程序.yml

测试运行时,将为容器分配名称,例如:

wtdopq2hneev_api_1 wtdopq2hneev_api-db_1

事实上,它似乎是在分配一个随机网络名称 (wtdopq2hneev) 而不是使用 my_network,这最终是我的问题。

我可以在 docker-compose.yml 文件中指定容器的名称,但是我不能“公开”我需要的服务,以便我可以从我的测试中调用我的 API:

我会以错误的方式解决这个问题吗?

  • Java版本:1.8.0_144
  • 测试容器版本:1.8.3
  • Docker for Mac 版本:17.09.0-ce-mac35 (19611)

Docker 版本有点旧,但我认为这不是问题

0 投票
1 回答
1876 浏览

spring - 如何使用 spring boot 和 spock 运行测试容器

我想在我的 Spring Boot 应用程序上使用带有 spock 的测试容器。

这些是我的依赖项:

我已经初始化了我的测试,如下所示:

但是当我运行测试时它不会启动redis容器。我的错误是什么。我怎样才能做到这一点。

我的 springBootVersion = '2.0.4.RELEASE' 我正在使用 Intelij。

这是日志输出:LOG

0 投票
1 回答
1007 浏览

java - 使用 @ClassRule 从套件运行单个测试失败

为了只创建一次环境并避免继承,我定义了一个 JUnit Suite 类,其中包含@ClassRule

还有一个在测试方法中使用 env 的测试类:

当我通过运行测试套件执行测试时,一切都按预期工作。但是,当我直接尝试运行(即使使用 IDE)SuiteTest1测试类时,它会失败并且不会调用套件中的任何内容(即@ClassRule@BeforeClass)。

关于如何以良好的方式实现 SuiteTest1 单次执行的任何建议(无需JUnitTest从内部调用静态方法SuiteTest1)?

0 投票
1 回答
1761 浏览

java - 将自定义 DB docker-image 与 Testcontainers 一起使用

我是 Testcontainers 的新手,所以我有一个问题。我在 Spring/Hibernate 上有应用程序。我有 docker-image (h2testbase) 和 mysql-base (myTestDb) 和数据。我使用 -p 6161:3306 在 docker 中运行该图像。在 test/resources 目录中,我有文件 application.properties。它包含下一个

我使用 mvn test - 它正在工作。现在我想用 Testcontainers 运行这些测试。我在 pom.xml 中添加了依赖

我扩展了 MySQLContainer 类

因为 MySQLContainer 使用 com.mysql.jdbc.Driver 并且它已被弃用。我的测试(例如)

我正在撞墙。如果我使用 mvn test,我会(通过 docker ps)看到容器已启动。它开始了两三次(并且映射在随机端口上进行,例如 328xx),但随后 maven 告诉

我现在该怎么办?如何告诉我的测试容器需要端口(6161)?如何使用 application.properties 中的参数?我找不到将自定义图像与数据库一起使用的代码示例。先感谢您

更新 为失败的测试添加完整结果。

有一些资料。我从这里(使用我的 TestMySql)尝试使用 MySqlContainer 进行测试。当我使用干净的 mysql:5.5 图像时 - 一切都很好。但是当我尝试在容器中添加一些修改(例如 addFixedExposedPort)时,它没有启动,因为端口已经分配。如果我从脚本添加数据 - 它是“无法创建容器”。如果我试图给它我的图像(h2testbase),再次“无法创建容器”。