运行 Docker 在 JUnit 中测试

测试容器

Java库(例如JUnitMockito)使Java中的单元测试变得简单,但是集成测试没有万能。除了模拟的单元测试外,集成测试对于确保访问外部服务时软件的正确功能也很重要。以前,我们针对此问题采用了不同的方法,例如:

  • 嵌入服务
  • 运行服务
  • 运行服务的Docker容器

嵌入服务可能很困难(尤其是如果不是Java的话)。直接或远程运行它们会增加大量工作,以配置维护所有开发人员和您的持续集成服务并使之可用。为该服务运行Docker容器是我们的首选方法,但是在本地进行设置,以及将其作为CI构建的一部分,这与基本测试方法都不合。对于我们来说,这是一个普遍而令人沮丧的痛点。

测试容器

我们最近切换到使用TestContainers来解决此问题。TestContainers是MIT许可的开源项目,用于运行Docker容器进行JUnit测试。

好处

与我们以前的方法相比,这有很多好处。首先,我们针对服务的真实实例(而不是某些模拟版本或嵌入式版本)运行测试,这些行为可能会有所不同。由于容器仅用于测试,因此它们与其他测试是隔离的,并且可重现性更高。设置和配置在它们所属的测试类中完成。它还使您可以轻松地针对服务的不同版本重复测试,从而可以正确确定兼容性并检查服务的新版本不需要更改自己的代码。

用例

这种用于集成测试的技术可以轻松地应用于多个用例,其中一些具有更专业的支持:

例如

以下示例显示了如何为Redis设置集成测试。

<span style="color:#f8f8f2"><span style="color:#eff0f9"><code>import org.junit.Rule;
import org.junit.Test;
import org.testcontainers.containers.GenericContainer;

import redis.clients.jedis.Jedis;

public class RedisIntegrationTest {

  private static final String DOCKER_IMAGE = "redis:3.2.9";

  private final Jedis jedis;

  @Rule // 1
  public static GenericContainer redis = new GenericContainer(DOCKER_IMAGE).withExposedPorts(6379); // 2, 3

    @Before
    public void setUp() throws Exception {
        Jedis jedis = new Jedis(redis.getContainerIpAddress(), redis.getMappedPort(6379)); // 4
    }

  @Test
  public void yourTest() {
    //Your test code here
  }

}
</code></span></span>
  1. @Rule为每个测试运行一个新的容器,您可以更改@ClassRule为测试类的单个容器。
  2. 它还支持使用来将Dockerfiles或Docker Compose文件用于非标准,未发布的容器DockerComposeContainer
  3. 其他类似的标准docker配置.withVolume(), withEnv(), withCommand()可用。
  4. GenericContainer对象获取所需的配置。

缺点

没有!开个玩笑,也许有一些缺点,但是我们认为它们是值得的:

  • 您需要可使用docker来运行测试。(即在您的本地设备和CI服务器上),但是谁没有呢?
  • 您需要使Docker可用(这可能需要公开Docker套接字)
  • 您必须下载图像,但这仅需要一次。
  • Windows支持仅在Alpha中。

from:https://dev.to//committedsw/docker-in-junit-tests-4p4i

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在集群测试样例的步骤如下: 1. 编写测试代码和样例数据,确保测试代码可以在本地运行成功; 2. 将测试代码和样例数据上传到集群上; 3. 在集群上配置好测试环境,例如安装必要的依赖和设置好测试的输入输出路径等; 4. 运行测试代码,获取测试结果; 5. 对比测试结果和预期结果,确认测试是否通过。 具体的操作步骤可能因为集群的不同而有所区别,你需要查看你所使用的集群的文档或者向管理员咨询具体的操作步骤。 ### 回答2: 在集群测试样例是一个常见的需求,可以采取以下步骤: 1. 获取测试环境:首先,需要为测试样例准备一个可用的集群环境,可以使用云服务提供商提供的集群服务,如云服务器、容器服务或者Kubernetes等。也可以搭建自己的集群环境,如使用虚拟化软件搭建多台虚拟机。 2. 准备测试样例:编写测试样例代码,并确保其能够在集群环境运行测试样例应该是自动化的,方便批量运行和结果验证。可以使用工具或框架来编写测试样例,如Junit、TestNG、Robot Framework等。 3. 配置测试环境:根据测试样例的需要,配置集群环境。可能需要配置集群节点、网络、存储等资源,确保测试能够运行所需的环境。 4. 分配测试资源:将测试样例分配到集群的各个节点上执行。可以使用集群管理工具来实现测试资源的分配和执行,如YARN、Mesos、Docker Swarm等。也可以使用自动化部署和执行工具,如Ansible、Jenkins等。 5. 运行测试样例:通过集群管理工具或自动化部署工具,执行测试样例代码。测试样例会在分配的节点上并行或串行运行,执行相应的测试逻辑。 6. 收集和分析结果:测试样例执行完毕后,收集测试结果,并对结果进行分析。可以将结果保存到集群的某个共享存储,方便进一步分析和对比。 7. 故障处理:在测试过程可能会出现故障,如节点宕机、网络断等。需要根据具体情况进行故障分析和处理,确保测试过程的稳定性和可靠性。 通过以上步骤,就可以在集群测试样例,实现对集群环境的验证和功能测试。可以帮助发现潜在的问题和性能瓶颈,提高集群的可靠性和性能。 ### 回答3: 在集群测试样例可以通过以下步骤实现: 1. 环境搭建:首先要搭建一个集群环境,包括多台服务器、网络连接等。可以使用分布式系统管理工具如Kubernetes、Docker Swarm等,或者手动搭建集群。 2. 选择合适的测试框架:根据实际需求选择合适的测试框架,如Junit、PyTest等。确定使用的测试框架后,在集群安装和配置测试框架所需的依赖和工具。 3. 编写测试样例:根据需求编写测试样例。测试样例应包括各种测试场景,以覆盖不同的功能和边界条件。确保测试样例具有可重复性和独立性,可以在集群独立运行。 4. 分布式测试执行:使用测试框架的分布式测试功能,将测试样例分发到集群的不同节点上执行。可以使用工具如分布式任务调度器,将测试任务分配给不同的节点,并收集和整理测试结果。 5. 数据共享和同步:在集群运行测试样例时,可能需要共享测试数据和配置文件。可以使用集群的共享存储系统,如NFS、GlusterFS等,来实现数据的共享和同步。 6. 测试结果分析:收集测试结果,对测试样例的运行结果进行分析和评估。根据测试结果,找出问题并修复,以提高系统的稳定性和性能。 7. 监控和调优:在集群运行测试样例时,需要对系统性能和资源使用进行监控。根据监控数据,进行系统调优,提高测试运行效率和稳定性。 通过以上步骤,可以在集群测试样例,并获取有效的测试反馈和性能数据,帮助改进系统的质量和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值