Recommended
PDF
PDF
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
PDF
Spring bootでweb セキュリティ(ログイン認証)編
PPTX
PPT
PDF
PPT
PDF
Gradle a new Generation Build Tool
PDF
JavaScriptでWebDriverのテストコードを書きましょ
PPTX
PPTX
Selenium webdriver使ってみようず
PDF
Head toward Java 13 and Java 14 #jjug
PPT
Spring3.1概要 データアクセスとトランザクション処理
PDF
Windows スクリプトセミナー WMI編 VBScript&WMI
PDF
PDF
PDF
PDF
WildFly Swarmではじめる「パーツとしてのJavaEE」
PDF
OpenJDK コミュニティに参加してみよう #jjug
PPTX
Androidで使えるJSON-Javaライブラリ
PPT
PDF
PPTX
Selenium webdriver使ってみようず
PDF
PPT
PDF
REST with Spring Boot #jqfk
PDF
Introduction to R Programming
PPTX
PDF
PDF
R programming Basic & Advanced
More Related Content
PDF
PDF
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
PDF
Spring bootでweb セキュリティ(ログイン認証)編
PPTX
PPT
PDF
PPT
PDF
Gradle a new Generation Build Tool
What's hot
PDF
JavaScriptでWebDriverのテストコードを書きましょ
PPTX
PPTX
Selenium webdriver使ってみようず
PDF
Head toward Java 13 and Java 14 #jjug
PPT
Spring3.1概要 データアクセスとトランザクション処理
PDF
Windows スクリプトセミナー WMI編 VBScript&WMI
PDF
PDF
PDF
PDF
WildFly Swarmではじめる「パーツとしてのJavaEE」
PDF
OpenJDK コミュニティに参加してみよう #jjug
PPTX
Androidで使えるJSON-Javaライブラリ
PPT
PDF
PPTX
Selenium webdriver使ってみようず
PDF
PPT
PDF
REST with Spring Boot #jqfk
Viewers also liked
PDF
Introduction to R Programming
PPTX
PDF
PDF
R programming Basic & Advanced
PPTX
PPTX
An Interactive Introduction To R (Programming Language For Statistics)
PPTX
Why R? A Brief Introduction to the Open Source Statistics Platform
DOCX
PPT
Java management extensions (jmx)
PDF
Similar to TDC20111031_Groovy_Geb
PDF
脱・独自改造! GebでWebDriverをもっとシンプルに
PDF
PPT
第4回勉強会 Groovyの文法からSpockまで
PDF
PPTX
Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話
PPTX
Microsoft Excelでgoogle chromeを動かした話
PDF
G*workshop 2011/11/22 Geb+Betamax
PPTX
JJUG CCC 2011 Fall / Web test automation with Geb and Spock
PDF
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介
PDF
PDF
Webアプリの動的部分に着目したグレーボックス統合テストとテンプレート変数カバレッジの提案
PPTX
PDF
PDF
PDF
「Selenium実践入門」で学ぶテスト自動化の世界
PDF
海外のSeleniumカンファレンスではどんな発表がされているのか2014
PPTX
PPTX
JavaFX + NetBeans環境におけるJenkinsの活用(Jenkins第六回勉強会)
PDF
PDF
GUI Test is (not) necessary
More from Nobuhiro Sue
PDF
PDF
Gws 20130315 gradle_handson
PDF
Groovy base gradle_20130309
PDF
PDF
Gws 20131018 vertx_handson(updated)
PDF
Gws 20141024 gradle_intro
PDF
Gws 20140418 camel_groovy
PDF
Fuse Online Hands-on Guide
PDF
Fuse Online Hands-on Guide
PDF
PDF
JSUG20171027-spfingboot-k8s-ocp
PDF
Letsgo developer 2012 Continuous Delivery
PDF
DevLove k8s nobusue 20180711
PDF
PDF
PDF
JTF2018_B30_k8s_operator_nobusue
PDF
Light and shadow of microservices
PDF
Jjug 20140430 gradle_intro
PDF
PDF
20140329_kyon_kao_wedding_LT_Groovy
Recently uploaded
PDF
第21回 Gen AI 勉強会「NotebookLMで60ページ超の スライドを作成してみた」
PPTX
PDF
PDF
さくらインターネットの今 法林リージョン:さくらのAIとか GPUとかイベントとか 〜2026年もバク進します!〜
PDF
2025→2026宙畑ゆく年くる年レポート_100社を超える企業アンケート総まとめ!!_企業まとめ_1229_3版
PDF
100年後の知財業界-生成AIスライドアドリブプレゼン イーパテントYouTube配信
PDF
Starlink Direct-to-Cell (D2C) 技術の概要と将来の展望
PDF
Reiwa 7 IT Strategist Afternoon I Question-1 Ansoff's Growth Vector
PDF
Reiwa 7 IT Strategist Afternoon I Question-1 3C Analysis
TDC20111031_Groovy_Geb 1. Groovy/Geb入門
2011/10/31 @TDC勉強会(番外編)
JJUG幹事/ JGGUGサポートスタッフ 須江 信洋
http://twitter.com/nobusue
http://d.hatena.ne.jp/nobusue
※資料の内容は個人としての意見・見解を述べたものであり、
所属する企業・組織が内容を保証するものではありません。
2. 自己紹介
須江 信洋(すえ のぶひろ)
Twitter: @nobusue
http://www.facebook.com/profile.php?id=732337788
かれこれ10年位、JavaEE関連の仕事をしてます
G*(Groovy関連技術)との関わり
Groovyコミュニティ(JGGUG)サポートスタッフ
「プログラミングGROOVY」執筆チーム
「Groovy イン・アクション」翻訳チーム
Groovyで作ったBot飼ってます(@hatena_groovy)
2
3. 4. スクリプトの配布を楽にする:Grape
Grape(@Grab)で、mavenリポジトリからjarを自動取
得
Groovy-1.6からの新機能(1.7でさらに改善)
内部ではApache Ivyを利用
@Grab(
group = 'org.twitter4j', module='twitter4j-core',
version='[2.1,)')
import twitter4j.*
Twitter twitter =
TwitterFactory.getInstance("<scrname>","<pass>")
twitter.updateStatus(args[0])
Twitter4jを使ったTwitterクライア
ント
このファイルだけで動きます!!
4
(要Groovy-1.7以上)
5. Groovyは単なる言語ではない!
Groovyのエコシステム
Javaをカイゼン 高生産性FW
GSQL Grails Gaelyk Griffon
SwingBuilder
組み込み
MarkupBuilder Jenkins
(XML/HTML) (Hudson)
ビルドとテスト
先進的 Maven3
GPars
Gant Spock (JSR166y) FreeMind
Gradle Geb Groovy++ JavaFX2.0
5
6. テスト自動化できてますか?
Vモデル
ここは未だに
人海戦術が
主流
ここはJUnitなどで
わりかし自動化
できている
http://ja.wikipedia.org/wiki/V%E3%83%A2%E3%83%87%E3%83%AB
6
7. 8. Seleniumの系譜
2004~
Selenium1
(Selenium RC) Selenium2
Selenium IDE
2009~
Selenium2
Selenium-Grid +WebDriver
2006~
2011/07
WebDriver
(Google)
Selenium2.0リリース
http://seleniumhq.org/docs/01_introducing_selenium.html#brief-history-of-the-selenium-project
8
9. Selenium1とWebDriver
Selenium1の課題
テスト・ドライバーがブラウザ上で稼働するため、ブラ
ウザのサンドボックスの制限を受ける
原理的に対応が難しい機能がある
ファイルアップロードなど
Ajax対応
WebDriver
テスト・ドライバーがブラウザ外部で稼働するため上記
の制限を受けない
Headless Driver(HtmlUnit)に対応
詳細な比較については以下
http://www.asukaze.net/etc/webdriver/
9
10. Geb(じぇぶ)とは
http://www.gebish.org/
Groovyで構築されたWebDriverのラッパー
jQueryライクなNavigator APIを提供
Page Objectパターンによる構造化
2011/10時点での最新バージョンは0.6
多様なテストフレームワークと統合可能
Spock,EasyB
JUnit3/4,TestNG
Cucumber(Cuke4Duke)
10
11. jQuery-like Navigator API
// CSS 3 selectors
$("div.some-class p:first[title='something']")
// Find via index and/or attribute matching
$("h1", 2, class: "heading")
$("p", name: "description")
$("ul.things li", 2)
// 'text' is special attribute for the element text content
$("h1", text: "All about Geb")
// Use builtin matchers and regular expressions
$("p", text: contains("Geb"))
$("input", value: ~/d{3,}-d{3,}-d{3,}/)
// Chaining
$("div").find(".b")
$("div").filter(".c").parents()
$("p.c").siblings()
11
12. Page Objectパターン
class LoginPage extends Page { ログイン画面
static url = "http://myapp.com/login"
static at = { heading.text() == "Please Login" }
static content = {
heading { $("h1") }
loginForm { $("form.login") }
loginButton(to: AdminPage) { loginForm.login() }
}
} Browser.drive { テスト
to LoginPage
assert at(LoginPage)
loginForm.with {
username = "admin"
class AdminPage extends Page { password = "password"
static at = { heading.text() == "Admin Section" } }
static content = { loginButton.click()
heading { $("h1") } assert at(AdminPage)
} }
} 管理画面
12
13. Gebの例: はてなキーワード検索
@Grapes([
@Grab("org.codehaus.geb:geb-core:latest.release"),
@Grab("org.seleniumhq.selenium:selenium-firefox-driver:latest.release")
])
import geb.Browser
Browser.drive {
go "http://d.hatena.ne.jp/keyword/"
assert title == "はてなキーワード - 話題の言葉がわかる、みんなで編集す
るキーワード"
$("form.header-search").word = "Groovy"
$("form.header-search").find("input", name:"submit").click()
assert title == "はてな検索: Groovy"
}
13
14. Spock(すぽっく)とは
http://code.google.com/p/spock/
Groovyで構築されたBDDフレームワーク
Groovyの動的型を活用したDSLを提供
Power Assertで問題箇所を容易に特定可能
可読性の高いテストケース
データ・ドリブン・テストにより多数のテストパターン
をコンパクトに記述可能
テストケースはJUnitから実行可能
14
15. Power Assert
def a = 1
def b = 2
def c = 3
assert (a+b)*c == 5
途中結果や、どこでfailしたかまで教えてく
れる。
assertEquals()とかを組み合わせる必要ナシ。
15
16. 可読性の高いテストケース
def "subscribers receive published events at least once"() {
when: publisher.send(event)
then: (1.._) * subscriber.receive(event)
where: event << ["started", "paused", "stopped"]
}
def "length of Spock's and his friends' names"() {
expect:
name.size() == length
where:
name | length
"Spock" | 5
"Kirk" | 4
"Scotty" | 6
}
16
17. GebとSpockのインテグレーション
Gebと連携するSpockのテストケースとして以下が
提供される
geb.spock.GebSpec / GebReportingSpec
browserインスタンスの注入
WebDriverのBrowserクラスの初期化が不要
エビデンス取得の自動化
GebReportingSpecを利用すると、テストケースのメソッ
ド終了時にスクリーンショット(PNG)が自動取得される
17
18. 19. GebSpec利用時の注意点
Spock-0.5(2011/10時点)ではGroovyの@Grabを利用
する場合は、依存関係の兼ね合いで以下が必要
@GrabExclude("org.codehaus.groovy:groovy-all")
GebReportingSpecを利用する場合はレポート出力先
のディレクトリを指定しておく必要がある
最も簡単なのはシステムプロパティを使うこと
groovy -Dgeb.build.reportsDir=/tempdir
GebSpockReporting.groovy
19
20. JGGUGからのお知らせ
G*ワークショップ
だいたい月1回のペースでG*関連の勉強会を実施してい
ます
次回は11/22予定、Gebの詳しい話を予定
詳細は http://www.jggug.org/ で
G*Magazine
http://grails.jp/g_mag_jp/
JGGUGが発行している電子雑誌です。
創刊号と第3号に、@bikisukeさんがGeb/Spockの技術情
報を執筆されています。
20
21.