问题标签 [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.
junit - 有序启动和等待容器
我在使用@Testcontainers
Junit5 的测试中有两个容器,aKafka
和 a KafkaConnect
。
当我执行测试时,我发现一个错误,因为kafkaConnect
没有正确启动 Kafka Connect 服务(映射端口 8083 没有监听)。这是因为在执行kafkaConnect
之前启动kafka
并且在执行kafka:9092
期间到达url时kafkaConnect
没有获得响应,因为kafka
还没有运行。然后,我试图推迟kafkaConnect
启动以等待kafka
以确保kafka:9092
可用性。
我尝试了不同的方法来做到这一点,但我没有解决这个问题。我尝试添加一些配置。
startupTimeout
. 据我所知,这个配置不会推迟启动操作。它只是增加了检查容器是否启动的时间。
我还尝试了一些配置waitingFor
,例如基于超时的,正如预期的那样,产生的结果与withStartupTimeout
或基于端口,这并不能解决我的问题,因为它不指向kafka
容器,而是kafkaConnect
.
我也尝试添加一些启动尝试,但它并不能解决问题,因为它kafkaConnect
会重新启动几次,但总是在之前kafka
。
作为一个解决方案,我删除@Container
了kafkaConnect
声明以便手动使用它的生命周期管理,所以我在测试用例中添加了显式开始,见下文
此确保kafkaConnect
在kafka
. 但是,我没有找到通过策略、策略或类似的方式在容器定义期间定义顺序的解决方案,以便在容器之间添加依赖关系并避免强制性和手动的生命周期管理。
可能吗?
java - 在与测试容器的集成测试中,您如何管理 EM 或 EMF?
我有 java web 应用程序,我想为服务层编写集成测试。我决定使用testcontainers,所以在测试中我想调用服务,它将与 docker 容器中的数据库一起使用。
我的测试类看起来像下面的例子。
经测试的服务。
我需要在容器中创建连接到数据库的 EMF,然后将该 EMF 中的 EM 填充到经过测试的服务中。
感谢您的帮助或提示。
spring-boot - 尽管存在`@Transactional`,为什么这些数据库修改不回滚?
写了一个简短的便利扩展Testcontainers
:
现在想测试它。
- Flyway 加载 30 个条目。这些应该在
allDataPresent
canInsert
插入一个不带扩展名的条目canInsertWithExtension
做同样的事情,但通过扩展功能insertMultipleWithExtension
正如其名称所暗示的那样,并插入另一个 5
除了allDataPresent
测试用例(因为它是只读的)之外的所有测试用例都被注释了@Transactional
。
因此,我希望在测试方法之后回滚这些修改。
相反,发生的是
每个都@Test
可以自己正常工作。所以问题一定出在@Transactional
.
那为什么呢?更重要的是,我如何获得回滚?
完整的测试用例(也尝试注释类,没有任何区别):
docker - 在 Jenkins Docker 代理中使用测试容器:容器无法启动,NoRouteToHostException
我正在使用带有 Docker 代理的 Jenkins 声明式管道来构建和测试我的软件,包括使用测试容器运行集成测试。我可以在我的开发环境中运行我的 testcontainers 测试(不使用 Jenkins),但它们在 Jenkins 下失败了。
testcontainers Ryuk 资源收割守护进程不起作用
我可以通过将环境变量设置为. 但是,一些集成测试仍然一再失败。TESTCONTAINERS_RYUK_DISABLED
true
使用ElasticsearchContainer
重复的集成测试无法启动:等待 HTTP 端口响应超时。
然而,Elasticsearch 日志文件看起来不错,并且包含 Elasticsearch 在启动期间写入的最后一条日志消息(关于许可证)。
手动更改该容器以使用 aHostPortWaitStrategy
而不是默认值HttpWaitStrategy
并没有帮助。
在尝试调查或解决此问题时,我更改了测试代码以通过调用network.getId()
testcontainersNetwork
对象来显式启动 Docker 网络。然后失败了NoRouteToHostException
。
我该如何解决?
spring-boot - 使用 Testcontainers 执行运行集成测试的 Gitlab CI 管道作业时出现问题
我有一个 Spring Boot 应用程序测试,它使用 TestContainers ( https://www.testcontainers.org ) 对 KafkaContainer 运行一些集成测试。在本地运行时一切正常,但在 GitlabCI 管道中运行集成测试时,容器无法启动。这里的工作日志:
这里 Gitlab CI 配置:
这里亚军conf:
有什么帮助吗?谢谢
java - 使用 Docker 和 Testcontainers 进行数据库集成测试
经过一番研究后,我认为 Docker 容器可能非常适合使用测试容器进行数据库集成测试,因为这只需要一个运行数据库映像的 Docker 容器,该数据库映像复制将执行测试的数据库模式。该实例可以在每个开发人员的机器上本地运行,或者更好的是,一个实例可以由多个开发人员共享:如果需要,可以将自动化测试配置为从 Docker 中的同一映像为每个测试方法启动一个数据库实例,使用@Rule 注释。
在尝试为 Windows 7 安装 Docker 以使用它时,我不断收到以下错误,这似乎与 VirtualBox 有关:
我将分享我是如何解决这个问题的,以帮助其他可能遇到同样问题的人。
spring-boot - 测试容器和 Spring Boot 1.5
我们仍在使用 Spring Boot 1.5.x,我们想开始使用 TestContainers。但是,所有示例都使用 Spring boot 2.x,它使用TestPropertyValues
仅在 2.x 中可用的类。甚至可以将新的属性值应用于 1.5.x 中的可配置上下文吗?
这是在 2.x 中工作的代码:
}
java - SpringBoot 集成测试 Sybase 和 Testcontainers
是否可以使用带有 Testcontainers 的 sybase 数据库来使用 Spring Boot 进行集成测试?
我无法在本地机器上安装 docker。
docker - HBase + TestContainers - 端口重映射
我正在尝试使用测试容器对在 Docker 容器中启动的 HBase 运行集成测试。我遇到的问题对于客户端与 HBase 的交互方式可能有点独特。
当 HBase Master 在容器中启动时,它会将其 hostname:port 存储在 Zookeeper 中,以便客户端可以找到它。在这种情况下,它存储“localhost:16000”。
在我在容器外运行的测试用例中,客户端从 Zookeeper 检索“localhost:16000”并且无法连接。连接失败,因为该端口已被 TestContainers 重新映射到其他一些随机端口,而不是 16000。
任何想法如何克服这个问题?
(1) 一个想法是找到一种方法告诉 HBase 客户端使用重新映射的端口,忽略它从 Zookeeper 检索到的值,但我还没有找到一种方法来做到这一点。
(2) 如果我可以让 HBase Master 在 Zookeeper 中编写外部可访问的 host:port 也可以解决问题。但我不相信容器本身对测试容器如何进行端口重新映射有任何了解。
(3) 也许测试容器为这种情况提供了不同的解决方案?