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に関するブログはこちら
