Geb・Spockのテスト結果レポートもSahaginで生成

2015/09/28
Geb

先日公開したオープンソースのSeleniumテスト結果レポートSahaginを使い、GebSpockのテスト結果も見やすくできるようになりました。現在ベータ版ですが、今日はその方法をご紹介します。

目次

  1. Sahagin for Geb・Spock
  2. セットアップ手順
    1. 依存関係にsahagin-groovy.jarを追加
    2. @TestDocアノテーションとcontentTestDocフィールドを追加
    3. テスト前処理にコードを1行追加
    4. 設定ファイルsahagin.ymlを作成
    5. テスト実行
    6. Jenkinsプラグインの設定
  3. 対応環境
  4. 既知の問題

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のようなレポートが生成されます。

Geb・SpockスクリプトのSahaginレポート

図2 Geb・SpockスクリプトのSahaginレポート

さらにSahaginなら、Spockのブロック内のロジックの内容も階層表示できます。(図3)

Spockのブロック内のロジック

図3 Spockのブロック内のロジック

もちろん、ページオブジェクトを使ったスクリプトにも対応しています。(図4)

ページオブジェクトを使ったスクリプトのSahaginレポート

図4 ページオブジェクトを使ったスクリプトのSahaginレポート

図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、JUnit42
  • Geb

既知の問題

  • エラーメッセージ中の改行がレポート上で無視されるため、パワーアサートのメッセージがうまく表示できない。
  • ページ遷移した時は、テストスクリプト中で「at」「to」「via」メソッドのいずれかで明示しないと、Sahaginに認識されない。
  • こちらに記載されている、Sahagin-Javaで未解消の問題。
注釈・出典
  1. Sahagin-Javaと違い、実行時引数の指定は特に不要です。 []
  2. JUnit4とGebを組み合わせる場合のセットアップ手順は、こちらを参照してください。 []

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です