前回の記事の内容(Geb自動キャプチャ)を会社の新人くんに伝授し、ツールを作ってもらっていたところ、「Spockのデータ駆動テストでINPUTにしてるパラメータをCSVファイルにしたいです」と相談されてやってみたことのメモ。意外にはまりました。
1. 単純にファイルを読み込んで1行まるっと渡してみる
where :
parameter << new File(“input.csv”).getText().split( “\r\n” )
ダメ。
よくよく調べるとわかりますが
自前のデータ・プロバイダを書くのはとても簡単で, 二つのメソッド next() と hasNext() (java.lang.Iterable で定義されている), size() と close() (こっちはなくてもいい) を実装するだけでOK!
とのこと。Iterableじゃないとダメなようです。
ということでGroovyCSVを試してみました。
2. GroovyCSVを使う
build.gradleのdependencyに追加。
testCompile "com.xlson.groovycsv:groovycsv:1.0"
先日のソースをCSVインプットにするよう改良。
sample.csvをINPUTに自動キャプチャを実行します。
input/sample.csv
geb,groovy
spock,junit
CsvSampleSearchGeb.groovy
package geb.nyasba.sample.story
import com.xlson.groovycsv.CsvParser
import geb.nyasba.sample.page.TopPage
import geb.spock.GebReportingSpec
import spock.lang.Unroll
@Unroll
class CsvSampleSearchGeb extends GebReportingSpec{
def "#csvRecord.val1と#csvRecord.val2でBIGLOBE検索を行う"( def csvRecord ){
expect:
// TopPage にアクセスする
to TopPage
// TopPage にアクセスできたことを確認
at TopPage
// 検索キーワードにkeywordを入力
searchKeyword.value( csvRecord.val1 + " " + csvRecord.val2 )
// TOP画面をキャプチャにとる
report("検索画面")
// 検索ボタンをクリック
searchButton.click()
// 終了(この時点のキャプチャも自動的に取られている)
where :
// expectの処理を以下のパラメータ(keyword)で何度も繰り返す。複数定義も可能
// input/sample.csvを読み込む。先頭行も取得する。カラムはval1,val2とする
csvRecord << new CsvParser().parse(
new FileReader("input/sample.csv"),
readFirstLine: true,
columnNames:["val1", "val2"]
)
}
}
試したソースはこちらを参照ください。
https://github.com/nyasba/gebsample