Geb・Spockのテスト結果レポートもSahaginで生成
先日公開したオープンソースのSeleniumテスト結果レポートSahaginを使い、GebやSpockのテスト結果も見やすくできるようになりました。現在ベータ版ですが、今日はその方法をご紹介します。
Sahagin for Geb・Spock
Gebは、Groovyを使ってシンプルにスクリプトを記述できるブラウザ画面テストツールで、内部ではSelenium WebDriverを使ってブラウザ操作を行っています。GroovyのテストフレームワークであるSpockと組み合わせてよく利用されます。
SahaginのGroovy版を使えば、このGeb・Spockのスクリプトから、日本語 + 画面キャプチャのテスト結果レポートを生成することができます。
例えば、次の図1のようなテストスクリプトから、
def "宿泊予約が成功すること_1"() { setup: "予約情報入力ページに対し" go "http://example.selenium.jp/reserveApp" when: "予約情報を入力して" $("#reserve_year").value("2015") $("#reserve_month").value("8") $("#reserve_day").value("31") $("#guestname").value("サンプル") and: "次のページへ進むと" $("#goto_next").click() then: "正しい宿泊料金が表示されること" $("#price").text() == "8000" }
次の図2のようなレポートが生成されます。
さらにSahaginなら、Spockのブロック内のロジックの内容も階層表示できます。(図3)
もちろん、ページオブジェクトを使ったスクリプトにも対応しています。(図4)
図4のようにページオブジェクトクラスのメソッドやプロパティを日本語表示するためには、図5のように、ページオブジェクトクラスにcontentTestDocフィールドや@TestDocアノテーションで日本語の説明を付加しておきます。
import geb.Page import org.sahagin.runlib.external.PageDoc import org.sahagin.runlib.external.TestDoc @PageDoc("予約情報入力ページ") class ReserveInputPage extends Page { static url = "http://example.selenium.jp/reserveApp" static at = { title == "予約情報入力"} static content = { reserveYear { $(name: "reserve_y") } reserveMonth { $(name: "reserve_m") } reserveDay { $(name: "reserve_d") } guestName { $(name: "gname") } goNextButton (to: ReserveConfirmPage){ $("#goto_next") } } static contentTestDoc = { reserveYear { "宿泊年" } reserveMonth { "宿泊月" } reserveDay { "宿泊日" } guestName { "名前" } goNextButton { "ボタン「次へ」" } } @TestDoc("宿泊日に「{year}/{month}/{day}」をセット") void setReserveDate(year, month, day) { reserveYear = year reserveMonth = month reserveDay = day } }
エラー行をハイライトしたり、プラグインを使ってJenkins上でレポートを表示したりすることもできます。
セットアップ手順
続いて、Geb・SpockのスクリプトにSahaginを組み合わせる手順を説明していきます。
1. 依存関係にsahagin-groovy.jarを追加
sahagin-groovy.jarの依存関係を追加します※1 。Gradleを使っている場合は図6のようにして、Mavenを使っている場合は図7のようにして、依存関係を追加します。
dependencies { // バージョン番号は、その時の最新を指定 compile 'org.sahagin:sahagin-groovy:0.10.1' }
<dependencies> <dependency> <groupId>org.sahagin</groupId> <artifactId>sahagin-groovy</artifactId> <!-- バージョン番号は、その時の最新を指定 --> <version>0.10.1</version> </dependency> </dependencies>
2. @TestDocアノテーションとcontentTestDocフィールドを追加
図4のように、日本語表示したいメソッドには@TestDocアノテーションを、日本語表示したいページオブジェクトのcontentにはcontentTestDocフィールドを付加します。Pageクラスを継承したページオブジェクトクラスに@PageDocアノテーションを付けると、ページ名も日本語表示されます。
3. テスト前処理にコードを1行追加
画面キャプチャを取得するために、Spockのsetupメソッドなどに「GebAdapter.setAdapter」メソッドの呼び出しを追加します。(図8)
import geb.spock.GebSpec import org.sahagin.groovy.runlib.external.adapter.geb.GebAdapter class SampleSpec extends GebSpec { def setup() { GebAdapter.setAdapter(getBrowser()) } .... }
4. 設定ファイルsahagin.ymlを作成
Groovyプロジェクトの最上位ディレクトリに「sahagin.yml」という名前でファイルを作成し、図9のように設定を記述します。
# Sahagin設定ファイル。YAML形式で記述する。 groovy: # Groovyのテストコードのあるディレクトリ # (絶対パスまたはこのYAMLファイルの場所からの相対パスで指定)。 # テストメソッドや@TestDocを付けたメソッドは、 # 全てこのディレクトリの下に存在する必要がある。 testDir: src/test/groovy
5. テスト実行
テストを実行すると、sahagin.ymlと同じディレクトリにsahagin-report/index.htmlが作成されています。
6. Jenkinsプラグインの設定
こちらの方法で設定します。
対応環境
現在の最新バージョンでは、下記の環境に対応しています。
- Groovy2.4以上(他のバージョンでも動作すると思いますが未検証です)
- Spock、JUnit4 ※2
- Geb
既知の問題
- エラーメッセージ中の改行がレポート上で無視されるため、パワーアサートのメッセージがうまく表示できない。
- ページ遷移した時は、テストスクリプト中で「at」「to」「via」メソッドのいずれかで明示しないと、Sahaginに認識されない。
- こちらに記載されている、Sahagin-Javaで未解消の問題。
注釈・出典
- Sahagin-Javaと違い、実行時引数の指定は特に不要です。
- JUnit4とGebを組み合わせる場合のセットアップ手順は、こちらを参照してください。