Skip to content

Dockerを使って素早くSelenium Grid環境を構築しよう

by : 2015/11/13

Pitaliumを使う際にはSelenium Gridを構築する必要があります。中央集約的にSelenium Hubというサーバを立てて、そこにぶら下がる形でSelenium Nodeを立てていきます。

Selenium Hubを立てても良いのですが、管理を簡易化するためにDockerを使った方法を紹介します。

Docker Toolboxを使おう

UbuntuやCentOSといったLinux環境であればDockerのインストールはさほど難しくありません。apt-getやyumを使ってインストールできます。対してWindowsやMac OSXの場合はLinuxの仮想環境を構築して、そこにDockerをインストールする必要があるので若干手間がかかります。そこで使いたいのがDocker Toolboxです。Docker Toolboxを使えばDockerに必要な環境が簡単にインストールできます。

インストールするとDockerはもちろんのこと、VirtualBoxであったり、Docker Machine、Docker Compose(Mac OSXのみ)などがインストールされます。インストール後、専用のコマンドプロンプト/コンソールを開くスクリプトが生成されますので、それを実行します。

Dockerを実行する

Dockerを起動したら、Selenium Hubのイメージを取得します。

$ docker run -d -p 4444:4444 --name selenium-hub selenium/hub:2.48.2

これだけでSelenium Hubが立ち上がります。Selenium Hubにアクセスする場合は、仮想環境のIPアドレスなので http://192.168.99.100:4444/grid/console などになるかと思います。

そしてさらにこの環境向けにGoogle ChromeやFirefoxを使いたい場合は、

$ docker run -d --link selenium-hub:hub selenium/node-chrome:2.48.2
$ docker run -d --link selenium-hub:hub selenium/node-firefox:2.48.2

でそれぞれ準備ができます。この二つを接続すると、Selenium Hubの管理画面は次のようになります。

Safariを接続する

今回はMac OSX上で実行していますので、Safariも接続してみます。まず最初に専用のSafari機能拡張が必要です。これはSeleniumのGitリポジトリでコンパイルするのが推奨されますが、Google Code上で公開されているものを使うこともできます。ただ2.45で更新が止まっていますので最新版のSafariでは動かない可能性がありますのでご注意ください。

次にApple Developer Program – Apple Developerとして登録し、証明書を作成する必要があります。この辺りの手順は省きますが、iOSアプリの開発時に作成する証明書の手順と同等になります。

機能拡張をインストールすると、次のように表示されます。

インストールが終わったらSeleniumを自分でコンパイルするか、バイナリ公開されている最新版である2.48.2をダウンロードして、次のようにコマンドを実行します。

java -jar selenium-server-standalone-2.48.2.jar -role node -browserName=safari -hub http://192.168.99.100:4444/grid/register

これでSafariが接続されました。接続されると次のように表示されます。

テストスクリプトを書いてみる

今回はテストスクリプトとしてRubyで書いてみました。予め gem install selenium-webdriver を実行しておきます。

require 'selenium-webdriver'
require 'rspec/expectations'
include RSpec::Matchers

def setup
  @driver = Selenium::WebDriver.for(
    :remote,
    url: 'http://192.168.99.100:4444/wd/hub',
    desired_capabilities: :safari) # you can also use :chrome, :safari, etc.
end

def teardown
  @driver.quit
end

def run
  setup
  yield
  teardown
end

run do
  begin
    @driver.get 'http://www.htmlhifive.com/'
    # hifive - HTML5 Development Platform for Corporate Web Systems - hifive
    expect(@driver.title).to eq('hifive - HTML5企業Webシステムのための開発プラットフォーム - hifive')
  rescue
  end
end

これはSafariを起動するスクリプトなので、Mac OSXのSafariが立ち上がってhifiveのサイトが表示されます。

safariとなっているところをchrome、firefoxに変更すると、それぞれDocker内部で立ち上がって実行されます。そのため、この場合はブラウザが立ち上がることなくテストができますので邪魔になりません。もし実行している状態を見たい場合は、Selenium Nodeを

$ docker run -d -P --link selenium-hub:hub selenium/node-chrome-debug:2.48.2
$ docker run -d -P --link selenium-hub:hub selenium/node-firefox-debug:2.48.2

として立ち上げ、その上で

$ docker ps
CONTAINER ID        IMAGE
4211324efc16        selenium/node-firefox:2.48.2
356db01e6bd2        selenium/node-chrome:2.48.2
f016e29aa44a        selenium/hub:2.48.2

を実行してコンテナIDを確認し、

$ docker port 4211324efc16 5900

と実行することでVNCサーバのポートが開きます。後はRealVNCやMac OSX標準の画面共有アプリなどを使って接続できます。


Dockerを使えばテスト環境の構築がとても手軽になります。Selenium Hubを立ち上げれば、後はWindowsやMac OSXなどは関係なく、それぞれHubにつないでテストできるようになります。テストマシンを用意することで個々のマシンの負荷も軽減でき、さらにテストの自動化も考えられるようになるでしょう。

Pitaliumに関する過去の記事はこちら

From → テスト, Pitalium

コメントは停止中です。

%d人のブロガーが「いいね」をつけました。