Windows環境しかないのですが、Safariでのデバッグは可能でしょうか。いえ、現状ではMac OSXが必要です。残念なことに、すでにApple社はWindows版のSafariを提供していません。
過去のSafariバイナリをインストールして稼働することもできるようですが、Appleがサポートを終了していること、さらにHTML5の実装も変わっていることからWindowsでSafariを対応することは現実的ではないでしょう。今回は、MacOS Xによる、Safariでのデバッグ方法を確認していきましょう。
尚、本記事の環境については、以下の通りです。
- MacOS X 10.10.5
- Safari バージョン 8.0.8 (10600.8.9)
前回から利用している、Selenium HubサーバとNodeサーバを引き続き利用していきましょう。環境についても、各ディレクトリを以下の通り利用します。適宜環境に合わせて読み替えて下さい。
Seleniumサーバーパス: /pitlaium
ソースコード: /pitalium-test
Mac OSX Safariを利用したデバッグ方法
以前まで、Safari拡張としてSeleniumのSafariDriverをMacで作成しなければならず、そのために、証明書を取得したりするなど、難易度が高めの設定でした。しかし最近はSeleniumサイドが、Safari拡張用の実行ファイルを用意しているので、インストールはクリックだけで済むようになりました。証明書取得など、全く必要ありませんし、AppleIDも必要ありません(Mac使ってる人は持ってると思いますが…)。
SafariDriverのインストール
SafariDriver Downloadsのダウンロードサイトの、SafariDriverのセクションよりSafariDriver.safariextz をダウンロードして下さい。

あとは、ダウンロードSafariDriver.safariextz をクリックするとSafari拡張インストールが始まります。無事インストールが終わったら、Safariの環境設定を開き、「機能拡張」をクリックして下さい。
次の画面の通り、WebDriverが無事インストールされていればOKです。
この時、機能拡張のスイッチが「入」側になっているか確認しておいて下さい。

Nodeサーバの設定
Nodeサーバには次のNodeConfigファイルをSafari向けに更新します。Safariの定義を追加して保存しておきましょう。
/pitalium/NodeConfigBrowser.json
{
"capabilities": [
{
"browserName": "firefox",
"maxInstances": 3,
"seleniumProtocol": "WebDriver"
},
{
"browserName": "chrome",
"maxInstances": 3,
"seleniumProtocol": "WebDriver"
},
{
"browserName": "safari",
"maxInstances": 3,
"seleniumProtocol": "WebDriver"
}
],
"configuration": {
"hub": "http://localhost:4444/grid/register"
}
}
Selenium Hubサーバを立ち上げます。
$ cd /pitalium
$ java -jar /pitalium/selenium-server-standalone-2.48.2.jar -role hub
次に、Nodeサーバを起動します。
$ cd /pitalium
$ java -jar selenium-server-standalone-2.48.2.jar \
-role webdriver \
-nodeConfig NodeConfigBrowser.json \
-Dwebdriver.chrome.driver=chromedriver
Seleniumコンソールをブラウザで確認して、Safariが設定されていればOKです。
http://localhost:4444/grid/console
テストコード側の設定
テストコード側で利用するブラウザを設定します。Safariの設定を記述して保存します。
/pitalium-test/src/test/resources/capabilities.json
[
{
"platform": "MAC",
"browserName": "safari"
}
]
Safariでテスト実行
後はこれまでと同様にテストを実行するだけです。
$ gradle build
もしくは、こちらで可能です。
$ gradle clean test
実行後には、テスト結果がHTMLで作成されますので、以下にあるテスト結果を確認しましょう。
/pitanium-test/build/reports/tests/index.html
最後に
Mac OSXのSafariでもPitaliumを利用してテストが可能です。以前までは、Safari開発者の証明書取得とWebDriverのコンパイルもしなければならず、
WebDriverの作成自体が困難だったのではないでしょうか。
現在ではWebDriverの提供があるため、インストールは非常に簡単です。こちらもサーバ設定さえクリアしてしまえば、他のブラウザ同様、特に問題になることはないでしょう。
これを機会にぜひMacOSX Safariでのテストも検討して下さい。
Pitaliumにご興味のある方は、チュートリアル(Pitalium:hifiveリグレッションテストライブラリ) – hifiveも参考にして下さい。
今回は、前回の「PitaliumをGradleからつかってみよう!」を利用して、Androidでのテストを行ってみようと思います。
今まで、スマートフォンでのテストを躊躇していたエンジニアの方にチャレンジして頂きたい内容となっています。是非、ご覧下さい。
AndroidのPitaliumテストにはAppiumを利用します。
AppiumとはSeleniumとAndroidデバイスを繋ぐためのNodeサーバです。
起動構成はこのようになります。

注意事項
対象のAndorid OSは、Android4.2以降をターゲットとしています。
それより前のAndroid端末についてはAndroid端末上でテストを行う(コマンドライン)をご確認下さい。
1. 事前準備
本記載にあたって、各ディレクトリを以下の通りとします。
適宜環境に合わせて読み替えて下さい。
Seleniumサーバーパス: /pitalium
ソースコード: /pitalium-test
1–1. Java SDKのインストール
Java SE – Downloads | Oracle Technology Network | Oracleから、テスト環境に合った最新バージョンを入手して下さい。
1–2. Android SDKのインストール
Android SDKのダウンロード
Download Android Studio and SDK Tools | Android Developersより、Android SDKをダウンロードして任意の場所に解凍します。
ダウンロードする箇所が解りにくくなっていますが、セクション「Other Download Options」にある「SDK Tools Only」のプラットフォーム別のファイルです。
Android 環境設定
環境変数のPathに以下の場所をANDROID_HOMEとして追加します。
Macの場合
(Android SDKのインストールフォルダ)\android-sdk-macosx
Windowsの場合
(Android SDKのインストールフォルダ)\android-sdk-windows
以下のパスもWindowsであればシステム環境設定で追加しておきましょう。 Macユーザの場合は.zshrcや.bashrcなどに設定しておいて下さい。
ANDROID_HOME/platform-tools
ANDROID_HOME/tools
Android パッケージのインストール
コマンドラインからAndroid managerを起動します。
$ android
以下のパッケージをインストールします。
- Tools
- Android SDK Tools
- Android SDK Platform-tools
- Android SDK Build-tools
- Android 4.4.2(API 19)(17以上ならどれでも良い)
- SDK Platform
- Extras
- Google USB Driver
Android端末の接続
- Android端末をテスト実行するPCに接続します。
- Android端末の設定で、USBデバッグを有効にします。
- 接続した端末が認識されているか確認します。端末IDが表示されればOKです。
$ adb devices
List of devices attached
[端末ID] device
SeleniumサーバのHubを起動
Selenium Standalone ServerはSelenium Standalone Server ダウンロードサイトよりダウンロードして下さい。
ダウンロードしたファイルは、次のディレクトリに配備します。
/pitalium/selenium-server-standalone-2.48.2.jar
Selenium Hubサーバの起動は次のコマンドで起動して下さい。
$ java -jar /pitalium/selenium-server-standalone-2.48.2.jar -role hub
2. Appiumのインストールと起動
インストールにはNodeJSを利用しますので、予めインストールしておいて下さい。
2–1. Appiumのインストール
以下のコマンドを実行して、インストールします。
$ npm install -g appium
インストール後は、チェックコマンドがありますので、次を実行して下さい。
$ appium-doctor
全てのチェックが通ると、最後に次のメッセージが出力されます。
✔ All Checks were successful
2–2. Appiumのcapabilitiesの設定
AppiumのNodeConfigの設定を記述します。
nodeConfigAndroid.jsonとして配備します。
/pitalium/nodeConfigAndroid.json
{
"capabilities": [
{
"platform": "ANDROID",
"browserName": "chrome",
"version": "4.4.2 SH307",
"maxInstances": 1,
"seleniumProtocol": "WebDriver"
}
],
"configuration": {
"cleanUpCycle": 2000,
"timeout": 30000,
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"url": "http://127.0.0.1:4723/wd/hub",
"host": "127.0.0.1",
"port": "4723",
"maxSession": 1,
"register": true,
"registerCycle": 5000,
"hubPort": 4444,
"hubHost": "localhost"
}
}
上記は、ローカル環境で動かす最低限の設定です。
capabilitiesの説明
| 項目 | 説明 |
|---|---|
| platform | Android端末の場合 “ANDROID” |
| browserName | “chrome” 固定 |
| version | 任意の値。AndroidのOSバージョン+デバイス名とする事を本記事では推奨。 |
| maxInstances | テストを行う最大インスタンス数 |
| seleniumProtocol | “WebDriver” 固定 |
configurationの説明
注目すべき項目のみを説明しています。他はデフォルトではサンプルの通りとして下さい。
| 項目 | 説明 |
|---|---|
| url | Appiumが稼働するサーバアドレス |
| host | urlのHost部分 |
| port | urlのport部分 |
| hubHost | Selenium HubサーバのHostアドレス |
| hubPort | Selenium Hubサーバのport |
設定値の詳しくはAppium API Referenceを参照して下さい。
2–3. Appiumの起動
事前に起動した、Selenium Hubサーバに接続します。
–nodeconfig オプションに渡すファイルは、フルパスで記述する必要がありますので注意して下さい。
$ appium --nodeconfig /pitalium/nodeConfigAndroid.json
以下のように、待ち受けが始まればOKです。
info: Welcome to Appium v1.4.13 (REV c75d8adcb66a75818a542fe1891a34260c21f76a)
info: Appium REST http interface listener started on 0.0.0.0:4723
info: [debug] Non-default server args: {"nodeconfig":"/pitalium/nodeConfigAndroid.json"}
info: Console LogLevel: debug
info: [debug] starting auto register thread for grid. Will try to register every 5000 ms.
info: --> GET /wd/hub/status {}
info: [debug] Responding to client with success: {"status":0,"value":{"build":{"version":"1.4.13","revision":"c75d8adcb66a75818a542fe1891a34260c21f76a"}}}
info: <-- GET /wd/hub/status 200 11.569 ms - 105 {"status":0,"value":{"build":{"version":"1.4.13","revision":"c75d8adcb66a75818a542fe1891a34260c21f76a"}}}
info: [debug] Appium successfully registered with the grid on localhost:4444
これでサーバの準備は整いました。
3. Pitaliumでスマートフォンのテスト
3–1. ディレクトリ構造
.pitalium-test
├── build.gradle
├── libs
│ └── pitalium-1.0.1.jar
└── src
├── main
│ ├── java
│ └── resources
└── test
├── java
│ └── com
│ └── htmlhifive
│ └── pitalium
│ └── HifivePitaliumTest.java
└── resources
└── capabilities.json
以下のファイルは、前回記事と同じ物を利用します。
- Gradleのbuildファイル
gradle.build- pitalium本体のjarファイル
/pitalium-test/libs/pitalium-1.0.1.jar- テストコード本体
/pitalium-test/src/test/java/com/htmlhifive/pitalium/HifivePitaliumTest.java
3–2. capabilitiesファイル
ここでポイントとなる項目は、“platform”、“browserName”、“version” です。 これらの項目は、Appiumを起動するときに設定したnodeConfigAndroid.jsonと同一の値を指定します
/pitalium-test/src/test/resources/capabilities.json
[
{
"platform": "ANDROID",
"browserName": "chrome",
"version": "4.4.2 SH307",
"platformVersion": "19",
"platformName": "Android",
"deviceName": "SH307"
}
]
capabilitiesの説明
| 項目 | 説明 |
|---|---|
| platform | Appinumサーバで指定した同項目値を設定 |
| browserName | Appinumサーバで指定した同項目値を設定 |
| version | Appinumサーバで指定した同項目値を設定 |
| platformVersion | 実行する端末のAPIバージョン |
| platformName | “Android”固定 Android端末の場合 |
| deviceName | 対象のデバイス名(任意の名称) |
※いずれも必須項目です。
3–3. テスト実行
テストコードのルートディレクトリに移動して、コマンドラインからGradleを実行します。
$ cd /pitalium-test
$ gradle build
実行すると、接続されたAndroid端末のブラウザが立ち上がり、PCと同様スクリーンショットが保存されます。
/pitalium-test/results/yyyy_MM_dd_hh_mm_ss/HifivePitaliumTest
次回からは次のGradleコマンドを実行すればOKです。
$ gradle clean test
最後に
Pitaliumを利用した、Androidの設定から起動までを行いました。
こちらもサーバ設定さえクリアしてしまえば、特に問題になることはないでしょう。
フロントエンドは、スマフォの開発がほぼ必須となっている状況かと思います。
Pitalium+Appliumを利用することで、スマフォのリグレッションテストも可能になります。
品質向上のために、導入をご検討してはいかがでしょうか。
今回は、Android端末の紹介でしたが、iOSなどの対応も次回以降に見ていきたいと思います。
Pitaliumにご興味のある方はチュートリアル(Pitalium:hifiveリグレッションテストライブラリ) – hifiveも参考にして下さい。
過去のPitaliumのブログはこちら
Pitalium(ピタリウム)とは、hifiveのテスト支援ツールとして開発されているWebアプリ開発における画面系のリグレッションテストに対応するライブラリです。JUnitから利用できるライブラリですので、Javaにおけるユニットテストに慣れていれば、すぐに扱うことができるでしょうライセンスはオープンソース(Apache License 2.0)になります。今回は簡単にその動作を見ていきましょう。
Pitalium(hifiveリグレッションテストライブラリ)
Pitaliumを利用するにあたり、Seleniumの環境依存の設定があります。今回はGradleで環境を構築していきましょう。
主な手順は以下の通りです。
- ライブラリのダウンロード
- Selenium Standalone Server の設定と起動
- Gradleでの環境構築
- Pitalium テストコード作成
- テスト実行
本記載にあたって、各ディレクトリを以下の通りとします。 適宜環境に合わせて読み替えて下さい。
Seleniumサーバーパス: /pitalium
ソースコード: /pitalium-test
1. 各ライブラリのダウンロード
Pitalium本体とSeleniumサーバ、Seleniumの各ブラウザ用Driverをダウンロードします。
1–1. Pitalium リグレッションテストライブラリ
Pitalium ダウンロードサイトよりダウンロードして下さい。
執筆時点では、1.0.1が最新バージョンです。解凍後、pitalium–1.x.x.jar を後述するテストコードのlibsディレクトリに配備します。
/pitalium-test/libs/pitalium-1.0.1.jar
なお、IE DriverはPitalium用に用意されたものを利用します。同じく解凍後のフォルダから、Windowsのビット数に合ったドライバを取得し、Seleniumサーバパスに配備します。
Windows用 IEDriver
32bit版Windowsの場合:pitalium_x.x.x/IE/x86/IEDriverServer_h5mod_2.xx.x.exe
64bit版Windowsの場合:pitalium_x.x.x/IE/x64/IEDriverServer_h5mod_2.xx.x.exe
pitaliumパスにコピーします
/pitalium/IEDriverServer_h5mod_2.xx.x.exe
1–2. Selenium Standalone Server
Selenium Standalone Server ダウンロードサイトよりダウンロードして下さい。執筆時点では、2.48.2が最新バージョンです。ダウンロードしたファイルは、pitaliumディレクトリに配備します。
/pitalium/selenium-server-standalone-2.48.2.jar
1–3. ChromeDriver
Chromeでテストするには、ChromeDriverが必要になります。ChromeDriver – WebDriver for Chrome ダウンロードサイトよりダウンロードして下さい。執筆時点では、2.20が最新バージョンです。ダウンロードしたファイルは、seleniumディレクトリに配備します。
Winの場合
/pitalium/chromedriver.exe
Macの場合
/pitalium/chromedriver
2. Selenium Standalone Server の設定と起動
Pitaliumには、Seleniumサーバが必要になります。今回はローカルで起動することを前提とします。
2–1. Seleniumサーバの起動
サーバ構成はこのような形になります。

まずは、各テストのHubとなるSelenium Hubサーバを立ち上げます。今回はローカル環境かつPCブラウザだけのテストですので、あまりHubを立ち上げる意味はありませんが、後々ローカルPCでAndroidやiOSなどのテストを行う時に便利になってきます。例えば、ノード1にPCブラウザの設定、ノード2にAndroid、ノード3にiOSの設定といった具合です。また、大規模になればなるほどテストに時間とCPUリソースなどがかかりますので、テストサーバを分散させることが必要になってくるでしょう。ここで確認も含めて設定しておきましょう。
Selenium Hubサーバ
Selenium Hubサーバの起動は次のコマンドを起動して下さい。
$ cd c:\pitalium$ java -jar selenium-server-standalone-2.48.2.jar -role hub
Selenium Nodeサーバ
ノードサーバの起動には、NodeConfigファイルが必要になりますので、次の通り用意して下さい。なお、各設定値はこちらを参照して下さい。
Selenium Gridの設定(Capability) – hifive
/pitalium/NodeConfigBrowser.json
{
"capabilities": [
{
"browserName": "firefox",
"maxInstances": 3,
"seleniumProtocol": "WebDriver"
},
{
"browserName": "chrome",
"maxInstances": 3,
"seleniumProtocol": "WebDriver"
},
{
"browserName": "internet explorer",
"version": "11",
"maxInstances": 3,
"seleniumProtocol": "WebDriver"
}
],
"configuration": {
"hub": "http://localhost:4444/grid/register"
}
}
Selenium Nodeサーバを起動するため、以下のコマンドを起動します。毎回起動するには長くなりますので、バッチファイルやshellを作成しておくと良いでしょう。
Windowsの場合
$ cd c:\pitalium
$ java -jar selenium-server-standalone-2.48.2.jar ^
-role webdriver ^
-nodeConfig NodeConfigBrowser.json
-Dwebdriver.ie.driver=IEDriverServer_h5mod_2.46.0.exe ^
-Dwebdriver.chrome.driver=chromedriver.exe
Macの場合
$ cd /pitalium
$ java -jar selenium-server-standalone-2.48.2.jar \
-role webdriver \
-nodeConfig NodeConfigBrowser.json
-Dwebdriver.chrome.driver=chromedriver
2–2. Seleniumサーバの確認
起動後は、以下に接続してサイトが開けばOKです。
http://localhost:4444/grid/console/

3. Gradleでの環境構築
Javaを利用しますので、JDKは必須です。予めインストールして下さい。前述の通り、今回はGradleで環境を構築します。また、Seleniumサーバは上記「2. Selenium Standalone Server の設定と起動」を参考に、予め立ち上げておいて下さい。
3–1. gradleのインストール(Windows版)
Gradle公式サイト から最新版を入手します。入手したファイルを解凍してファイルを適当な場所に配備します。配備したフォルダを環境変数GRADLE_HOMEに設定します。パスは、GRADLE_HOME/binに通しておいて下さい。
3–2. gradleのインストール(Mac版)
Homebrewでインストールできます。
$ brew install gradle
3–3. gradleインストール確認
Gradleのバージョン確認をしておきましょう。
$ gradle -v
------------------------------------------------------------
Gradle 2.8
------------------------------------------------------------
Build time: 2015-10-20 03:46:36 UTC
Build number: none
Revision: b463d7980c40d44c4657dc80025275b84a29e31f
Groovy: 2.4.4
Ant: Apache Ant(TM) version 1.9.3 compiled on December 23 2013
JVM: 1.8.0_60 (Oracle Corporation 25.60-b23)
OS: Windows 7 6.1 amd64
上記の様にバージョンが表示されればOKです。
4. Pitaliumでスクリーンショットを取ってみる
4–1. ディレクトリ構成
今回は簡単に動作確認を行うだけですので、下記の通り必要最低限の設定となります。
.pitalium-test
├── build.gradle
├── libs
│ └── pitalium-1.0.1.jar
└── src
├── main
│ ├── java
│ └── resources
└── test
├── java
│ └── com
│ └── htmlhifive
│ └── pitalium
│ └── HifivePitaliumTest.java
└── resources
└── capabilities.json
4–2. Pitalium ライブラリ
「1–1. Pitalium リグレッションテストライブラリ」でダウンロードしたPitalium本体のJarファイルを、libsディレクトリに配備しておいて下さい。
4–3. Gradle buildファイル
Gradleのbuildファイルbuild.gradleの設定です。特に依存クラスの設定は必須項目ですので、記述漏れやミスにご注意下さい。Log関連については、log4j2を利用していますが好きなlogライブラリを設定して下さい。
/pitalium-test/build.gradle
apply plugin: 'java'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
// 依存クラスの設定
dependencies {
// logging log4j2
compile group: 'org.slf4j', name: 'slf4j-api', version: '+'
compile group: 'org.slf4j', name: 'slf4j-nop', version: '+'
compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '+'
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '+'
compile fileTree(dir: 'libs', include: '*.jar')
// junit & selenium
testCompile group: 'junit', name: 'junit', version: '+'
testCompile group: 'org.seleniumhq.selenium', name: 'selenium-java', version: '+'
testCompile group: 'org.seleniumhq.selenium', name: 'selenium-server', version: '+'
testCompile group: 'org.seleniumhq.selenium', name: 'selenium-chrome-driver', version: '+'
}
// タスクの同時実行数
test.maxParallelForks = 6
// Javaコンパイル時の文字コード指定(特にWin環境で必須)
tasks.withType(JavaCompile){
options.encoding = 'UTF-8'
}
4–4. capabilitiesファイル
capabilities.jsonはどのブラウザでテストするかを記述します。記述されるブラウザは全てテスト対象となり、テスト時に各ブラウザで実行されます。特に必要なければ、ブラウザの記述ブロックを削除するだけです。
/pitalium-test/src/test/resources/capabilities.json
Windows用
[
{
"platform": "WINDOWS",
"browserName": "chrome"
},
{
"platform": "WINDOWS",
"browserName": "firefox"
},
{
"platform": "WINDOWS",
"browserName": "internet explorer",
"version": "11"
}
]
Mac用
[
{
"platform": "MAC",
"browserName": "chrome"
},
{
"platform": "MAC",
"browserName": "firefox"
}
]
4–5. テストコードを記述する
最後にスクリーンショットを取るテストコードを記述します。PtlTestBaseを継承して、JUnitのテストクラスを記述します。
/pitalium-test/src/test/java/com/htmlhifive/pitalium/HifivePitaliumTest.java
package com.htmlhifive.pitalium;
import com.htmlhifive.pitalium.core.PtlTestBase;
import org.junit.Test;
/**
* Pitaliumでスクリーンショット
*/
public class HifivePitaliumTest extends PtlTestBase {
@Test
public void test1() throws Exception {
// 1. hifiveサイトのトップページを開きます
driver.get("https://www.htmlhifive.com/");
// 2. hifiveサイトのトップページのスクリーンショットを撮影します
assertionView.assertView("OpenhifiveTopPage");
}
}
5. Pitalium テスト実行
テストコードのルートディレクトリに移動して、コマンドラインからGradleを実行します。
$ cd /pitalium-test
$ gradle build
Gradleインストール後の最初のビルドでは、ライブラリのダウンロードなどで数分程度かかります。無事にビルドが出来れば、自動でテストも実行されます。一度ビルドできれば、次回からは次のGradleコマンドで実行すればOKです。
$ gradle clean test
実行すると、ブラウザが自動で立ち上がり、スクリーンショットが以下のディレクトリに保存されます。
/pitalium-test/results/yyyy_MM_dd_hh_mm_ss/HifivePitaliumTest
また、直近のGradleのテスト結果は、以下のディレクトリにHTMLで保存されます。こちらも合わせて確認すると良いでしょう。
/pitalium-test/build/reports/tests

まとめ
SeleniumとPitaliumの設定から起動までを、Gradleで実行する方法を見ていきましたが、いかがでしたでしょうか? Pitaliumは、Seleniumの操作に加え、画面のスクリーンショットを利用して差分を比較することもできるライブラリです。Seleniumだけで行うよりも簡易にリグレッションテストが出来ますので、ぜひ試してみて下さい。
ご興味のある方はチュートリアル(Pitalium:hifiveリグレッションテストライブラリ) – hifiveを参考にして下さい。
過去のPitaliumに関するブログはこちら
LocustはPythonで制作されたWebサーバの負荷テストツールの一つで、MasterとSlaveによる分散テストも可能なツールとなっています。
はじめに(ご注意ください!)
今回紹介するテストツールは、DOS攻撃にも利用出来てしまいます。テストを行う時は、サーバのURLが正しいか注意し、他人のサーバに間違ってもアクセスしないようにくれぐれもご注意願います。
インストール
インストールはPythonが実行出来る環境が必要です。またここでは、パッケージ管理の「pip」を利用していますが、ここでは割愛しますので予め用意して下さい。
pipを使ってlocust本体とpyzmqをインストールします。
$ pip install locustio
$ pip install pyzmq
テストシナリオの設定
Locustはテストシナリオの設定ファイルが必要になります。設定ファイルは「locustfile.py」として保存すると、実行時に設定ファイルを読み込んでくれます。
以下は単純にサイトを読み込むだけの、極簡単なスクリプトです。
from locust import HttpLocust, TaskSet, task
class WebsiteTasks(TaskSet):
@task(1)
def index(self):
self.client.get("/")
@task(2)
def search(self):
self.client.get("/search.html")
class WebsiteUser(HttpLocust):
task_set = WebsiteTasks
min_wait = 5000
max_wait = 15000
設定ファイルの説明
- WebsiteTasksクラスは、各タスクを設定するクラスです。TaskSetクラスを継承しています。@taskの括弧内の数値は、重み付けです。@task(2)は、@task(1)に対して、約倍の実行比率となります。
self.client.get()には、テストサイトのGETメソッド・パラメータを記述します。
- WebsiteUserクラスが実行時のクラスです。HttpLocustクラスを継承しています。task_setに、上記WebsiteTasksクラスを設定します。
min_wait、max_waitについては、それぞれタスクの待ち時間をミリ秒で設定します。
これ以外にも、Basic認証などの設定などや、CSVなどで記述したテストデータを外部から取込み、その情報を元に繰り返しテストすることもできます。テストはスクリプトで記述できるので、柔軟にテスト設計ができると思います。
実行方法
基本の実行コマンドは、以下の通りです。実行時のカレントディレクトリにあるテストシナリオファイルの「locustfile.py」を読み込みます。
$ locust -H http://test-site.xxx
別のシナリオファイルを読み込む場合は、-f オプションを設定します。
$ locust -f test.py -H http://test-site.xxx
その他のオプションパラメータ
locustの代表的なオプションを例に挙げます。
| オプション | 説明 |
|---|---|
| -H HOST | テストサイトのURL |
| -P PORT | テストサイトのポート番号 |
| -f LOCUSTFILE | Locustの設定ファイル |
| –no-web | CLIとして稼働させる場合に設定(-c、-rが必要です) |
| -c NUM_CLIENTS | クライアント数を設定 |
| -r HATCH_RATE | Hatch rate(1秒間に作成するユーザ数)を設定 |
| –web-port=PORT | WEBコンソール画面のポート番号(デフォルトは8089) |
実行画面
スタンドアローンでのWEB実行画面です。デフォルトでは、「http://localhost:8089」で接続出来ます。

Number of users to simulate(シミュレートするユーザ数)Hatch rate(1秒間に作成するユーザ数)
それぞれ、値を設定してから、「Start swarming」をクリックします。
実行中の画面です

随時、結果は更新されていきます。Stopボタンを押すことで、テストを停止します。
実行後の画面です。

結果はメニューの「Download Data」から、CSVなどでダウンロードも可能です。
分散環境テスト
疑似高負荷環境を作成する時は、さすがに端末が1台だけでは無理があります。 実際、高負荷設定でLocustを動かすと、端末にかなりの負荷が掛かります。Locustでは、複数台の端末を利用しアクセスすることで、アクセスを分散する事が可能です。
実行方法は、1台の端末(Master)に対して、複数の端末(Slave)を用意するだけです。
Masterの端末
マスターとしてlocustを起動します。
$ locust -H http://test-site.xxx --master
Slave側の端末
Slaveとしてlocustを起動します。–master-hostパラメータでMasterのURLかIPを指定します。
$ locust -H http://test-site.xxx --slave --master-host=xxx.xxx.xxx.xxx
まとめ
テストシナリオファイルはPythonスクリプトで記述していますが、簡単に動かすだけであれば、Pythonになれていない方でも、すぐに理解出来るでしょう。
テストはスクリプトでコントロールしますので、柔軟にテスト設計ができることが、このツールの強みだと思います。
また、高負荷のテストを行う場合にも、分散環境が用意されていますので、他の負荷テストツールと比較しても十分な性能をもったツールと言えるでしょう。
参考
6月13日(土)、東札幌の札幌コンベンションセンターにて開催されたオープンソースカンファレンス北海道にhifiveとして出展しました!

数多くの方にご来場いただき、hifiveを知っていただくきっかけになりました。ぜひhifiveを使ってHTML5アプリケーションを開発して貰えればと思います。

こちらは準備中の様子。

懇親会も大いに盛り上がりました!

今後もオープンソースカンファレンスに参加していく予定です。全国の皆さま、ぜひhifiveブースに遊びに来てください!
今回から何回かに分けて、Webサーバ用の負荷テストツールを紹介していきたいと思います。今回は有名どころのabです。
Apache標準搭載の ab(Apache Bench)とはapacheをインストールすると標準で利用できる性能測定ツールで、コマンドラインから利用します。
はじめに(ご注意ください!)
今回紹介するテストツールは、DOS攻撃にも利用出来てしまいます。テストを行う時は、サーバのURLが正しいか注意し、他人のサーバに間違ってもアクセスしないようにくれぐれもご注意願います。
実行方法
実行は大変簡単です。以下をコマンドラインで実行します。
$ ab -n 100 -c 10 http://localhost/
利用したオプションパラメータは以下の通りです。
-n: リクエスト回数
-c:同時に発行するリクエスト数
上記例の場合、合計で100リクエストを、同時発行数が10リクエストでアクセスを行います。 正確にはちょっと違いますが、上記は10クライアントが同時アクセスしてきた場合をイメージすると良いでしょう。
オプションパラメータについて
他にも、abにはオプションパラメータが存在します。結果をHTMLで表示することも可能です。 代表的なオプションを以下にリストします。
| オプション | 説明 |
|---|---|
| -n リクエスト回数 | 総リクエスト数 |
| -c リクエスト数 | 同時発行のリクエスト数 |
| -w | 結果をHTML出力 |
| -p ファイル名 | サーバに送信するファイルがある場合に指定 |
| -T コンテンツタイプ | HTMLコンテンツヘッダを指定 |
| -C ‘Cookie名称=値’ | Cookieを指定 |
| -A ユーザ名:パスワード | Basic認証を行う場合に指定 |
| -P ユーザ名:パスワード | プロキシ接続の場合で、パスワード設定がある場合に指定 |
| -X プロキシサーバ名:ポート番号 | プロキシ接続のポート番号 |
実行結果
コマンドラインで実行すると、次のようにコンソールに出力されます。
$ ab -n 100 -c 10 http://localhost/
Server Software: Apache/2.4.6
Server Hostname: localhost
Server Port: 80
Document Path: /
Document Length: 44076 bytes
Concurrency Level: 10
Time taken for tests: 10.247 seconds
Complete requests: 100
Failed requests: 0
Total transferred: 4453200 bytes
HTML transferred: 4407600 bytes
Requests per second: 9.76 [#/sec] (mean)
Time per request: 1024.692 [ms] (mean)
Time per request: 102.469 [ms] (mean, across all concurrent requests)
Transfer rate: 424.40 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 43 65 16.7 65 180
Processing: 309 931 383.8 829 3127
Waiting: 149 654 218.3 623 1197
Total: 367 996 384.8 880 3193
Percentage of the requests served within a certain time (ms)
50% 880
66% 1149
75% 1206
80% 1215
90% 1441
95% 1483
98% 2152
99% 3193
100% 3193 (longest request)
注目するべき項目リスト
次の項目は、パフォーマンスに大きく影響がある注目すべき値です。
| name | 説明 |
|---|---|
| Complete requests | 総リクエスト数 |
| Failed requests | 失敗したリクエスト数 |
| Requests per second | 1秒あたりのリクエスト数 |
| Time per request | 1リクエストの平均処理時間 |
| Transfer rate | 1秒あたりのバイト数 |
| Connection Times (ms) | 最小値(min)、平均値(mean[+/-sd])、中央値(median)、最大値(max)を、接続時間(Connect)、処理時間(Processing)、待ち時間(Waiting)で表記 |
| Percentage of the requests served within a certain time (ms) | 時間内に処理されたリクエストの割合。「50% 880」は0.880秒以内でリクエスト処理された件数が全体の50%という意味。 |
まとめ
これほど簡単にサーバ負荷を確認出来るツールはあまりありません。コマンドを暗記しているユーザも多いでしょう。
簡易なだけに機能は限定的ですが、初期構築時やサイトが調子悪いときなど、診断的に確認をするのにちょうど良いと思います。
また、パフォーマンスに影響がありそうな改修を行った際に、すぐに確認する癖を付けておけば、それだけでも品質確保に役立つと思います。
参考
- apache(http://httpd.apache.org/)
- apache ab documentation (http://httpd.apache.org/docs/2.4/programs/ab.html)
Pitaliumを使うとSeleniumのテストが画面の表示結果ベースでの確認になるので、DOMやテキストのように一つ一つ指定して確認する必要がありません。さらにスクリーンショットを保存しますので、画面のデザイン崩れについても確認ができます。
今回はそんなPitaliumをさらに活用できるテクニックについて紹介します。
IDを指定してDOM比較
これは画面の一部について確認を行いたい時に使えるコードになります。ヘッダー、フッターは変化せず、メインコンテンツだけを比較したいといった使い方が考えられます。
コードは例えば以下のようになります。
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import com.htmlhifive.pitalium.core.PtlTestBase;
import com.htmlhifive.pitalium.core.model.CompareTarget;
import com.htmlhifive.pitalium.core.model.ScreenArea;
import com.htmlhifive.pitalium.core.model.SelectorType;
public class SampleTest extends PtlTestBase {
@Test
public void testCompareTarget_ID() throws Exception {
// 1. hifiveサイトのトップページを開きます。
driver.get("https://www.htmlhifive.com/");
// 2. ID: about の比較対象を作成します。
List<CompareTarget> targets = new ArrayList<CompareTarget>();
targets.add(new CompareTarget(ScreenArea.of(SelectorType.ID, "about")));
// 3. 比較対象を使用して検証を実行します。
assertionView.assertView("TopPageAbout", targets);
}
}
CSSセレクタを使ってDOMを指定
さらにCSSセレクタによるDOMの指定もできます。この場合、コンテンツが複数あるケースも考えられます。その時にはスクリーンショットも複数に分かれて比較されます。サンプルコードは次のようになります。
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import com.htmlhifive.pitalium.core.PtlTestBase;
import com.htmlhifive.pitalium.core.model.CompareTarget;
import com.htmlhifive.pitalium.core.model.ScreenArea;
import com.htmlhifive.pitalium.core.model.SelectorType;
public class SampleTest extends PtlTestBase {
@Test
public void testCompareTarget_cssSelector() throws Exception {
// 1. hifiveサイトのトップページを開きます。
driver.get("https://www.htmlhifive.com/");
// 2. "#about > div" 比較対象を作成します。
List<CompareTarget> targets = new ArrayList<CompareTarget>();
targets.add(new CompareTarget(ScreenArea.of(SelectorType.CSS_SELECTOR, "#about > div")));
// 3. 比較対象使用して検証を実行します。
assertionView.assertView("TopPageAboutContents", targets);
}
}
比較から除外する
例えばバナーであったり、ログイン名、Facebookのいいねなど状態によって表示内容が変わってしまう場合があります。そうした時にPitaliumは二つの方法を用意しています。
要素を除外
指定したID、CSSセレクタを使って除外設定を行います。
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
import com.htmlhifive.pitalium.core.PtlTestBase;
import com.htmlhifive.pitalium.core.model.CompareTarget;
import com.htmlhifive.pitalium.core.model.ScreenArea;
import com.htmlhifive.pitalium.core.model.SelectorType;
public class SampleTest extends PtlTestBase {
@Test
public void testExclude() throws Exception {
// 1. hifiveサイトのトップページを開きます。
driver.get("https://www.htmlhifive.com/");
// 2. 画面全体のスクリーンショットを撮影する設定を作成します。
// ただし、画面上部の「Facebook いいね」ウィジェットを除外します。
ScreenArea[] excludes = {ScreenArea.of(SelectorType.ID, "fb_share")};
CompareTarget target = new CompareTarget(ScreenArea.of(SelectorType.TAG_NAME, "body"), excludes, true);
List<CompareTarget> targets = Arrays.asList(target);
// 3. スクリーンショットを撮影します(比較を実行します)
assertionView.assertView("TopPageExcludeFBLike", targets);
}
}
このように除外設定を行うと、専用のJSONファイルが生成されます。
[
{
"target": {
...
},
"excludes": [
{
"selector": {
"type": "ID",
"value": "fb_share",
"index": null
},
"rectangle": {
"x": 985.0,
"y": 10.0,
"width": 90.0,
"height": 29.0
},
"screenArea": {
"selector": {
"type": "ID",
"value": "fb_share"
}
}
}
],
...
}
]
スクリーンショット自体は特に加工を行わず、このJSONファイルを使って指定部分を比較対象外にするという仕組みになっています。
要素を非表示にする
非表示にするのは例えばポップアップのフローティングであったり、チュートリアルのツアーなどスクリーンショットで比較する際に邪魔になってしまう要素を除外する指定になります。
この場合は上記の除外とは異なり、予め要素を非表示にした上でスクリーンショットを撮影します。
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
import com.htmlhifive.pitalium.core.PtlTestBase;
import com.htmlhifive.pitalium.core.model.DomSelector;
import com.htmlhifive.pitalium.core.model.SelectorType;
public class SampleTest extends PtlTestBase {
@Test
public void testHidden() throws Exception {
// 1. hifiveサイトのトップページを開きます。
driver.get("https://www.htmlhifive.com/");
// 2. 画面全体のスクリーンショットを撮影します。
// ただし「トップへ戻る」を非表示とします。
List<DomSelector> hiddenSelectors = Arrays.asList(new DomSelector(SelectorType.CLASS_NAME, "gototop"));
// 3. スクリーンショットを撮影します(比較を実行します)
assertionView.assertView("TopPageHidden", null, hiddenSelectors);
}
}
テストの再定義
運用を重ねていく内に、テストが失敗する時がきます。この時に行うべき対応としては2種類あります。
- 見た目が変化しただけでテストケースに影響がない場合
- 表示ロジックが変わったなど、テストケースが影響を受ける場合
それぞれ対応が異なってきます。
テストケースに影響がない場合
一旦RUN_TESTモードで実行した後、差分結果が問題ないか確認します。そして SET_EXPECTED モードで実行すると期待値となるスクリーンショットを更新してくれます。
テストケースに影響がある場合
テストケースの修正後、TAKE_SCREENSHOTモードで修正したテストコードや取得されるスクリーンショットが正しいことを確認してください。その後、SET_EXPECTED モードで実行すると期待値となるスクリーンショットを更新してくれます。
Pitaliumを使うとWebアプリケーションのテスト時における検証の面倒さから解放され、スクリーンショット単位での確認になります。さらにIEやChromeなど多くのブラウザにおけるデザイン崩れの発生が素早く行えるようになります。ぜひPitaliumを使って快適なテスト環境を構築してください!
ドキュメントを構築する時に便利なツールをまとめました。参考となる資料ページも紹介していますので、是非ご覧下さい。
Sandcastle Help File Builder
Sandcastle Help File Builderは、Sandcastleを利用するためのWindows製のGUIツールです。Sandcastle自体はJavaDocの.NET版と考えて良いでしょう。本ツールはMicrosoft社よりオープンソースとして公開されています。
コマンドラインからでもヘルプファイルを作成することが可能ですが、このツールを利用するほうが一般的でしょう。
Sandcastle – Documentation Compiler
技術文書のためのマークアップ言語 DocBook
DocBookは技術文書のためのマークアップ言語として定義されました。
歴史も長く、現在のDocBookのバージョンは5.xが主流となっています。 文書はXMLで記述しますので、このオリジナルから、HTML、EPUB、PDFなどいろいろなフォーマットで出力できます。
変換はLnix系OSならば xsltproc コマンドで行うと良いでしょう。他にもJavaなどの各言語でも変換ツールがありますので興味のある方は調べてみてはいかがでしょうか。
Python製ドキュメンテーションビルダー SPHINX
SphinxはPython製のドキュメントジェネレータです。Windows、MacOSX、Linuxでサポートされています。 Wikiに似たマークアップとディレクティブを利用してドキュメントを作成し、コマンドラインからドキュメントを生成します。 ドキュメントはHTML、PDF、EPUBと主要なフォーマットは押さえているようです。
Python製とあって利用はPythonプロジェクトが多いと思いますが、他の言語でも特に問題になることはないでしょう。
Sphinxをはじめよう — Python製ドキュメンテーションビルダー、Sphinxの日本ユーザ会
Re:VIEW
Re:VIEWはRuby言語で記述されたドキュメントジェネレーターです。 Linux/Unix 互換システムで動作します。Mac OS X および Windows Cygwin でも動作可能です。 変換フォーマットは、プレーンテキスト、LaTeX、HTML、XMLやEPUBをカバーし、InDesignにも対応したようです。
マークアップは「ASCIIのEWB」を基本としながら、一部に RD や各種 Wiki の文法をとりいれて簡素化しています。
PHPプロジェクト用のドキュメントジェネレーター ApiGen
ApiGenはPHP製のドキュメントジェネレータです。PHPのJavaDoc版と考えて頂ければよいでしょう。コメントブロックをドキュメントに生成するツールです。インストールには、PHP5.4以上とpearが必要になります。
PHPプロジェクト用のドキュメントジェネレーター phpDocumentor
phpDocumentorもPHP製のドキュメントジェネレータです。多くの言語系ドキュメントジェネレーターと同じく、コメントブロックをドキュメント生成します。テンプレートも多めで好みのものを選べそうです。
先出のApiGenとどちらが良いかはプロジェクトによると思いますが、インストールコストも多くはかかりませんし、両方試してみると良いでしょう。
JavaScript用のドキュメントジェネレーター @use JSDoc
JSDocはJavaScript用のドキュメントジェネレーターです。アノテーションベースでコメントブロックをドキュメント化するのは、JavaDocと同様です。
利用の際にはJDKおよびMozilla Rhinoが必要です。
何かと見通しが悪くなってしまうJavaScriptコードですが、クラスやパブリックメンバーをタグを使って説明を書く習慣をつけることは、後々の開発で役に立つでしょう。
Ruby製ドキュメントジェネレーター
RDocはRuby用のドキュメントジェネレーターです。RubyコメントからJavaDocと同様にソースを解析したのち、HTMLとしてドキュメントを生成します。
カスタムのHTMLテンプレートでドキュメントを生成することも可能です。
マークアップも独自の物を利用していますが、基本的なサンプルを見ればすぐに使いこなせるでしょう。
まとめ
日本の開発現場ではドキュメントの生成やメンテナンスに苦労している方が多いように思います。アプリケーション開発と同程度の労力とまでは言いませんが同じくらいの工数をかけているのではないでしょうか。
とはいえ、コストを下げるためにおろそかになったり、システムの実運用と乖離していると、引き継ぐ場合にコストが掛かりすぎて困る場合があります。今回紹介したツールなどを使い、極力自動生成を行い運用すれば、少しでもプロジェクトのコストが抑えられるのではないでしょうか。
Seleniumを使ったWebブラウザを自動操作するタイプのテストでは、画面遷移が正しく行われた結果、必要なテキストやDOMが存在することは確認できます。しかしデザインを変更した結果、DOM構造が崩れてしまっているかどうかについては分かりません。
プロジェクトの最初ではちゃんと多数のブラウザでテストを行うと思いますが、更新の度に確認するのは大きなコストです。そうしたデザインの状態においても確認できるのがPitaliumになります。前回の準備編に引き続き、今回は実際にPitaliumを動かすところを紹介したいと思います。
サンプルプロジェクトをダウンロード
まずGitHubにあるサンプルプロジェクトをチェックアウト、またはZipファイルをダウンロードします。
$ git clone git@github.com:hifive/hifive-pitalium.git
$ cd hifive-pitalium
そしてさらに pitalium-sample フォルダに入り、antを実行します。Eclipseからも実行できますが、今回はコマンドプロンプトで実行しています。
$ cd pitalium-sample
$ ant -buildfile ivy_build.xml
しばらく待つと必要なファイルのダウンロード、ビルドが完了します。
Selenium Hubサーバの起動
前回の記事にあった手順でSelelnium Hubサーバを起動しておきます。
$ java -jar selenium-server-standalone-2.46.0.jar -role hub
Eclipseを起動
Eclipseを起動して pitalium-sample プロジェクトを開きます。そして pitalium-sample/src/main/resources/capabilities.json を編集します。デフォルトは次のようになっていますので、必要なものだけを残して後は削除します。WindowsのFirefox/Google Chrome/IE11/IE10/IE9/IE8/IE7に加えてMac OSXのSafari、Android 4.4/5.1/2.3.6/4.0.4、iOS 8.1/8.3などが定義されています。
[
{
"platform": "WINDOWS",
"os": "WINDOWS",
"browserName": "firefox"
},
{
"platform": "WINDOWS",
"os": "WINDOWS",
"browserName": "chrome"
},
{
"platform": "WINDOWS",
"os": "WINDOWS",
"browserName": "internet explorer",
"version": "11"
},
{
"platform": "WINDOWS",
"os": "WINDOWS",
"browserName": "internet explorer",
"version": "10"
},
{
"platform": "WINDOWS",
"os": "WINDOWS",
"browserName": "internet explorer",
"version": "9"
},
{
"platform": "WINDOWS",
"os": "WINDOWS",
"browserName": "internet explorer",
"version": "8"
},
{
"platform": "WINDOWS",
"os": "WINDOWS",
"browserName": "internet explorer",
"version": "7"
},
{
"platform": "MAC",
"os": "OS X",
"browserName": "safari"
},
{
"platform": "ANDROID",
"platformName": "Android",
"platformVersion": "4.4.4",
"version": "4.4.4 Xperia Z3",
"deviceName": "Xperia Z3",
"os": "Android",
"browserName": "chrome"
},
{
"platform": "ANDROID",
"platformName": "Android",
"platformVersion": "5.1",
"version": "5.1 Nexus5",
"deviceName": "Nexus 5",
"os": "Android",
"browserName": "chrome"
},
{
"platform": "ANDROID",
"platformName": "Android",
"platformVersion": "4.4.4",
"version": "4.4 Nexus7",
"deviceName": "Nexus 7",
"os": "Android",
"browserName": "chrome"
},
{
"platform": "ANDROID",
"browserName": "android",
"version": "2.3.6 Galaxy S2",
"platformName": "Android",
"platformVersion": "2.3.6",
"deviceName": "Galaxy S2",
"automationName": "selendroid",
"autoWebview": true
},
{
"platform": "ANDROID",
"browserName": "android",
"version": "4.0.4 ASUS Pad",
"platformName": "Android",
"platformVersion": "4.0.4",
"deviceName": "ASUS Pad",
"automationName": "selendroid",
"autoWebview": true
},
{
"platformName": "iOS",
"os": "iOS",
"platformVersion": "8.1",
"deviceName": "iPad Air",
"browserName": "safari"
},
{
"browserName": "safari",
"deviceName": "iPhone6",
"os": "iOS",
"platformName": "iOS",
"platformVersion": "8.3",
"version": "8.3"
}
]
テストの実行
テストファイルは pitalium-sample/src/main/java/com/htmlhifive/pitalium/sample/PtlSampleTest.java になります。実際に画面キャプチャを行うのは次の処理になります。
assertionView.assertView("sampleCapture", targets, HIDE_ELEMENTS);
UnitTestとして実行すれば、しばらく待つとブラウザが立ち上がり、テストが実行されます。

テストが終わるとresultsフォルダ内にテスト実行日時とその時に撮影したスクリーンショットが保存されます。これで画面が変わっている場合は差分画像も保存されます。

Pitaliumを使えばテストの実行と同時にそのスクリーンショットを残してくれるようになります。デザインの崩れをすべてのブラウザに対して常に確認するというのはとても大変です。Pitaliumを使えば大幅に工数が減るはずです。
次回はさらに踏み込んだ使い方を紹介します。
Webブラウザを操作する系統のユニットテストは作るのがとても大変で、その後のメンテナンスコストも大きいのが問題です。SeleniumIDEを使ってブラウザの操作をスクリプト化し、テストに組み込むのが一般的に行われていますが、画面やシステムの変更が発生するとテストはすべて破棄しなければならないくらい再利用性が低いです。
そこでhifive開発チームがリリースしたのがPitalium(ピタリウム)になります。Pitaliumは、マルチデバイスを対象としたWebアプリ開発におけるリグレッションテストを自動化・省力化するためのライブラリです。hifiveのテスト支援ツールの一つとして、Apache2.0ライセンスにて無償で利用できます。
PitaliumはSeleniumの中で使うことが出来ます。DOMや画面上の文字を比較するのではなく、スクリーンショットを使って見た目上の比較を行うのがポイントになっています。
今回はまずPitaliumを使うための環境作りについて紹介します。
必要なソフトウェアのダウンロード
PitaliumはSeleniumと組み合わせて使います。そのため、以下のソフトウェアが必須になります。

- Java
Javaソフトウェアをダウンロードよりダウンロードしてください。 - Selenium Server
Selenium Downloads より selenium-server-standalone–2.xx.x.jar をダウンロードしてください。 - InternetExplorerDriver(IE Driver)
スクリーンショット時に幅と高さが変わる問題を修正したバージョンを用意しています。これらはPitaliumに同梱されていますので、Pitaliumダウンロードページからpitalium-x.x.x.zipをダウンロードし、zipを展開したフォルダの下記の場所から取得して下さい。
32bit版:pitalium_x.x.x/IE/x86/IEDriverServer_h5mod_2.xx.x.exe
64bit版:pitalium_x.x.x/IE/x64/IEDriverServer_h5mod_2.xx.x.exe - Chrome driver
Downloads – ChromeDriver – WebDriver for Chromeより ChromeDriver をダウンロードしてください。

その他、今回は下記ソフトウェアも利用します。
- Eclipse
テストを実行する際に使っています。Eclipse DownloadsよりEclipse IDE for Java Developersをダウンロードしてください。

ファイルの配置について
今回は、
- Selenium Server
- InternetExplorerDriver(IE Driver)
- Chrome driver
が Cドライブ直下のtestlibディレクトリの中に配置されていることとします。下の画像のようになります。
(ただし、修正版IE Driverのファイル名はIEDriverServer_h5mod_x.xx.x.exeのようになります。)

Selenium Gridの起動
PitaliumはSeleniumの平行実行版であるSelenium Grid上で実行するようになっています。そこでまずはSelenium Serverを起動します。
java -jar C:/testlib/selenium-server-standalone-2.46.0.jar -role hub

設定ファイルの記述
次にSelenium Serverに接続するノードに関する設定ファイルを記述します。ファイルは C:\testlib\NodeConfigBrowser.json にあるものとし、内容は以下のように記述します。
{
"capabilities": [
{
"browserName": "firefox",
"maxInstances": 3,
"seleniumProtocol": "WebDriver"
},
{
"browserName": "chrome",
"maxInstances": 3,
"seleniumProtocol": "WebDriver"
},
{
"browserName": "internet explorer",
"maxInstances": 1,
"seleniumProtocol": "WebDriver"
}
],
"configuration": {
"hub": "http://localhost:4444/grid/register"
}
}
ローカルのSelenium Serverに接続するノードおよびそのブラウザについて記述します。そしてファイルを記述したらノードを起動します。
java -jar C:/testlib/selenium-server-standalone-2.46.0.jar ^
-role node ^
-nodeConfig C:/testlib/NodeConfigBrowser.json ^
-Dwebdriver.ie.driver=C:/testlib/IEDriverServer_h5mod_2.46.0.exe ^
-Dwebdriver.chrome.driver=C:/testlib/chromedriver.exe

IEに対応するドライバ、Chromeに対するドライバをそれぞれ指定しているのが分かるかと思います。IEを使う場合は初期設定として、IE上の設定変更が必要になります。こちらの内容を参考して、設定を変更してください。
Eclipseでの作業
続いてEcpliseでテストを実行してみます。まず新規でJavaプロジェクトを作成します。今回はWebDriverTestとしています。作成したらsrc/testというフォルダを作成します。そしてさらにその中に com.htmlhifive.sample という名前のパッケージを作成します。

さらにlibsディレクトリを作成し、その中にSeleniumのjarファイルおよびlibsフォルダの内容をコピーします。

次にプロジェクトのプロパティを開いて、Javaのビルドパス > ライブラリと開きます。そして jar追加ボタンを押し、先ほどコピーしたlibsフォルダ以下のjarファイルをすべて選択し、OKボタンを押します。

テストの記述
では com.htmlhifive.sample パッケージの中に SeleniumGridTestSample.java というファイルを作成し、以下のように記述してみましょう。
package com.htmlhifive.sample;
import org.junit.Test;
import org.openqa.selenium.remote.*;
import org.openqa.selenium.Platform;
import java.net.*;
public class SeleniumGridTestSample {
@Test
public void test() throws Exception {
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setPlatform(Platform.WINDOWS);
capabilities.setBrowserName("internet explorer");
RemoteWebDriver driver =
new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), capabilities);
driver.get("https://www.htmlhifive.com/");
}
}
このファイルを実行すると、 IEが立ち上がってhifiveのWebサイトが表示されるはずです。これはSeleniumのノードからGridを経由してIEが立ち上がっている状態ということです。


今回は以上になります。これでSelenium Gridが使えるようになりましたので、次回から実際にPitaliumを使ってみましょう。








