成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

五分鐘教程:如何在Docker當中運行平行測試

譯文
運維 系統運維
如果你在使用Docker作為應用程序的外部測試工具,你會發現一個大問題,就是在運行平行測試時,在Docker主機里,所有文件會新建一個相同命名的容器,引起容器名沖突的錯誤。

【51CTO.com快譯】 如果想在Docker中運行平行測試,你可能會引起容器名沖突的錯誤,下面我們來談談如何避免這種錯誤。當你在CI環境下運行測試時,有時候要運行平行測試。這種平行程序需要使用編譯工具,如詹金斯、Gradle或者Maven插件。

如果你在使用Docker作為應用程序的外部測試工具(例如數據庫、郵件服務器、FTP服務器),你會發現一個大問題,就是在運行平行測試時,在Docker主機里,所有文件會新建一個相同命名的容器,以至于在你開始第二個平行測試時,你會得到一個關于沖突的容器名失敗,因為Docker主機試圖啟動兩個相同命名的容器,或者這兩個容器具有相同的綁定端口。

[[193395]]


針對這個問題,你可以這樣解決:

·你可以用一個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.    @Test 
  8.     public void should_print_port_binding() throws InterruptedException { 
  9.         System.out.println(TestOne.class.getCanonicalName() + " - " + portBinding); 
  10.         TimeUnit.SECONDS.sleep(4); 
  11.     } 
  12.  


你可以看到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

劉妮娜譯

【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】

責任編輯:劉妮娜 來源: 51CTO
相關推薦

2023-07-23 18:47:59

Docker開源

2021-12-01 06:50:50

Docker底層原理

2025-06-13 07:58:58

2017-03-01 17:47:46

Chrome

2025-05-22 10:00:00

DockerRedis容器

2020-06-16 08:47:53

磁盤

2024-12-11 07:00:00

面向對象代碼

2025-03-13 06:22:59

2009-11-16 10:53:30

Oracle Hint

2023-07-31 11:37:05

經營分析模型

2013-05-03 10:57:09

泛型泛型教程

2023-09-02 20:22:42

自動化測試軟件開發

2009-11-16 09:53:56

PHP上傳類

2022-12-16 09:55:50

網絡架構OSI

2025-01-21 07:39:04

Linux堆內存Golang

2009-11-17 14:50:50

Oracle調優

2023-09-07 23:52:50

Flink代碼

2019-08-09 10:33:36

開發技能代碼

2021-06-07 09:51:22

原型模式序列化

2009-10-22 16:18:19

Oracle表空間
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 9久久| 久久91精品| 中文字幕高清一区 | 亚洲精品免费视频 | 亚洲国产精品成人综合久久久 | 精品欧美乱码久久久久久 | 在线观看视频91 | 国产成人亚洲精品自产在线 | 国产成年人小视频 | 一区二区三区国产 | 在线观看av网站永久 | 在线亚州 | 国产永久免费 | 国产精品久久久久久妇女 | 日韩激情免费 | 日本午夜精品 | 亚洲成人中文字幕 | 久久国产一区二区三区 | 91免费在线 | 99免费看| a级片网站| 国产精品久久久久国产a级 欧美日韩国产免费 | 国产精品一区在线 | 日韩免费一级 | 久久久国产一区 | 夜夜艹 | 成人免费网站 | 美国十次成人欧美色导视频 | 久久99精品视频 | 精品久久久精品 | 亚洲最新在线视频 | 青青久视频 | 日日干夜夜操 | 欧美亚洲国语精品一区二区 | 亚洲欧美日韩在线一区二区 | 国产高清视频在线观看 | 毛色毛片免费看 | 日韩在线不卡 | 日日摸日日碰夜夜爽2015电影 | 国产在线一区二区三区 | 欧美一级毛片在线播放 |