Dockerを使って素早くSelenium Grid環境を構築しよう
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に関する過去の記事はこちら
コメントは受け付けていません。