ブログBlog

    • Selenium Dockerを使用したSelenium実行環境(Docker Compose環境)

    • 2017年12月28日
    • docker
    • docker compose
    • microsoft edge
    • selenium
    • Selenium WebDriver

Selenium Dockerについて

Selenium Dockerを使用すると次のような課題を解決できます。
  • Seleniumのスクリプト開発時、スクリプトを変更するPCで動作確認すると作業が止まる
  • 仮想マシンを実行するにはメモリがきつい
  • 他のPCで実行するにはスクリプトのファイル共有が面倒
設定次第では画面共有でブラウザの表示を見ることもできるため、とても便利です。

前提

Mac上でDockerを動作させています。 WindowsではDockerの動作に仮想マシンが必要なので、あまり恩恵がありません。 Dockerは公式サイトからインストールして起動してください。 Docker for Macなら下記で使用するdocker-composeも同時にインストールされます。

Selenium環境起動用スクリプト

下記の設定ファイルをdocker-compose.ymlとして保存。 設定ファイルを保存したフォルダで、下記コマンドを実行すると起動します。
docker-compose build
docker-compose up
Seleniumの接続先にhttp://dockerを実行中のマシンのIP:4444/wd/hub、CapabilitiesでChromeを指定で接続できます。 下記の設定ファイル使用すると、vncでlocalhost:5900に接続、テスト中のブラウザを表示できます。 MacならFinderからサーバへ接続を選択し、接続先:vnc://localhost:5900/、パスワード:secretを入力すると接続できます。

注意点

Mac上のDockerでホストのファイルシステムに書き込みすると、 少しずつcom.docker.osxfsプロセスのメモリ使用量が増えていきます。 下記のチケットを見る限り、完全な回避策はなさそうです。 https://github.com/docker/for-mac/issues/1287 dockerをrestartするとメモリを消費しているcom.docker.osxfsプロセスも再起動でき、メモリの消費量は起動直後の状態に戻ります。

スクリプトについて

上記のスクリプトを起動した場合、下記の環境を構築します。
Selenium Hub
└ Node(Linux + Chrome)

同時実行数を増やす

Seleniumを同時に実行する環境を増やしたい場合、下記のコマンドでNode(Linux + Chrome)の数を変更することができます。別ターミナルからの入力でも大丈夫です。
docker-compose scale chrome=2
コマンド実行後の構成は次のようになります。
Selenium Hub
├ Node(Linux + Chrome)
└ Node(Linux + Chrome)

Firefoxの実行環境を追加する

Firefoxを動作させたい場合、docker-compose.ymlへ下記の設定を加えることで、Node(Linux + Firefox)を追加できます。
  firefox:
    image: selenium/node-firefox
    environment:
      - HUB_PORT_4444_TCP_ADDR=hub
      - HUB_PORT_4444_TCP_PORT=4444
    depends_on:
      - hub

EdgeをSeleniumHubに追加する

Windows上のSeleniumの実行環境が必要です。 Selenium公式サイトからSelenium Standalone Serverをダウンロードしてください。 Edgeでの動作を確認する場合はMircosoftが提供しているEdge向けのWebDriverが必要です。Windows10のビルドバージョンに合わせてWebDriverを選んでください。IE11の場合はIE用のDriverに加えてインターネットオプションの変更も必要です。 上記ページのVirtual Machineではテスト用のWindows仮想マシンも提供されています。 Selenium Serverおよび設定ファイルを用意したうえで、コマンドプロンプトから次のコマンドを実行すると、Selenium HubへEdgeのNodeを追加できます。「3.8.1」の箇所はバージョンに応じて書き換えてください。
java -jar selenium-server-standalone-3.8.1.jar -role node -nodeConfig node.json
設定ファイルは下記の内容をnode.jsonとして保存してください。「HUBのIPアドレス」は環境に応じて書き換えが必要です。 仮想マシンを使用していると、NAT接続ではHubからNodeへの接続を上手くさばいてくれません。PCの外の環境に依存してしまいますが、Bridge接続で回避すると楽です。

まとめ

以上のとおり、Selenium Dockerを使用して便利なテスト環境を構築することができます。 Jenkinsもdocker環境で動作させ、Docker Composeでまとめて管理すればCI環境をportableにできて便利です(Jenkinsの設定をbackup/restoreする仕組みは必要です)。

この記事を書いた人 : 井上貴博

一覧へ戻る

開発についてのお問い合わせはこちら

お問い合わせ

JOIN OUR TEAM

積極採用しています。私たちと一緒に働きませんか?