阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

如何在Docker中运行平行测试快速入门教程

391次阅读
没有评论

共计 4625 个字符,预计需要花费 12 分钟才能阅读完成。

如果想在 Docker 中运行平行测试,你可能会引起容器名冲突的错误,下面我们来谈谈如何避免这种错误。当你在 CI 环境下运行测试时,有时候要运行平行测试。这种平行程序需要使用编译工具,如詹金斯、Gradle 或者 Maven 插件。

如果你在使用 Docker 作为应用程序的外部测试工具(例如数据库、邮件服务器、FTP 服务器),你会发现一个大问题,就是在运行平行测试时,在 Docker 主机里,所有文件会新建一个相同命名的容器,以至于在你开始第二个平行测试时,你会得到一个关于冲突的容器名失败,因为 Docker 主机试图启动两个相同命名的容器,或者这两个容器具有相同的绑定端口。

如何在 Docker 中运行平行测试快速入门教程

针对这个问题,你可以这样解决:

·你可以用一个 Docker 主机分别给每个文件做平行测试。
·你可以重复使用相同的 Docker 主机并且使用 Arquillian Cube Star 运算器。

Arquillian Cube 是 Arquillian 的一个扩展,可以用来在你的测试中管理 Docker 容器。使用 Arquillian Cube,你需要在计算机上运行一个 Docker 保护(可以是本地的或者不是),但大多数是本地的。

Arquillian Cube 提供了三种不同的方法来定义容器:

·定义一个容器组成文件
·定义一个容器对象
·使用容器对象 DSL

在下面的事例中,我将向您展示如何使用 Docker 组成和容器对象 DSL。Star 运算器可以让你指示 Arquillian Cube 随机命名 Cube,并且可以调整链接。这样一来,在执行平行测试时,就不会因为名称或者绑定端口发生冲突了。

我们来看一个例子:

  1. plugins {
  2.     id “io.spring.dependency-management” version “1.0.2.RELEASE” 
  3.  
  4.  
  5. apply plugin: ‘java’ 
  6.  
  7. repositories {
  8.     mavenCentral() 
  9.     jcenter() 
  10.  
  11. dependencyManagement {
  12.     imports {
  13.         mavenBom ‘org.jboss.arquillian:arquillian-bom:1.1.13.Final’ 
  14.     } 
  15.  
  16. dependencies {
  17.  
  18.     testCompile ‘junit:junit:4.12’ 
  19.     testCompile ‘org.jboss.arquillian.junit:arquillian-junit-standalone’ 
  20.     testCompile ‘org.arquillian.cube:arquillian-cube-docker:1.3.2’ 
  21.  
  22. test {
  23.     maxParallelForks = 2 
  24.     testLogging.showStandardStreams = true 
  1. #src/test/docker/docker-compose.yml 
  2.  
  3. redis*: 
  4.   image: redis:3.0.7 
  5.   ports: 
  6.     – “6379” 
  1. @RunWith(Arquillian.class) 
  2. public class TestOne {
  3.  
  4.     @HostPort(containerName = “redis*”, value = 6379) 
  5.     private int portBinding; 
  6.  
  7.  
  8.    @Test 
  9.     public void should_print_port_binding() throws InterruptedException { 
  10.         System.out.println(TestOne.class.getCanonicalName() + ” – “ + portBinding); 
  11.         TimeUnit.SECONDS.sleep(4); 
  12.     } 
  13.  

你可以看到 Docker- 组成 yml 文件从一个典型的 Docker- 组成文件发生的重要转变,它的名字是以星号 (*) 或者 redis* 结束的,这个名字应该是动态生成的。这里有三个测试,我们给大家演示第一个,其他两个也大同小异。

基本上,打印控制台绑定端口连接到服务器。最终建立一个 gradle 文件,执行两个平行试验,所以如果你在 gradle 运行测试,你会发现两个测试是同时执行的,当一个完成的时候,另一个也执行完毕了。然后,当你检查输出时,你会看到下一个输出。

  1. org.superbiz.parallel.runner.TestOne STANDARD_OUT 
  2.     CubeDockerConfiguration: 
  3.       serverUri = tcp://192.168.99.100:2376 
  4.       machineName = dev 
  5.       certPath = /Users/alex/.docker/machine/machines/dev 
  6.       tlsVerify = true 
  7.       dockerServerIp = 192.168.99.100 
  8.       definitionFormat = COMPOSE 
  9.       clean = false 
  10.       removeVolumes = true 
  11.       dockerContainers = containers: 
  12.       redis_9efae4a8-fcb5-4f9e-9b1d-ab591a5c4d5a: 
  13.         alwaysPull: false 
  14.         image: redis:3.0.7 
  15.         killContainer: false 
  16.         manual: false 
  17.         portBindings: !!set {56697->6379/tcp: null
  18.         readonlyRootfs: false 
  19.         removeVolumes: true 
  20.     networks: {} 
  21.  
  22.  
  23.  
  24. org.superbiz.parallel.runner.TestThree STANDARD_OUT 
  25.     CubeDockerConfiguration: 
  26.       serverUri = tcp://192.168.99.100:2376 
  27.       machineName = dev 
  28.       certPath = /Users/alex/.docker/machine/machines/dev 
  29.       tlsVerify = true 
  30.       dockerServerIp = 192.168.99.100 
  31.       definitionFormat = COMPOSE 
  32.       clean = false 
  33.       removeVolumes = true 
  34.       dockerContainers = containers: 
  35.       redis_88ff4b81-80cc-43b3-8bbe-8638dd731d8e: 
  36.         alwaysPull: false 
  37.         image: redis:3.0.7 
  38.         killContainer: false 
  39.         manual: false 
  40.         portBindings: !!set {56261->6379/tcp: null
  41.         readonlyRootfs: false 
  42.         removeVolumes: true 
  43.     networks: {} 
  44.  
  45.     //…… 
  46.  
  47. org.superbiz.parallel.runner.TestThree > should_print_port_binding STANDARD_OUT 
  48.   org.superbiz.parallel.runner.TestOne – 56261 
  49.  
  50. org.superbiz.parallel.runner.TestOne > should_print_port_binding STANDARD_OUT 
  51.   org.superbiz.parallel.runner.TestOne – 56697 
  52.  
  53. org.superbiz.parallel.runner.TestTwo > should_print_port_binding STANDARD_OUT 
  54. org.superbiz.parallel.runner.TestOne – 56697 

正如你在日志中看到的,容器的名字不是 Redis 或 redis*, 但是 redis 后面跟一个 UUID。此外你还可以看到,当输出打印时,绑定端口在每个情况下都是不同的。
如果你不想用 docker 组成的方式,你也可以用 DSL 容器对象的方法以编程方式定义容器,也可以支持 Star 运算器。我们来看看这种情况下的事例:

  1. @ClassRule 
  2. public static ContainerDslRule redisStar = 
  3.   new ContainerDslRule(“redis:3.2.6”, “redis*”) 
  4.   .withPortBinding(6379); 

这个使用容器对象的方法是相同的,你需要 Arquillian Cube1.4.0 来运行它以及容器对象。基于这一特点,你可以运行任何程度的平行测试,因为 Arquillian Cube 可以照顾到命名和端口绑定问题。请注意,在容器之间链接的情况下,你依然需要运行 Star 运算器,它将在运行时解决某些问题。了解更多 Star 运算器请点击这里。

原文作者:Alex Soto
原文标题:Running Parallel Tests in Docker

更多 Docker 相关教程见以下内容

Docker 安装应用(CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm

Ubuntu 14.04 安装 Docker  http://www.linuxidc.com/linux/2014-08/105656.htm

Ubuntu 15.04 下安装 Docker  http://www.linuxidc.com/Linux/2015-07/120444.htm

Docker 安装实例 http://www.linuxidc.com/Linux/2017-04/142666.htm

Docker 创建基础镜像  http://www.linuxidc.com/Linux/2017-05/144112.htm

在 Ubuntu 15.04 上如何安装 Docker 及基本用法 http://www.linuxidc.com/Linux/2015-09/122885.htm

Ubuntu 16.04 上 Docker 使用手记 http://www.linuxidc.com/Linux/2016-12/138490.htm

使用 Docker 分分钟启动常用应用  http://www.linuxidc.com/Linux/2017-04/142649.htm

Ubuntu 16.04 下 Docker 修改配置文件不生效解决办法  http://www.linuxidc.com/Linux/2017-05/143862.htm 

Docker 的详细介绍:请点这里
Docker 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-06/144635.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计4625字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7989060
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
【1024程序员】我劝你赶紧去免费领一个AWS、华为云等的主机

【1024程序员】我劝你赶紧去免费领一个AWS、华为云等的主机

【1024 程序员】我劝你赶紧去免费领一个 AWS、华为云等的主机 每年 10 月 24 日,程序员们都会迎来...
星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

  星哥带你玩飞牛 NAS-16:飞牛云 NAS 换桌面,fndesk 图标管理神器上线! 引言 哈...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...
星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛 NAS 硬件 02:某鱼 6 张左右就可拿下 5 盘位的飞牛圣体 NAS 前言 大家好,我是星...
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛 NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手! 作为动漫爱好者,你是否还在为...
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

  300 元就能买到的 ” 小钢炮 ”?惠普 7L 四盘位小主机解析 最近...
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

  240 元左右!五盘位 NAS 主机,7 代 U 硬解 4K 稳如狗,拓展性碾压同价位 在 NA...