Seleniumのテスト結果レポートをもっとおしゃれに
今日は、JUnitなどから実行したSeleniumテスト結果を、Allure Frameworkというオープンソースのレポートツールを使っておしゃれに表示する方法を、そのインストール手順とともにご紹介します。
Allure Frameworkとは
Allure Frameworkは、JUnit、RSpec、PHPUnit、Cucumberなど様々なテストフレームワークのテスト実行結果を、リッチなHTML形式のレポートで確認できるフレームワークです。
こんなレポートや、
こんなレポート、
こんなレポートが出力できます。
Seleniumを使わないユニットテストにも利用できます。レポートをJenkins上で表示することも可能です。
Allure Frameworkのデモページ(Allure FrameWork Webサイトの「Demo Report」)では、生成されたHTMLレポートを実際に触ることができます(先ほどの画面ショットもデモページのものです)。JavaScriptを活用した動きのある画面で、非常に作り込まれています。
Allure Frameworkの開発は、ロシアの検索・ポータルサイト大手Yandexのエンジニアが中心となって進められています。Allure Frameworkの名前は日本ではまだほとんど聞きませんが、海外ではSeleniumカンファレンス 2014やElemental Selenium※1で取り上げられ、少しずつ認知されて来ているのではないかと思います。
インストール(Eclipse + JUnit4 + Maven)
それでは、早速インストールしてみましょう。今回は、Eclipse + JUnit4 + Mavenの例で説明します。
他のテストフレームワークでのインストール手順はこちらが参考になりますが、筆者が少し調査した範囲でも、「JUnit3で利用するには自前で処理を実装する必要がある」 ※2「Antは未対応」 ※3「GradleはJUnit未対応、TestNGであれば対応」※4 などかなり制約がありました。今回のMavenでのインストールもけっこう苦戦したので、まだ荒削りな部分が色々ありそうです。
EclipseのMavenのバージョンの確認
Allure Frameworkを使う場合、Mavenのバージョンを3.1.1以上にする必要があります。Eclipseにデフォルトで入っているMavenを使うと意外にバージョンが古いことがあるので、ここは確認が必要です。Windows PC + Eclipseの場合、以下の手順を実施してください。
- 「ウィンドウ > 設定 > Maven > インストール」から、Eclipseで利用しているMavenのバージョンを確認します。
- バージョンが3.1.1未満の場合は、コマンドライン用のMavenをPCにインストールし、Eclipseの「ウィンドウ > 設定 > Maven > インストール」の「追加」ボタンから、インストールしたMavenのインストールディレクトリ(binやlibなどを含むディレクトリ)を指定します(図1)。
pom.xmlの設定
続いて、pom.xmlを図2のように設定します。Allure Frameworkは、テストフレームワークごとの埋め込みロジック(Adapter)と、HTMLレポートの生成ロジック(Report)から構成されており、pom.xmlでも対応する2種類のライブラリを指定しています。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2005/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>seleniumDemo</groupId> <artifactId>seleniumDemo</artifactId> <version>0.0.1-SNAPSHOT</version> <properties> <project.build.sourceEncoding>utf-8</project.build.sourceEncoding> </properties> <dependencies> <!-- dependency for Adapter --> <dependency> <groupId>ru.yandex.qatools.allure</groupId> <artifactId>allure-junit-adaptor</artifactId> <version>1.4.4</version> </dependency> <!-- dependency for Adapter --> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.0</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> <!-- unit test run setting for Adapter --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.14</version> <configuration> <testFailureIgnore>false</testFailureIgnore> <argLine> -javaagent:${settings.localRepository}/org/aspectj/aspectjweaver/1.8.3/aspectjweaver-1.8.3.jar </argLine> <properties> <property> <name>listener</name> <value>ru.yandex.qatools.allure.junit.AllureRunListener</value> </property> </properties> </configuration> <dependencies> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.3</version> </dependency> </dependencies> </plugin> <!-- unit test run setting for Adapter --> </plugins> </build> <!-- Setting for Report --> <reporting> <excludeDefaults>true</excludeDefaults> <plugins> <plugin> <groupId>ru.yandex.qatools.allure</groupId> <artifactId>allure-maven-plugin</artifactId> <version>2.0</version> <configuration> <reportVersion>1.4.4</reportVersion> </configuration> </plugin> </plugins> </reporting> <!-- Setting for Report --> </project>
なお、Report用プラグインのrepotVersionの値がAdapterのバージョンに一致していないと、うまく動作しないことがあるので注意が必要です。pom.xmlに記載したバージョン番号は、2014年11月26日時点で動作確認がとれた最新のバージョン番号の組み合わせを記載しています。
実行
pom.xmlを作成したら、以下の手順でMavenのビルドを実行します。
- ゴールを「test」にしてビルドを実行すると、target/allure-results以下にHTMLレポートの元となるXMLファイルが生成されます。
- 続いてゴールを「site」にしてビルドを実行すると、デフォルトではtarget/site/allure-maven-plugin以下にレポートのindex.htmlが生成されます。
ビルドの際には、「実行の構成」にてMaven ランタイムのバージョンが3.1.1以上であることを確認してください。
トラブルシューティング
筆者が遭遇したトラブルをご紹介します。
Q: レポート生成中に「No implementation for org.eclipse.aether.RepositorySystem was bound.」というエラーが発生する。
A: Mavenのバージョンが3.1.1より古い可能性が高いです。
Q: レポート生成中に「An attribute node (version) cannot be created after the children of the containing element」というエラーが発生する。
A: AdapterとReportのライブラリのバージョン番号が一致していない可能性が高いです。
Q: レポートのindex.htmlをChromeやIEで開くと「Your report seems to be broken!」というエラーが発生する。
A: セキュリティ上の問題からうまく動作しないようです。後述のJenkinsからレポートを確認する方法なら、ChromeやIEでも開けます。
Q: テストが1つも実行されない。
A: Mavenでテストを実行する場合、テストファイル名はデフォルトでは「Test*.java」「*Test.java」「*TestCase.java」のいずれかにする必要があります※5。基本的なことですが念のため。
Jenkinsとの連携
続いて、Maven + Jenkins上でHTMLレポートを出力・確認する手順です。pom.xmlは先ほどのものをそのまま使用します。Reportの設定部分については、pom.xmlを使わずJenkinsのプラグインを利用するので、不要な場合は削除しても構いません。
Allure Jenkins Pluginのインストール
Jenkins画面の、「Jenkinsの管理 > プラグインの管理 > 利用可能」から「Allure Jenkins Plugin」を選択してインストールします。
ジョブの設定
続いて、ジョブ設定にて、以下の処理を追加します。
- 「ビルド」に「Mavenの呼び出し」を追加し、ゴールに「test」を指定します。
- 「ビルド後の処理」に「Allure Report Generation」を追加し、「Report Version」を「Custom」にし「1.4.4」を指定します。(図3)
実行
設定が完了したらジョブを実行します。ジョブが完了すると、ビルド結果の画面に「Allure Report」へのリンクが表示されます。(図4)
Allure Frameworkには他にも色々機能があるので、また今後も紹介していきたいと思います。
ちなみに、この記事はSelenium Advent Calendar 2014の1日目の記事です。Selenium Advent Calendar 2014は、まだまだ参加者募集中です!
注釈・出典
- Seleniumの情報を毎週発信するメールマガジン
- JUnit
- Ant
- Allure gradle integration
- Inclusions and Exclusions of Tests