Geb面白いなーってつぶやきながら勉強してたら。
玉川さんが玉川さんを紹介してくれて。
ふむ。
りゅーじさんがひろこさんを紹介してくれて。
ひろこさんをお招きして社内Geb勉強会を開催しました。
ひろこさんのセッションを聞けて幸せなひとときでした。
- ひろこさん。すごく分かりやすかったです!ありがとうございます!
- りゅーじさん。ご紹介ありがとうございます!
- さとりゅ。おぎおぎ。色々調整等ありがとー!
- 日本全国とあと中国もつないでたかな?見に来てくれたみんなありがとー!
僕は。実際のプロジェクトでGeb使ってみた話を実際のコードを見せながらお話しました。
コードは見せられないけど流れはこんな感じ。
スパゲッティパターン
セレニウムで自動テストしようぜー!って言って、まず踏むのがこのパターンすね。
findElementとかでXPath使ったりしてもう何テストしてるかわかんないし、DOMに変更あったら真っ赤になるしで。メンテナンスナイトメアな感じ。すぐ腐るすね。
If you have WebDriver APIs in your test methods, You're Doing It Wrong. -- Simon Stewart.
ページオブジェクトパターン
てことで、ページオブジェクトパターンですよ!
スッキリするすねー。ページからページヘの遷移がメソッドチェーンできるのが好き。
あと、WebDriverのPageObjectサポートが素敵で。アノテーションで要素を指定して、Factoryでアサインする感じ。
Javaならこの辺りまでかな。
からのSpock
スッキリしたところで、よくよくテストケースを見ると、似たようなコードが何個もあって。
このデータの場合はこうなるはず!ってのが何個も書いてあるので。Spock使った Data Driven Testing の出番ですね。
http://spock-framework.readthedocs.org/en/latest/data_driven_testing.html#data-tables
さらにスッキリしたー!
最後にGeb
ここまででも結構満足してるんだけど。あえて言うなら
- PageObjectってパターンに対して、独自の基底クラスを書いちゃってたのが気に入らない。
- あと、テストクラスでdriverを扱ってるのが気に入らない。
そこで、Gebですよ!PageObjectの仕組みを持ってるし。driverクラスの管理は別途してくれるし。幸せです。
GroovyのmissingXxx系をふんだんに使ってるので見せなくていいものは省略できて、コード量も2/3くらいになった感じ。テスト「コード」というより、もはや「仕様書」。
実際にプロダクトオーナーに、そのテストケースを見せて「どう?認識合ってる?」「うん。合ってる。」
って感じでやりとりできて幸せでした。
でした!楽しかった!