2017-10-08 8 views
1

現在のプロジェクトの状況のた​​め、セレンテストのために2つのドッカー画像を併用する必要があります。別のドッカーコンテナからのザレニウムコマンドを実行する

1つはザレニウムと呼ばれます。私はそれを持って、ドッカーの作成デモを介して動作します。基本的にセレンドッカーレポのようなものですが、これはビデオを録画してあなたの進捗状況を示すことができます。

zalenium: 
     image: "dosel/zalenium" 
     container_name: zalenium 
     hostname: zalenium 
     tty: true 
     volumes: 
      - /Users/josephastrahan/seluser/videos:/home/seluser/videos 
      - /var/run/docker.sock:/var/run/docker.sock 
      - /usr/bin/docker:/usr/bin/docker 
     ports: 
      - 4444:4444 
     command: > 
      start --chromeContainers 1 
       --firefoxContainers 1 
       --maxDockerSeleniumContainers 8 
       --screenWidth 800 --screenHeight 600 
       --timeZone "Europe/Berlin" 
       --videoRecordingEnabled true 
       --sauceLabsEnabled false 
       --browserStackEnabled false 
       --testingBotEnabled false 
       --startTunnel false 
     environment: 
      - HOST_UID 
      - HOST_GID 
      - SAUCE_USERNAME 
      - SAUCE_ACCESS_KEY 
      - BROWSER_STACK_USER 
      - BROWSER_STACK_KEY 
      - TESTINGBOT_KEY 
      - TESTINGBOT_SECRET 

他の画像は、私は、ブラウザの自動化をトリガーするためのコマンドを実行できるようにモカとセレンwebdriverをのnodejs(NPMパッケージ)をプリインストールNodeJSサーバーです。ここの詳細(https://github.com/SeleniumHQ/selenium/tree/master/javascript/node/selenium-webdriver)とここに(https://hub.docker.com/r/qmu1/selenium-webdriver-node/

ドレイパーから走っているザレニアムはちょうどいいところです。毎秒更新される時刻が正しく表示されるため、ライブビューが確実に表示されます。ここで私が使用している他のドッキングウィンドウコンテナ(https://hub.docker.com/r/qmu1/selenium-webdriver-node/)のドキュメントによると

enter image description here

、私はこのようなドッキングウィンドウコマンドを使用して簡単にテストを実行することができるはずです。

HERE=$(pwd) 

echo "" 
echo "----------------------------" 
echo "Running an example" 
echo "----------------------------" 
echo "" 

docker run -it --rm \ 
    -v $HERE:/workspace \ 
    qmu1/selenium-webdriver-node:latest /bin/sh -c " 
     mocha sample.js --timeout=10000 
" 

このコマンドは、自分のニーズに合うように変更されました。

docker run -it --rm --net=distributiontech_default -v $HERE:/workspace qmu1/selenium-webdriver-node:latest /bin/sh -c "mocha tests/seleniumtest.js --timeout=10000" 

私は応答を得た:

all modules are ready! 


    0 passing (1ms) 

問題がある... Zaleniumに私は何もそれも働いたかどうかを確認するために、ビューア上で起こる表示されませんでしたか?

私のセレンスクリプトは以下のようになります。

//Run using this project (https://github.com/qmu/dockerfiles/blob/master/src/selenium-webdriver-node/example/bin/run) 

"use strict"; 

const webdriver = require('selenium-webdriver'), 
    By = webdriver.By, 
    until = webdriver.until, 
    test = require('selenium-webdriver/testing'); 

const expect = require('expect.js'); 
const assert = require('assert'); 

// var driver = new webdriver.Builder() 
// .withCapabilities(webdriver.Capabilities.chrome()) 
// .usingServer('http://localhost:4444/wd/hub') 
// .build(); 

var driver = new webdriver.Builder() 
    .forBrowser('firefox') 
    .usingServer('http://zalenium:4444/wd/hub') 
    .build(); 

driver.get('http://www.google.com'); 
driver.findElement(webdriver.By.name('q')).sendKeys('simple programmer'); 
driver.findElement(webdriver.By.name('btnG')).click(); 
//driver.quit(); 

console.log('all modules are ready!'); 

私は--netコマンドを使わずに...と運が無かった。ネットワークの詳細とコンテナが動作していることがわかります。 zaleniumがdistributiontech_defaultネットワークに追加されていることが分かります。

enter image description here

enter image description here

enter image description here

どのように私はZaleniumを実行しているドッキングウィンドウハブにセレンのコードを実行しているドッキングウィンドウコンテナに接続するのですか?

私はどちらか...

var driver = new webdriver.Builder() 
    .forBrowser('firefox') 
    .usingServer('http://localhost:4444/wd/hub') 
    .build(); 

が、運にこれを変更してみました。私はそれがlocalhostと言うところの偽のアドレスを置くことができ、何かエラーや何か奇妙なことを起こさないようです。

+0

私は最近新しいスクリプトを作成し、自分のマシン上でローカルにzaleniumをテストして正常に動作するように更新したいと考えています。私はちょうどzaleniumにアクセスする他のドッカーのコンテナを取得するように見えることはできません。つまり、zaleniumがローカルマシン上で直接動作していて、他のドッカーコンテナからはアクセスできないことを確認できます。 –

+0

他の誰もこれを正常に実行できましたか? –

答えて

1

私は正確に何をしたのか分かりませんが、これらの手順の1つでは、突然動くようになりました。私はそれが私がスクリプトを書いていた方法だと思う。

ドッカーコンテナで最初にモカテストを行うには、私が使ったコマンドがあります。

docker run -it --rm --net=distributiontech_main -v $HERE:/workspace qmu1/selenium-webdriver-node:latest /bin/sh -c "mocha tests/seleniumtest.js --timeout=10000" 

あなたは正しい--net(ネットワーク)とボリューム上の正しい場所になり、自分自身のために正しいの.jsファイルパスを使用したいと思うでしょうことに注意してください。

私はネットワーク名は、あなたのプロジェクトがある名前がデフォルトになります...私は一番下

私が入れた各サービスのその後
networks: 
    main: 

に追加

networks: 
      - main 

を使用していた私の作曲家・ファイルがあなたが作曲者ファイルで定義した_と名前で始まります。現在のネットワークを表示するには、コマンドdocker network lsを使用します。あなたはdocker network rm networknamehereで古い未使用のものをクリアすることができます。デフォルトであるので、ブリッジ、ホスト、またはnoneを削除しないでください。

この手順は、デフォルトでドッカーの作成から作成されるため、ネットワーク上に配置する必要はありません。 docker network lsコマンドを使用すると表示されます。私のために働いた

アン例のセレンファイルは、ここで重要な私は、同じネットワーク、.usingServer('http://zalenium:4444/wd/hub')にされていないzaleniumを参照してくださいです。この...

"use strict"; 

var webdriver = require('selenium-webdriver'), 
     { describe, it, after, before } = require('selenium-webdriver/testing'), 
     By = webdriver.By, 
     until = webdriver.until; 
     var driver; 

    describe('Login Test', function() { 
      this.timeout(50000);//50 seconds 

      beforeEach(function(){ 
       driver = new webdriver.Builder() 
        .withCapabilities({'browserName': 'chrome','name':'Chrome Test','tz':'America/Los_Angeles','build':'Chrome Build','idleTimeout':'60'}) 
        .usingServer('http://zalenium:4444/wd/hub') 
        .build(); 

       driver.get('http://distribution.tech.sel'); 

      }); 

      afterEach(function(){ 
        driver.quit(); 
      }); 

      //this.timeout(20000); 

      it('Should show welcome message after entering credentials', function() { 
       driver.findElement(By.name('_username')).sendKeys('**'); 
       driver.findElement(By.name('_password')).sendKeys('**'); 
       driver.findElement(By.css("button")).click(); 

      }); 

      it('The title should say something interesting', function() { 

      }); 

      it('And this thing too...', function() { 

      }); 
}); 

お知らせした、これは自動的にIPアドレスを解決し、スクリプトはzaleniumサーバーを簡単に見つけることができます。

もう1つのことは、別のコンテナに自分のウェブサイトがあるので、これを追加して作者のファイルに簡単にアクセスできるようにしたことです。

networks: 
      main: 
       aliases: 
        - distribution.tech.sel 

これは、あなたがそれにアクセスするときに、プロジェクトを参照するためにドメイン名を使用できるように、それはエイリアスを作成

networks: 
-main 

を置き換えます。技術的に私の作曲家ファイルで私はサービス「ウェブ」を呼び出し、私はそれにアクセスすることができましたが、私のサイトではドメイン名情報を使ってベータ版やデベロッパーモードかどうかを判断し、接続する際には、私の場合。

これは誰かを助けることを望みます。

例全体dockercompose.ymlファイル

version: "3" 
services: 
    dblive: 
     image: mysql:5.5.52 
     volumes: 
      - ./db_data_live:/var/lib/mysql 
     restart: always 
     environment: 
      MYSQL_ROOT_PASSWORD: ** 
      MYSQL_DATABASE: ** 
      MYSQL_USER: ** 
      MYSQL_PASSWORD: ** 
     networks: 
      - main 

    dbdev: 
     image: mysql:5.5.52 
     volumes: 
      - ./db_data_dev:/var/lib/mysql 
     restart: always 
     environment: 
      MYSQL_ROOT_PASSWORD: ** 
      MYSQL_DATABASE: ** 
      MYSQL_USER: ** 
      MYSQL_PASSWORD: ** 
     networks: 
      - main 

    phpmyadmin: 
     depends_on: 
      - dblive 
      - dbdev 
     image: phpmyadmin/phpmyadmin 
     environment: 
      PMA_ARBITRARY : 1 
     restart: always 
     ports: 
      - "8081:80" 
     networks: 
      - main 

    zalenium: 
     image: "dosel/zalenium" 
     container_name: zalenium 
     hostname: zalenium 
     tty: true 
     volumes: 
      - /Users/josephastrahan/seluser/videos:/home/seluser/videos 
      - /var/run/docker.sock:/var/run/docker.sock 
      - /usr/bin/docker:/usr/bin/docker 
     ports: 
      - 4444:4444 
     command: > 
      start --chromeContainers 2 
       --firefoxContainers 2 
       --maxDockerSeleniumContainers 8 
       --screenWidth 800 --screenHeight 600 
       --timeZone "America/Los_Angeles" 
       --videoRecordingEnabled true 
       --sauceLabsEnabled false 
       --browserStackEnabled false 
       --testingBotEnabled false 
       --startTunnel false 
     environment: 
      - HOST_UID 
      - HOST_GID 
      - SAUCE_USERNAME 
      - SAUCE_ACCESS_KEY 
      - BROWSER_STACK_USER 
      - BROWSER_STACK_KEY 
      - TESTINGBOT_KEY 
      - TESTINGBOT_SECRET 
     networks: 
      main: 
       aliases: 
        - zalenium.test 

    web: 
     #build: ./ 
     depends_on: 
      - dblive 
      - dbdev 
      - zalenium 
     image: ** 
     volumes: 
      - ./web:/var/www 
      - ./config/custom.php.ini:/etc/php5/apache2/conf.d/custom.php.ini 
      - ./logs/apache_error.log:/var/log/apache2/error.log 
      - ./logs/apache_access.log:/var/log/apache2/access.log 
      - ./config/apache_default.conf:/etc/apache2/sites-available/000-default.conf 
      - ./config/apache_default-ssl.conf:/etc/apache2/sites-available/default-ssl.conf 
      - ./config/ssl/apache.key:/etc/apache2/ssl/apache.key 
      - ./config/ssl/apache.crt:/etc/apache2/ssl/apache.crt 
      - ./web/public_html/livesite:/app 
      - ./web/public_html/devsite:/appdev 
     restart: always 
     ports: 
      #Standard HTTP Port 
      - "80:80" 
      #Below allows access to local computer from outside ports 
      - "8080:80" 
      #Standard SSH Port 
      - "443:443" 
      #Below allows access to local computer from outside ports for SSH Testing 
      - "4443:443" 
     extra_hosts: 
      - "distribution.tech:127.0.0.1" 
      - "dev.distribution.tech:127.0.0.1" 
      - "distribution.tech.local:127.0.0.1" 
      - "dev.distribution.tech.local:127.0.0.1" 
     networks: 
      main: 
       aliases: 
        - distribution.tech.sel 
     # external_links: 
     #  - web:dev.distribution.tech 
     #  - web:distribution.tech 
networks: 
    main: 
1

私は同様の問題があったと私は私がドッキングウィンドウのインスタンスと名前付きZaleniumグリッドインスタンスをリンクすることができるように、私は--linkコマンドを使用することができました

docker run --privileged --name stg-selenium-client --rm=true --link zalenium:hub hub.platformservices.io/sbg_core_automation/core-test-runner-with-maven-dependencies:0.12 <command to execute tests> 
+0

これもうまくいきます。それは、ドッカーの作成なしで手動で行う方法です –

関連する問題