読者です 読者をやめる 読者になる 読者になる

第19回 G*ワークショップ レポート

Groovy 勉強会


レポート職人によるレポート
第19回 G**ワークショップに参加してきた #jggug


〜完〜




あの・・・これ以上どうしろと・・・ > @


レポート職人に対抗するには先に公開するしかないわけだが、
今回は帰って3:44までに仕上げて先越されてるし・・・


まぁ、内容が被らない程度で書いてみるか。

座席表

恒例の座席表。(seatnextだとオーナー以外で移動できない人が
18回G**ワークショップのときにいたので、Google Docsで)
座席表の編集





発表順番変更

当時の発表順番変更

  • 入門Geb+Betamax
  • JavaOne2011 for Groovyist
  • JGGUG合宿2011報告

入門Geb+Betamax

前説


ギクッと思ったけどね。。。

  • ミドルウェアやOSのFix適用に躊躇しなくてよくなる
        銀行さんだとパッチをあててくれない
        費用を誰が持つんだ?
        人手でテストしてるためミスを監査できない
  • UAT=受け入れテスト
  • 画面の仕様変更、端末による挙動が違う
  • 完全自動化は無理にしても、スモークテストで。
  • ひと通りの主要機能が動くかの確認だけでもCIのプロセスに組み込む
Geb入門

Seleniumの歴史

  • Selenium1 ブラウザの上で動作
  • SeleniumIDE 操作をしてプロキシで記録してテストする
  • SeleniumGrid 分散

Selenium + WebDriver お互いに補う
検索キーワードは WebDriver

        ブラウザ上で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入門
  • プロキシサーバとして動作
  • HTTPリクエスト/レスポンスをtapeに記録
  • tapeを利用してWebサービスをエミュレート
  • 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

アレな写真ってこれだろうか。
_DSC0949_DSC0994_DSC0992


Groovy同士のセッションが重なるという最悪なタイムテーブル

JavaOne 2011 Script Bowl:Groovy vs Scala vs JRuby vs Clojure
  • Groovyの3連覇がかかった戦い
  • 決戦方式は、拍手の大きさw
  • 最前列に陣取った @ @ の大貢献(?)により GroovyとScalaの同時優勝
  • 3連覇と同時優勝って南葛と東邦学園だね。
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 にできる
  • @Delegate
        おれおれリストを書くのに便利
  • @HelloWorld
        オリジナルのAST変換も楽に(?)作れる
#4 内視鏡手術

これは2009年版から変わってないけど、
内視鏡手術のすごさは、これを見てもらうのが一番分かりやすいと思う。

@Play Framework GroovyConsole事件
1時間12分くらいのところ。
こういう人がいるので、セキュリティには要注意!!

その他で気になっったところ
  • Groovy 2.0
    • InvokeDynamic
  • scala kojo グラフィックライブラリ
        RubyのプレゼンテショーンツールRabbitのしたに表示されるカメを思い浮かべたのは
        僕だけじゃないはずだ

JGGUG合宿2011報告

なめくじ

表紙の「なめくじ」は、1日目の夜に登場したそうな。
通った畳の上にスジが残って、“誰かが踏んで”朝には、干からびていたそうな。

運営レンジャー


「運営レンジャー Red、運営レンジャー Green、運営レンジャー Yellowとは決して呼ばないでください」とのこと

写真

アイコン付き写真公開されて困る人ーって言われたので、
「はーい」って手をあげようと思ったけど、アイコンなくても特定される写真だった・・・










Grails弄って遊ぼうっと。1日で作れるようになりたいもんだ。





懇親会

懇親会の座席表を編集
横一列、切れ目なし。




@ じぇーーーぶ で 乾杯


@

今は勉強会ラッシュで、色んな勉強会があって、それに参加する事自体は全く無駄じゃないとは
思うんだけど、それだけだとダメ。その後何をするかが大事。
10年後に、今日聞いたことをどうしたのかを聞いてみたい。

いろいろ考えさせられる言葉だった。
今G**ワークショップやその他の勉強会、カンファレンスに参加してるのは、
外の心地いい刺激、気分転換的なところも多い。
Groovyを始めたのもそういったところだから。
でも、SpockやPowerAssertを使ったテスト駆動開発での導入、GebやBetamaxのWebのテスト自動化は
ツボにはまってきている。
自分自身はJavaはメインではないが、Javaをメインにしている人たちもいるので、
実践導入していけたらいいな。


サイン

後輩の分 4冊サインもらいました。
今回はちゃんと @から最初に書いてもらったので、バッチリ

サインのゴーストライターパターンだと!?

その他

今回、名札カードはなんでなかったんだろう。
あと、Ustはやはり欲しかったな。
今回は、前日に [tiwtter:@yusukey] 聞いてみたら、知らなかったようなので、
次回は、早めに声をかけようっと。




togetter

広告を非表示にする