第19回 G*ワークショップ レポート
レポート職人によるレポート
第19回 G**ワークショップに参加してきた #jggug
〜完〜
あの・・・これ以上どうしろと・・・ > [twitter:@kimukou_26]
レポート職人に対抗するには先に公開するしかないわけだが、
今回は帰って3:44までに仕上げて先越されてるし・・・
まぁ、内容が被らない程度で書いてみるか。
入門Geb+Betamax
前説
ギクッと思ったけどね。。。
- ミドルウェアやOSのFix適用に躊躇しなくてよくなる
銀行さんだとパッチをあててくれない 費用を誰が持つんだ? 人手でテストしてるためミスを監査できない
- UAT=受け入れテスト
- 画面の仕様変更、端末による挙動が違う
- 完全自動化は無理にしても、スモークテストで。
- ひと通りの主要機能が動くかの確認だけでもCIのプロセスに組み込む
Geb入門
■Seleniumの歴史
- Selenium1 ブラウザの上で動作
- SeleniumIDE 操作をしてプロキシで記録してテストする
- SeleniumGrid 分散
Selenium + WebDriver お互いに補う
検索キーワードは WebDriver
- Seleniumの問題点
ブラウザ上でJavascriptで動作していた。メリットでもありデメリットでもあり サンドボックスの制限 Ajax対応などができない Junitなどでスタブを作ってSeleniumを呼んでいた。
- WebDriver
テスト・ドライバーがブラウザ外部で起動 ブラウザが出来ることは基本的になんでもできる 画面表示をしないHeadlessDriver(HtmlUnit)に対応
- WebDriver
WebDriverWait(driver,10) で10秒待つなどが必要
- Groovy的な流れ
ちょっとめんどい ↓ Geb = WebDriverのラッパー
- Pagebjectパターンによる構造化
画面、画面の一部単位で、モジュール化していく WebDriver単体よりも使いやすく
- 例ログインと管理画面
ページオブジェクトで、 at のクロージャーで自分がどこにいるかを書いておく テストは、ページオブジェクトを使用することで 画面の変更に依存しないようにできる ↓ テストコードを構造化できる ヘッダーなど共通のモジュールは、「モジュール」として 切り出すことができる。
- エビデンスの取得
geb.spock.GebSpeck GebReportingSpec エビデンスの取得 スクリーンショットの取得
- Book Of Geb
Gebについては、Book Of Geb が詳しい The Book Of Geb The Book Of Geb(和訳)
- ChromeDriver利用時の注意点
ChromeDriverをダウンロードして 実行可能にしておくこと(PATH or システムプロパティに設定)
ええ、身内でやったJGGUG合宿2011の紹介の準備で見事にはまってたよ。。。
デスクトップは、Firefoxで、ネットブックはChromeだから、なんで??とちょっと混乱した。
Exceptionはちゃんと読めば対応できるんだけどね。
Caught: java.lang.IllegalStateException: The path to the chromedriver executable must be set by the webdriver.chrome.driver system property; for more information, see http://code.google.com/p/selenium/wiki/ChromeDriver. The latest version can be downloaded from http://code.google.com/p/chromium/downloads/list java.lang.IllegalStateException: The path to the chromedriver executable must be set by the webdriver.chrome.driver system property; for more information, see http://code.google.com/p/selenium/wiki/ChromeDriver. The latest version can be downloaded from http://code.google.com/p/chromium/downloads/list at com.google.common.base.Preconditions.checkState(Preconditions.java:172) at org.openqa.selenium.chrome.ChromeDriverService.createDefaultService(ChromeDriverService.java:81) at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:87) at geb.driver.NameBasedDriverFactory.getDriver(NameBasedDriverFactory.groovy:42) at geb.driver.CachingDriverFactory.getDriver(CachingDriverFactory.groovy:36) at geb.Configuration.createDriver(Configuration.groovy:218) at geb.Configuration.getDriver(Configuration.groovy:207) at geb.Browser.getDriver(Browser.groovy:100) at geb.Browser.go(Browser.groovy:336) at geb.Browser$go.callCurrent(Unknown Source) at geb.Browser.go(Browser.groovy:328) at nobusue$_run_closure1.doCall(nobusue.groovy:8) at nobusue$_run_closure1.doCall(nobusue.groovy) at geb.Browser.drive(Browser.groovy:574) at geb.Browser$drive$0.callStatic(Unknown Source) at geb.Browser.drive(Browser.groovy:544) at geb.Browser$drive.call(Unknown Source) at nobusue.run(nobusue.groovy:7)
- GebSpec利用時の注意点
もっとも簡単なのはシステムプロパティに設定する
Beatamax入門
- vcr(RubyIのクローン
vcrのcassetと互換性があるフォーマット(yaml)
- Betamaxの資料は少ない
@Rule Recorder @Betamax で tape を設定
- デフォルトではURLとHTTPメソッド対応
すでにtapeがあれば、tapeから実行結果を返す
- gradle.properties で設定
tapeの利用価値
- Web APIにアクセスできない状況でもテストができる
新幹線で移動する人向け!
- テストが高速ができる
- テスト結果を安定化出来る
- レアケースに対するテストを用意にできる
- tapeを再利用(資産化)できる
- 認証情報も入ってるので公開時には注意
- 実装
JavaVMのプロキシをJettyのサーバ実装を利用して、すり替えている。
- 動作実績
動作実績のあるGroovy1.8 + HTTPBuilder の組みわせがおすすめ それ以外は使うな。
入門Geb+Betamaxをかぶらないで書くのは不可能だった。。。
JavaOne2011 for Groovyist
Groovy同士のセッションが重なるという最悪なタイムテーブル
Groovyの使いどころ7つのパターン 2011年版
リップスティックとゴーストライターが2011年版で変更になったもの。
#3 リップスティック
Groovyのあらゆる機能・プロダクトをつかってコードを読みやすくする
特にDSL
invite "You" to javaone
invite("You").to(javaone)
def invite(subject){ [to: {target -> target.add(asubject) } ] } def javaone = [] invite("you").to(javaone) assert javaone == ["Nakano", "<Your Name>"]
#6 ゴーストライター
アノテーションをマーカーとした、AST変換によるコード生成を利用する
コードを書いてないのに、バイトコードレベルで機能が。
- @Immutable
getterしか生成されない ディープコピーを返す
- @Singlton
みんな大好きSinglton。 “普通”の Singlton にできる
おれおれリストを書くのに便利
- @HelloWorld
オリジナルのAST変換も楽に(?)作れる
#4 内視鏡手術
これは2009年版から変わってないけど、
内視鏡手術のすごさは、これを見てもらうのが一番分かりやすいと思う。
[twitter:@kiy0taka] の Play Framework GroovyConsole事件
1時間12分くらいのところ。
こういう人がいるので、セキュリティには要注意!!
JGGUG合宿2011報告
なめくじ
表紙の「なめくじ」は、1日目の夜に登場したそうな。
通った畳の上にスジが残って、“誰かが踏んで”朝には、干からびていたそうな。
写真
アイコン付き写真公開されて困る人ーって言われたので、
「はーい」って手をあげようと思ったけど、アイコンなくても特定される写真だった・・・
Grails弄って遊ぼうっと。1日で作れるようになりたいもんだ。
懇親会
懇親会の座席表を編集
横一列、切れ目なし。
[twitter:@nobusue] じぇーーーぶ で 乾杯
[twitter:@yamadamasaki]
今は勉強会ラッシュで、色んな勉強会があって、それに参加する事自体は全く無駄じゃないとは
思うんだけど、それだけだとダメ。その後何をするかが大事。
10年後に、今日聞いたことをどうしたのかを聞いてみたい。
いろいろ考えさせられる言葉だった。
今G**ワークショップやその他の勉強会、カンファレンスに参加してるのは、
外の心地いい刺激、気分転換的なところも多い。
Groovyを始めたのもそういったところだから。
でも、SpockやPowerAssertを使ったテスト駆動開発での導入、GebやBetamaxのWebのテスト自動化は
ツボにはまってきている。
自分自身はJavaはメインではないが、Javaをメインにしている人たちもいるので、
実践導入していけたらいいな。
その他
今回、名札カードはなんでなかったんだろう。
あと、Ustはやはり欲しかったな。
今回は、前日に [tiwtter:@yusukey] 聞いてみたら、知らなかったようなので、
次回は、早めに声をかけようっと。