SlideShare a Scribd company logo
1 of 34
第 4 回 勉強会
~ Web での自動結合テストへの
いざない Groovy から Spock まで~
2016/1/23
今日やること
– 前回までは、 Java の文法、 Spring を使った
Web アプリケーションの構築、単体テスト、
JUnit を使った Unit テストのお話しでした。今日からはここ
Web アプリケーションのテストを
自動化するために
• Selenium Web Driver  (
http://www.seleniumhq.org/)
 プログラムを書いてブラウザテストを自動的に実行す
るためによく用いられる
– 特徴1:マルチ言語
• Java   C #  PHP Python   Ruby   Perl JavaScript  
など
– 特徴2:マルチブラウザ対応
• Firefox   InternetExplorer   Safari   Opera   Chrome
※Selenium の情報の探し方
http://qiita.com/gluelan2013/items/a
9096d052dc2ab660728
Web アプリケーションのテストを
自動化するために
• なぜ、 Selenium がダメか?
–  コーディングが非常に大変
• 初心者に難しい
• 自動化テストを安定動作させるだけでも大変
–   Selenium Web Driver が高速ではない
• テストスローの問題を招きやすい
–  まだ、 Edge にドライバが対応していない
–  スマートフォン、タブレットに対応しきれ
ていない
• Selenium3 に期待したいがいつ出るのだろう
Groovy + Spock + Geb
• Groovy
– Java を極限まで簡単にしたスクリプト言語
– 1 時間で学べる学習コストの低さ
– Java のクラスライブラリは全部呼び出せる
• Geb
– ゲブではなくジェブと読みます
– Groovy で動く Selenium WebDriver のラッパー
– jQuery のような Locator を指定して記述
– コード量が少なく、すっきり
Groovy + Spock + Geb
• ツールの立ち位置をマトリックスにしてみ
ると
ブラウザ操作 WebDriver Geb
テスティング
フレームワーク
JUnit
TestNG
Spock
言語 Java Groovy
マルチブラウザ対応
データ駆動テスト
強力な Assert
なんとか Geb でテストケースを
書いてブラウザテストを自動実行したい
Groovy のインストール方法
• http://www.groovy-lang.org/download.html
– Windows インストーラでインストール
• ソース配布などもあるが、バイナリ版の Windows イ
ンストーラでのインストールが一番楽
– Build ツールからインストール
• Maven 、 Gradle
– IDE のプラグイン
• Eclipse,NetBeans,Inteli-J などかく IDE にプラグインあ
り
• http://www.groovy-lang.org/ides.html
Groovy のインストール方法
• Eclipse   Plugin
– こちらを詳しくみると Eclipse への対応
https://github.com/groovy/groovy-eclipse/wiki
– EclipseMars(4.5.1) 対応
http://dist.springsource.org/snapshot/GRECLIPSE/e4.5/
Groovy の文法を 1 時間でマスターする
• 世界最小の一文から
 セミコロンはいらない (あっても動作す
る)
 かっこ()もいらない (あっても動作す
る)
‘’ さすがに はないと 下記の Exception を吐く
。
 
 
println 'Hello'
Exception thrown
groovy.lang.MissingPropertyException: No such property:
Hello for class: Helllo
at Helllo.run(Helllo.groovy:1)
Groovy の文法を 1 時間でマスターする
• 世界最小の一文から
Java Class
Groovy Script
 
 
println 'Hello'
public class Main {
public static void main(String[] args) {
System.out0.println("Hello");
}
}
Groovy の文法を 1 時間でマスターする
• 型宣言
 型宣言はいらない  ( 動的型つけ言語)
 
Java の型はそのまま使える。型を宣言してもよ
い
s = 'Hello'
println s
String s = 'Hello'
println s
def s = 'Hello'
println s
Groovy の文法を 1 時間でマスターする
•  テキストリテラル
”“ を付けたほうが変数が評価されて展開され
る
 他のスクリプト言語でもよくある動作です
 
msg = “<<This is message>>”
println “${msg}”
println ‘${msg]’
Groovy の文法を 1 時間でマスターする
•  演算子
これなんて出力されると思います?
 
msg = "Hello"
msg -= "l"
msg *= 3
println msg
Groovy の文法を 1 時間でマスターする
•  クラスとメソッド
    コンストラクタ、インスタンス変数、メ
ソッド
    オブジェクト作成の概念は Java と同じ
class Helo {
def msg
Helo(s){
msg = s
}
def sayHello(){
println msg
}
}
new Helo(" こんにちは ").sayHello()
Groovy の文法を 1 時間でマスターする
•  クラスとメソッド
 
     クラスの継承や抽象クラスの
     考え方は Java と同じ
abstract class Abstract {
String name
abstract def abstractMethod()
def concreteMethod() {
println 'concrete'
}
}
class Concreate extends Abstract {
def abstractMethod(){
println "AbstractMethod 実装 "
}
}
concrete = new Concreate();
concrete.abstractMethod();
Groovy の文法を 1 時間でマスターする
• リストとマップ
    リストとマップはこんな風に書きます。
    
    これ、なんて出力されると思いますか
    こんなリストの演算もできます。
arr = [1,2,3]
arr = ['one':1, 'two':2, 'three':3]
arr = [1,2,3]
arr += [4,5]
arr -= [2,4]
arr *= 2
println arr
Groovy の文法を 1 時間でマスターする
• 条件分岐
    
     if 文はこのように書きます。
     Java と同じですね。
num = new Random().nextInt(100)
if (num % 2){
println "${num} は、奇数 "
} else {
println "${num} は、偶数 "
}
Groovy の文法を 1 時間でマスターする
• 条件分岐
    
    
     case 文は Java とちょっとちがいますね
。
    より強力です。
     case の中に配列が渡されています。
val = new Random().nextInt(10)
switch(val){
case [0,2,4,6,8]:
println "${val} は、偶数 "
break
case [1,3,5,7,9]:
println "${val} は、奇数 "
}
Groovy の文法を 1 時間でマスターする
• 繰り返し
    
     for 文も Java とほとんど同じですね。
   
arr = [1,2,3,4,5]
n = 0
for(item in arr){
println("$n + $item = " + (n + item))
n += item
}
println " 合計: $n"
Groovy の文法を 1 時間でマスターする
• クロージャ
    こんな風に関数を書きます。
     
     変数 total に関数 each の中からアクセスして
います。
     さらに it には1から 100 までの数字が外から
     渡されています。
     関数ブロックの外の変数を操作できる関数の
msg = {str -> println " こんにちは、 ${str} さん! " }
msg(' 太郎 ')
total = 0
(1..100).each { total += it }
println total
Groovy の文法を 1 時間でマスターする
• クロージャ 例をもう一つ
    
    引数の型が異なっても大丈夫。  
     
 
    引数が可変長でも大丈夫。
def adder = {a,b -> a + b}
assert adder(1,2) == 3
assert adder(‘a’,’b’) == ‘ab’
def sum = { ... elements -> elements.sum()}
assert sum(1,2) == 3
assert sum('a', 'b' ,'c') == 'abc'
Groovy の文法を 1 時間でマスターする
• クロージャ 例をさらに一つ
    
    引数にデフォルト値を設定
 
     
 
   
def mult = {int a, int b = 10 -> a * b}
assert mult(2,3) == 6
assert mult(5) == 50
Groovy の文法を 1 時間でマスターする
• クロージャ 例をまだまだ
    
    
      
Persons の配列から年齢が1 8 歳より下のオブジェクトを取り
出す。                        
@groovy.transform.Immutable
class Person {
String name
int age
}
def Persons = [
new Person('Guillaume',36),
new Person('Marion',6),
new Person('Erine',1)
]
def names =
Persons.findAll { it.age < 18 }
.collect { it.name.toUpperCase()}
.sort()
.join(',')
Groovy の文法を 1 時間でマスターする
• クロージャ 例 ファイル読み書き
    
    
     input. txtから一行ごとに情報を読み込み
、 Groovy という文字列が含まれていたら大文字に置
換して output.txt に出力します。
new File('input.txt').withReader { r ->
new File('output.txt').withWriter { w ->
r.eachlinie { line ->
if (line.contains('Groovy'))
w << line.toUpperCase()
}
}
}
Groovy の文法を 1 時間でマスターする
• クロージャ 例 リストと組み合わせ
た例
    
    
     list ’の配列に d’ を追加した後、クロージャ
を使った
    処理を継続
def list =['a','b','c']
list << 'd'
assert list.contains('d')
assert list.findAll { it.startsWith 'a' }.size() == 1
assert list.collect { it.toUpperCase() } == ['A','B','C','D']
assert list.inject(''){a, b -> a + b} == 'abcd'
Groovy の文法を 1 時間でマスターする
• オープンクラス
   
  
     Expando というクラスを new してオブジェク
トを
     作成するとオブジェクトの作成の後にインスタ
ンス変数や、メソッドを追加できる。
      Java スクリプトの prototype っぽいですね。
     
obj = new Expando()
obj.name = "taro"
obj.message = " こんにちは! "
obj.say = { name = it println message + name }
obj.say(" 花子さん ")
Groovy の文法を 1 時間でマスターする
• デフォルトで import されるパッケージ
– java.io.*
– java.lang.*
– java.math.BigDecimal
– java.math.BigInteger
– java.net.*
– java.util.*
– groovy.lang.*
– groovy.util.*
Groovy の文法を 1 時間でマスターする
• Java
     
   
Public class Greeter {
private String owner;
public String getOwner() {
return owner;
}
public void setOwner(String owner) {
this.owner = owner;
}
public String greet(String name) {
return “Hello “ + name + “, I am “ + owner;
}
}
Greeter greeter = new Greeter() ;
greeter.setOwner(“Guillaume”);
System.out.println(greeter.greet(“Marion”));
この Java コードが
Groovy の文法を 1 時間でマスターする
• Groovy Script
     
   
class Greeter {
String owner
String greet(String name) {
“Hello ${name}, I am ${owner}”
}
}
def greeter = new Greeter(owner: “Guillaume”)
println greeter.greet(“Marion”)
こんなに簡単な Script に
Groovy を使った Web システムのテスト
• PowerAssert
     
   
def x = [1,2,3,4,5]
assert (x << 6) == [6,7,8,9,10]
Exception thrown
Assertion failed:
assert (x << 6) == [6,7,8,9,10]
| | |
| | false
| [1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6]
at Helllo.run(Helllo.groovy:2)
Groovy を使った Web システムのテスト
• Spock を使った記述方法
     
   
@Grab('org.spockframework:spock-core:0.7-groovy-2.0')
import spock.lang.*
class MathSpec extends Specification {
def "maximum of two numbers"() {
expect:
Math.max(a,b) ==c
where:
a|b||c
1|3||3
7|4||7
0|0||0
}
}
ラベルを使った期待値の記述方法
テストにあった
名前をメソッド名
をつける
テストデータの組み合わせを
このように表現する
JUnit で記載すっると、
結構これが大変な作業になる
Groovy を使った Web システムのテスト
    次回はここから Geb を使って
    ブラウザテストを行うとこまでいきます。
     
   
息抜きにブログでも呼んで
– リクルートライフスタイル 開発者ブログ
• http://engineer.recruit-lifestyle.co.jp/techblog/
参考 URL
– Groovy
• http://groovy-lang.org/
• https://speakerdeck.com/glaforge/what-makes-groovy-gro
( スライド )
– SPOCK
• https://code.google.com/p/spock/
– Geb
• http://www.slideshare.net/youtaroutakahashi/what-makes
  ( スライド )
• http://www.slideshare.net/hirokotamagawa/20141018-2se
( スライド )
• http://www.gebish.org

More Related Content

What's hot

Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Taku Miyakawa
 
Javascriptのあれやこれやをまとめて説明してみる
Javascriptのあれやこれやをまとめて説明してみるJavascriptのあれやこれやをまとめて説明してみる
Javascriptのあれやこれやをまとめて説明してみるShunji Konishi
 
モダンJavaScript環境構築一歩目
モダンJavaScript環境構築一歩目モダンJavaScript環境構築一歩目
モダンJavaScript環境構築一歩目大樹 小倉
 
JavaScript基礎勉強会
JavaScript基礎勉強会JavaScript基礎勉強会
JavaScript基礎勉強会大樹 小倉
 
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にJava SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にTaku Miyakawa
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜JustSystems Corporation
 
Gradleどうでしょう
GradleどうでしょうGradleどうでしょう
GradleどうでしょうTakuma Watabiki
 
Kink: プロトタイプベースの俺々 JVM 言語
Kink: プロトタイプベースの俺々 JVM 言語Kink: プロトタイプベースの俺々 JVM 言語
Kink: プロトタイプベースの俺々 JVM 言語Taku Miyakawa
 
むずかしくないJavaScriptのやさしい話 jQueryからの次のステップ #ndsmeetup8
むずかしくないJavaScriptのやさしい話 jQueryからの次のステップ #ndsmeetup8むずかしくないJavaScriptのやさしい話 jQueryからの次のステップ #ndsmeetup8
むずかしくないJavaScriptのやさしい話 jQueryからの次のステップ #ndsmeetup8civic Sasaki
 
.NET Compiler Platform
.NET Compiler Platform.NET Compiler Platform
.NET Compiler Platform信之 岩永
 
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例までBuildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例までMasahiro Wakame
 
Jjug 20140430 gradle_basic
Jjug 20140430 gradle_basicJjug 20140430 gradle_basic
Jjug 20140430 gradle_basicTakuma Watabiki
 
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUse JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUehara Junji
 
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4bitter_fox
 
An Internal of LINQ to Objects
An Internal of LINQ to ObjectsAn Internal of LINQ to Objects
An Internal of LINQ to ObjectsYoshifumi Kawai
 
ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3Masahiro Wakame
 
Introduce Groovy 2.3 trait
Introduce Groovy 2.3 trait Introduce Groovy 2.3 trait
Introduce Groovy 2.3 trait Uehara Junji
 
AngularJS+TypeScript - AngularJS 1周年記念勉強会
AngularJS+TypeScript - AngularJS 1周年記念勉強会AngularJS+TypeScript - AngularJS 1周年記念勉強会
AngularJS+TypeScript - AngularJS 1周年記念勉強会Masahiro Wakame
 

What's hot (20)

Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
Javascriptのあれやこれやをまとめて説明してみる
Javascriptのあれやこれやをまとめて説明してみるJavascriptのあれやこれやをまとめて説明してみる
Javascriptのあれやこれやをまとめて説明してみる
 
モダンJavaScript環境構築一歩目
モダンJavaScript環境構築一歩目モダンJavaScript環境構築一歩目
モダンJavaScript環境構築一歩目
 
JavaScript基礎勉強会
JavaScript基礎勉強会JavaScript基礎勉強会
JavaScript基礎勉強会
 
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にJava SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心に
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
 
Gradleどうでしょう
GradleどうでしょうGradleどうでしょう
Gradleどうでしょう
 
Kink: プロトタイプベースの俺々 JVM 言語
Kink: プロトタイプベースの俺々 JVM 言語Kink: プロトタイプベースの俺々 JVM 言語
Kink: プロトタイプベースの俺々 JVM 言語
 
むずかしくないJavaScriptのやさしい話 jQueryからの次のステップ #ndsmeetup8
むずかしくないJavaScriptのやさしい話 jQueryからの次のステップ #ndsmeetup8むずかしくないJavaScriptのやさしい話 jQueryからの次のステップ #ndsmeetup8
むずかしくないJavaScriptのやさしい話 jQueryからの次のステップ #ndsmeetup8
 
.NET Compiler Platform
.NET Compiler Platform.NET Compiler Platform
.NET Compiler Platform
 
覚醒!JavaScript
覚醒!JavaScript覚醒!JavaScript
覚醒!JavaScript
 
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例までBuildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
 
Jjug 20140430 gradle_basic
Jjug 20140430 gradle_basicJjug 20140430 gradle_basic
Jjug 20140430 gradle_basic
 
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUse JWT access-token on Grails REST API
Use JWT access-token on Grails REST API
 
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
 
キメるClojure
キメるClojureキメるClojure
キメるClojure
 
An Internal of LINQ to Objects
An Internal of LINQ to ObjectsAn Internal of LINQ to Objects
An Internal of LINQ to Objects
 
ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3
 
Introduce Groovy 2.3 trait
Introduce Groovy 2.3 trait Introduce Groovy 2.3 trait
Introduce Groovy 2.3 trait
 
AngularJS+TypeScript - AngularJS 1周年記念勉強会
AngularJS+TypeScript - AngularJS 1周年記念勉強会AngularJS+TypeScript - AngularJS 1周年記念勉強会
AngularJS+TypeScript - AngularJS 1周年記念勉強会
 

Viewers also liked

Amazon awsを使ったwordpressサイト構築のポイント
Amazon awsを使ったwordpressサイト構築のポイントAmazon awsを使ったwordpressサイト構築のポイント
Amazon awsを使ったwordpressサイト構築のポイントMugen Fujii
 
第5回 itil講義資料
第5回 itil講義資料第5回 itil講義資料
第5回 itil講義資料Mugen Fujii
 
第3回 ITIL講義資料
第3回 ITIL講義資料第3回 ITIL講義資料
第3回 ITIL講義資料Mugen Fujii
 
ITILの基礎、第1回講義資料
ITILの基礎、第1回講義資料ITILの基礎、第1回講義資料
ITILの基礎、第1回講義資料Mugen Fujii
 
第6回 itil講義資料
第6回 itil講義資料第6回 itil講義資料
第6回 itil講義資料Mugen Fujii
 
テスト自動化に対するAtlassian製品の有効活用法
テスト自動化に対するAtlassian製品の有効活用法テスト自動化に対するAtlassian製品の有効活用法
テスト自動化に対するAtlassian製品の有効活用法Mugen Fujii
 
WebDriverで始めるUIスモークテスティング入門
WebDriverで始めるUIスモークテスティング入門WebDriverで始めるUIスモークテスティング入門
WebDriverで始めるUIスモークテスティング入門Kohki Nakashima
 
第4回 itil講義資料
第4回 itil講義資料第4回 itil講義資料
第4回 itil講義資料Mugen Fujii
 
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識shigeya
 
第2回 ITIL講義資料
第2回 ITIL講義資料第2回 ITIL講義資料
第2回 ITIL講義資料Mugen Fujii
 
Selenium2(web driver) ide編
Selenium2(web driver) ide編Selenium2(web driver) ide編
Selenium2(web driver) ide編Tetsuya Hasegawa
 
PowerShell と Active Directory
PowerShell と Active DirectoryPowerShell と Active Directory
PowerShell と Active DirectoryChuki ちゅき
 
詳解!自動結合テスト #jasst
詳解!自動結合テスト #jasst詳解!自動結合テスト #jasst
詳解!自動結合テスト #jasstkyon mm
 
Active Directory をInternetから使用するための4つのシナリオ
Active Directory をInternetから使用するための4つのシナリオActive Directory をInternetから使用するための4つのシナリオ
Active Directory をInternetから使用するための4つのシナリオjunichi anno
 
Questionnaire results
Questionnaire resultsQuestionnaire results
Questionnaire resultslauren8908
 

Viewers also liked (20)

Amazon awsを使ったwordpressサイト構築のポイント
Amazon awsを使ったwordpressサイト構築のポイントAmazon awsを使ったwordpressサイト構築のポイント
Amazon awsを使ったwordpressサイト構築のポイント
 
第5回 itil講義資料
第5回 itil講義資料第5回 itil講義資料
第5回 itil講義資料
 
第3回 ITIL講義資料
第3回 ITIL講義資料第3回 ITIL講義資料
第3回 ITIL講義資料
 
ITILの基礎、第1回講義資料
ITILの基礎、第1回講義資料ITILの基礎、第1回講義資料
ITILの基礎、第1回講義資料
 
第6回 itil講義資料
第6回 itil講義資料第6回 itil講義資料
第6回 itil講義資料
 
テスト自動化に対するAtlassian製品の有効活用法
テスト自動化に対するAtlassian製品の有効活用法テスト自動化に対するAtlassian製品の有効活用法
テスト自動化に対するAtlassian製品の有効活用法
 
Spockの基礎
Spockの基礎Spockの基礎
Spockの基礎
 
WebDriverで始めるUIスモークテスティング入門
WebDriverで始めるUIスモークテスティング入門WebDriverで始めるUIスモークテスティング入門
WebDriverで始めるUIスモークテスティング入門
 
第4回 itil講義資料
第4回 itil講義資料第4回 itil講義資料
第4回 itil講義資料
 
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
 
第2回 ITIL講義資料
第2回 ITIL講義資料第2回 ITIL講義資料
第2回 ITIL講義資料
 
Selenium2(web driver) ide編
Selenium2(web driver) ide編Selenium2(web driver) ide編
Selenium2(web driver) ide編
 
PowerShell と Active Directory
PowerShell と Active DirectoryPowerShell と Active Directory
PowerShell と Active Directory
 
詳解!自動結合テスト #jasst
詳解!自動結合テスト #jasst詳解!自動結合テスト #jasst
詳解!自動結合テスト #jasst
 
Active Directory をInternetから使用するための4つのシナリオ
Active Directory をInternetから使用するための4つのシナリオActive Directory をInternetから使用するための4つのシナリオ
Active Directory をInternetから使用するための4つのシナリオ
 
Poddd
PodddPoddd
Poddd
 
Questionnaire results
Questionnaire resultsQuestionnaire results
Questionnaire results
 
Evaluation question 7
Evaluation question 7Evaluation question 7
Evaluation question 7
 
Mengatur Blogger Blog
Mengatur Blogger BlogMengatur Blogger Blog
Mengatur Blogger Blog
 
Toolbar etc
Toolbar etcToolbar etc
Toolbar etc
 

Similar to 第4回勉強会 Groovyの文法からSpockまで

JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiJavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiTomohiro Kumagai
 
EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発Kentaro Ohkouchi
 
JavaScriptクイックスタート
JavaScriptクイックスタートJavaScriptクイックスタート
JavaScriptクイックスタートShumpei Shiraishi
 
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめTypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめYu Nobuoka
 
WordCamp Kansai 2015 CI ハンズオン
WordCamp Kansai 2015 CI ハンズオンWordCamp Kansai 2015 CI ハンズオン
WordCamp Kansai 2015 CI ハンズオンタカシ キタジマ
 
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみるJJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみるKoichi Sakata
 
ちゃんとWeb会議スライド『Coffee script』
ちゃんとWeb会議スライド『Coffee script』ちゃんとWeb会議スライド『Coffee script』
ちゃんとWeb会議スライド『Coffee script』H2O Space. Co., Ltd.
 
T51 jQueryで学ぶJavaScriptでのフロント開発~ASP.NET MVC3もあるよっ!~
T51 jQueryで学ぶJavaScriptでのフロント開発~ASP.NET MVC3もあるよっ!~T51 jQueryで学ぶJavaScriptでのフロント開発~ASP.NET MVC3もあるよっ!~
T51 jQueryで学ぶJavaScriptでのフロント開発~ASP.NET MVC3もあるよっ!~normalian
 
関西Php勉強会のlimeの話
関西Php勉強会のlimeの話関西Php勉強会のlimeの話
関西Php勉強会のlimeの話Hisateru Tanaka
 
Ruby初級者向けレッスン 第46回 ─── Test::Unit
Ruby初級者向けレッスン 第46回 ─── Test::UnitRuby初級者向けレッスン 第46回 ─── Test::Unit
Ruby初級者向けレッスン 第46回 ─── Test::Unithigaki
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようAkira Shimosako
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDEdcubeio
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Tokuhiro Matsuno
 
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2Nishida Kansuke
 
第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016kyoto university
 
G*workshop sendai 20100424(v2)
G*workshop sendai 20100424(v2)G*workshop sendai 20100424(v2)
G*workshop sendai 20100424(v2)Nobuhiro Sue
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageTaku Miyakawa
 
Esm lt threading_macro
Esm lt threading_macroEsm lt threading_macro
Esm lt threading_macro工 久納
 
TDC20111031_Groovy_Geb
TDC20111031_Groovy_GebTDC20111031_Groovy_Geb
TDC20111031_Groovy_GebNobuhiro Sue
 

Similar to 第4回勉強会 Groovyの文法からSpockまで (20)

JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiJavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
 
EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発
 
JavaScriptクイックスタート
JavaScriptクイックスタートJavaScriptクイックスタート
JavaScriptクイックスタート
 
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめTypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめ
 
WordCamp Kansai 2015 CI ハンズオン
WordCamp Kansai 2015 CI ハンズオンWordCamp Kansai 2015 CI ハンズオン
WordCamp Kansai 2015 CI ハンズオン
 
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみるJJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
 
ちゃんとWeb会議スライド『Coffee script』
ちゃんとWeb会議スライド『Coffee script』ちゃんとWeb会議スライド『Coffee script』
ちゃんとWeb会議スライド『Coffee script』
 
T51 jQueryで学ぶJavaScriptでのフロント開発~ASP.NET MVC3もあるよっ!~
T51 jQueryで学ぶJavaScriptでのフロント開発~ASP.NET MVC3もあるよっ!~T51 jQueryで学ぶJavaScriptでのフロント開発~ASP.NET MVC3もあるよっ!~
T51 jQueryで学ぶJavaScriptでのフロント開発~ASP.NET MVC3もあるよっ!~
 
関西Php勉強会のlimeの話
関西Php勉強会のlimeの話関西Php勉強会のlimeの話
関西Php勉強会のlimeの話
 
Ruby初級者向けレッスン 第46回 ─── Test::Unit
Ruby初級者向けレッスン 第46回 ─── Test::UnitRuby初級者向けレッスン 第46回 ─── Test::Unit
Ruby初級者向けレッスン 第46回 ─── Test::Unit
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
 
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2
 
jenkinsで遊ぶ
jenkinsで遊ぶjenkinsで遊ぶ
jenkinsで遊ぶ
 
第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016
 
G*workshop sendai 20100424(v2)
G*workshop sendai 20100424(v2)G*workshop sendai 20100424(v2)
G*workshop sendai 20100424(v2)
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based language
 
Esm lt threading_macro
Esm lt threading_macroEsm lt threading_macro
Esm lt threading_macro
 
TDC20111031_Groovy_Geb
TDC20111031_Groovy_GebTDC20111031_Groovy_Geb
TDC20111031_Groovy_Geb
 

More from Mugen Fujii

Jupiter notebookをawsに構築しよう
Jupiter notebookをawsに構築しようJupiter notebookをawsに構築しよう
Jupiter notebookをawsに構築しようMugen Fujii
 
2020/8/22 IoT 研究会講演
2020/8/22 IoT 研究会講演2020/8/22 IoT 研究会講演
2020/8/22 IoT 研究会講演Mugen Fujii
 
集中型か分散型か
集中型か分散型か集中型か分散型か
集中型か分散型かMugen Fujii
 
ブロックチェーン技術はデジタル経営の基盤になり得るか
ブロックチェーン技術はデジタル経営の基盤になり得るかブロックチェーン技術はデジタル経営の基盤になり得るか
ブロックチェーン技術はデジタル経営の基盤になり得るかMugen Fujii
 
ブロックチェーン技術は幻滅期を超えれるか!?
ブロックチェーン技術は幻滅期を超えれるか!?ブロックチェーン技術は幻滅期を超えれるか!?
ブロックチェーン技術は幻滅期を超えれるか!?Mugen Fujii
 
Blockchainandcriptcurrency ver2
Blockchainandcriptcurrency ver2Blockchainandcriptcurrency ver2
Blockchainandcriptcurrency ver2Mugen Fujii
 
ブロックチェーンと仮想通貨の仕組みアップ用
ブロックチェーンと仮想通貨の仕組みアップ用ブロックチェーンと仮想通貨の仕組みアップ用
ブロックチェーンと仮想通貨の仕組みアップ用Mugen Fujii
 
Kintoneセミナー
KintoneセミナーKintoneセミナー
KintoneセミナーMugen Fujii
 
Kintoneセミナー
KintoneセミナーKintoneセミナー
KintoneセミナーMugen Fujii
 

More from Mugen Fujii (11)

Jupiter notebookをawsに構築しよう
Jupiter notebookをawsに構築しようJupiter notebookをawsに構築しよう
Jupiter notebookをawsに構築しよう
 
2020/8/22 IoT 研究会講演
2020/8/22 IoT 研究会講演2020/8/22 IoT 研究会講演
2020/8/22 IoT 研究会講演
 
5 g
5 g5 g
5 g
 
集中型か分散型か
集中型か分散型か集中型か分散型か
集中型か分散型か
 
ブロックチェーン技術はデジタル経営の基盤になり得るか
ブロックチェーン技術はデジタル経営の基盤になり得るかブロックチェーン技術はデジタル経営の基盤になり得るか
ブロックチェーン技術はデジタル経営の基盤になり得るか
 
ブロックチェーン技術は幻滅期を超えれるか!?
ブロックチェーン技術は幻滅期を超えれるか!?ブロックチェーン技術は幻滅期を超えれるか!?
ブロックチェーン技術は幻滅期を超えれるか!?
 
Blockchainandcriptcurrency ver2
Blockchainandcriptcurrency ver2Blockchainandcriptcurrency ver2
Blockchainandcriptcurrency ver2
 
ブロックチェーンと仮想通貨の仕組みアップ用
ブロックチェーンと仮想通貨の仕組みアップ用ブロックチェーンと仮想通貨の仕組みアップ用
ブロックチェーンと仮想通貨の仕組みアップ用
 
Kintoneセミナー
KintoneセミナーKintoneセミナー
Kintoneセミナー
 
Kintoneセミナー
KintoneセミナーKintoneセミナー
Kintoneセミナー
 
ハイレゾ
ハイレゾハイレゾ
ハイレゾ
 

第4回勉強会 Groovyの文法からSpockまで

  • 1. 第 4 回 勉強会 ~ Web での自動結合テストへの いざない Groovy から Spock まで~ 2016/1/23
  • 2. 今日やること – 前回までは、 Java の文法、 Spring を使った Web アプリケーションの構築、単体テスト、 JUnit を使った Unit テストのお話しでした。今日からはここ
  • 3. Web アプリケーションのテストを 自動化するために • Selenium Web Driver  ( http://www.seleniumhq.org/)  プログラムを書いてブラウザテストを自動的に実行す るためによく用いられる – 特徴1:マルチ言語 • Java   C #  PHP Python   Ruby   Perl JavaScript   など – 特徴2:マルチブラウザ対応 • Firefox   InternetExplorer   Safari   Opera   Chrome ※Selenium の情報の探し方 http://qiita.com/gluelan2013/items/a 9096d052dc2ab660728
  • 4. Web アプリケーションのテストを 自動化するために • なぜ、 Selenium がダメか? –  コーディングが非常に大変 • 初心者に難しい • 自動化テストを安定動作させるだけでも大変 –   Selenium Web Driver が高速ではない • テストスローの問題を招きやすい –  まだ、 Edge にドライバが対応していない –  スマートフォン、タブレットに対応しきれ ていない • Selenium3 に期待したいがいつ出るのだろう
  • 5. Groovy + Spock + Geb • Groovy – Java を極限まで簡単にしたスクリプト言語 – 1 時間で学べる学習コストの低さ – Java のクラスライブラリは全部呼び出せる • Geb – ゲブではなくジェブと読みます – Groovy で動く Selenium WebDriver のラッパー – jQuery のような Locator を指定して記述 – コード量が少なく、すっきり
  • 6. Groovy + Spock + Geb • ツールの立ち位置をマトリックスにしてみ ると ブラウザ操作 WebDriver Geb テスティング フレームワーク JUnit TestNG Spock 言語 Java Groovy マルチブラウザ対応 データ駆動テスト 強力な Assert なんとか Geb でテストケースを 書いてブラウザテストを自動実行したい
  • 7. Groovy のインストール方法 • http://www.groovy-lang.org/download.html – Windows インストーラでインストール • ソース配布などもあるが、バイナリ版の Windows イ ンストーラでのインストールが一番楽 – Build ツールからインストール • Maven 、 Gradle – IDE のプラグイン • Eclipse,NetBeans,Inteli-J などかく IDE にプラグインあ り • http://www.groovy-lang.org/ides.html
  • 8. Groovy のインストール方法 • Eclipse   Plugin – こちらを詳しくみると Eclipse への対応 https://github.com/groovy/groovy-eclipse/wiki – EclipseMars(4.5.1) 対応 http://dist.springsource.org/snapshot/GRECLIPSE/e4.5/
  • 9. Groovy の文法を 1 時間でマスターする • 世界最小の一文から  セミコロンはいらない (あっても動作す る)  かっこ()もいらない (あっても動作す る) ‘’ さすがに はないと 下記の Exception を吐く 。     println 'Hello' Exception thrown groovy.lang.MissingPropertyException: No such property: Hello for class: Helllo at Helllo.run(Helllo.groovy:1)
  • 10. Groovy の文法を 1 時間でマスターする • 世界最小の一文から Java Class Groovy Script     println 'Hello' public class Main { public static void main(String[] args) { System.out0.println("Hello"); } }
  • 11. Groovy の文法を 1 時間でマスターする • 型宣言  型宣言はいらない  ( 動的型つけ言語)   Java の型はそのまま使える。型を宣言してもよ い s = 'Hello' println s String s = 'Hello' println s def s = 'Hello' println s
  • 12. Groovy の文法を 1 時間でマスターする •  テキストリテラル ”“ を付けたほうが変数が評価されて展開され る  他のスクリプト言語でもよくある動作です   msg = “<<This is message>>” println “${msg}” println ‘${msg]’
  • 13. Groovy の文法を 1 時間でマスターする •  演算子 これなんて出力されると思います?   msg = "Hello" msg -= "l" msg *= 3 println msg
  • 14. Groovy の文法を 1 時間でマスターする •  クラスとメソッド     コンストラクタ、インスタンス変数、メ ソッド     オブジェクト作成の概念は Java と同じ class Helo { def msg Helo(s){ msg = s } def sayHello(){ println msg } } new Helo(" こんにちは ").sayHello()
  • 15. Groovy の文法を 1 時間でマスターする •  クラスとメソッド        クラスの継承や抽象クラスの      考え方は Java と同じ abstract class Abstract { String name abstract def abstractMethod() def concreteMethod() { println 'concrete' } } class Concreate extends Abstract { def abstractMethod(){ println "AbstractMethod 実装 " } } concrete = new Concreate(); concrete.abstractMethod();
  • 16. Groovy の文法を 1 時間でマスターする • リストとマップ     リストとマップはこんな風に書きます。          これ、なんて出力されると思いますか     こんなリストの演算もできます。 arr = [1,2,3] arr = ['one':1, 'two':2, 'three':3] arr = [1,2,3] arr += [4,5] arr -= [2,4] arr *= 2 println arr
  • 17. Groovy の文法を 1 時間でマスターする • 条件分岐           if 文はこのように書きます。      Java と同じですね。 num = new Random().nextInt(100) if (num % 2){ println "${num} は、奇数 " } else { println "${num} は、偶数 " }
  • 18. Groovy の文法を 1 時間でマスターする • 条件分岐                case 文は Java とちょっとちがいますね 。     より強力です。      case の中に配列が渡されています。 val = new Random().nextInt(10) switch(val){ case [0,2,4,6,8]: println "${val} は、偶数 " break case [1,3,5,7,9]: println "${val} は、奇数 " }
  • 19. Groovy の文法を 1 時間でマスターする • 繰り返し           for 文も Java とほとんど同じですね。     arr = [1,2,3,4,5] n = 0 for(item in arr){ println("$n + $item = " + (n + item)) n += item } println " 合計: $n"
  • 20. Groovy の文法を 1 時間でマスターする • クロージャ     こんな風に関数を書きます。            変数 total に関数 each の中からアクセスして います。      さらに it には1から 100 までの数字が外から      渡されています。      関数ブロックの外の変数を操作できる関数の msg = {str -> println " こんにちは、 ${str} さん! " } msg(' 太郎 ') total = 0 (1..100).each { total += it } println total
  • 21. Groovy の文法を 1 時間でマスターする • クロージャ 例をもう一つ          引数の型が異なっても大丈夫。               引数が可変長でも大丈夫。 def adder = {a,b -> a + b} assert adder(1,2) == 3 assert adder(‘a’,’b’) == ‘ab’ def sum = { ... elements -> elements.sum()} assert sum(1,2) == 3 assert sum('a', 'b' ,'c') == 'abc'
  • 22. Groovy の文法を 1 時間でマスターする • クロージャ 例をさらに一つ          引数にデフォルト値を設定               def mult = {int a, int b = 10 -> a * b} assert mult(2,3) == 6 assert mult(5) == 50
  • 23. Groovy の文法を 1 時間でマスターする • クロージャ 例をまだまだ                  Persons の配列から年齢が1 8 歳より下のオブジェクトを取り 出す。                         @groovy.transform.Immutable class Person { String name int age } def Persons = [ new Person('Guillaume',36), new Person('Marion',6), new Person('Erine',1) ] def names = Persons.findAll { it.age < 18 } .collect { it.name.toUpperCase()} .sort() .join(',')
  • 24. Groovy の文法を 1 時間でマスターする • クロージャ 例 ファイル読み書き                input. txtから一行ごとに情報を読み込み 、 Groovy という文字列が含まれていたら大文字に置 換して output.txt に出力します。 new File('input.txt').withReader { r -> new File('output.txt').withWriter { w -> r.eachlinie { line -> if (line.contains('Groovy')) w << line.toUpperCase() } } }
  • 25. Groovy の文法を 1 時間でマスターする • クロージャ 例 リストと組み合わせ た例                list ’の配列に d’ を追加した後、クロージャ を使った     処理を継続 def list =['a','b','c'] list << 'd' assert list.contains('d') assert list.findAll { it.startsWith 'a' }.size() == 1 assert list.collect { it.toUpperCase() } == ['A','B','C','D'] assert list.inject(''){a, b -> a + b} == 'abcd'
  • 26. Groovy の文法を 1 時間でマスターする • オープンクラス             Expando というクラスを new してオブジェク トを      作成するとオブジェクトの作成の後にインスタ ンス変数や、メソッドを追加できる。       Java スクリプトの prototype っぽいですね。       obj = new Expando() obj.name = "taro" obj.message = " こんにちは! " obj.say = { name = it println message + name } obj.say(" 花子さん ")
  • 27. Groovy の文法を 1 時間でマスターする • デフォルトで import されるパッケージ – java.io.* – java.lang.* – java.math.BigDecimal – java.math.BigInteger – java.net.* – java.util.* – groovy.lang.* – groovy.util.*
  • 28. Groovy の文法を 1 時間でマスターする • Java           Public class Greeter { private String owner; public String getOwner() { return owner; } public void setOwner(String owner) { this.owner = owner; } public String greet(String name) { return “Hello “ + name + “, I am “ + owner; } } Greeter greeter = new Greeter() ; greeter.setOwner(“Guillaume”); System.out.println(greeter.greet(“Marion”)); この Java コードが
  • 29. Groovy の文法を 1 時間でマスターする • Groovy Script           class Greeter { String owner String greet(String name) { “Hello ${name}, I am ${owner}” } } def greeter = new Greeter(owner: “Guillaume”) println greeter.greet(“Marion”) こんなに簡単な Script に
  • 30. Groovy を使った Web システムのテスト • PowerAssert           def x = [1,2,3,4,5] assert (x << 6) == [6,7,8,9,10] Exception thrown Assertion failed: assert (x << 6) == [6,7,8,9,10] | | | | | false | [1, 2, 3, 4, 5, 6] [1, 2, 3, 4, 5, 6] at Helllo.run(Helllo.groovy:2)
  • 31. Groovy を使った Web システムのテスト • Spock を使った記述方法           @Grab('org.spockframework:spock-core:0.7-groovy-2.0') import spock.lang.* class MathSpec extends Specification { def "maximum of two numbers"() { expect: Math.max(a,b) ==c where: a|b||c 1|3||3 7|4||7 0|0||0 } } ラベルを使った期待値の記述方法 テストにあった 名前をメソッド名 をつける テストデータの組み合わせを このように表現する JUnit で記載すっると、 結構これが大変な作業になる
  • 32. Groovy を使った Web システムのテスト     次回はここから Geb を使って     ブラウザテストを行うとこまでいきます。          
  • 34. 参考 URL – Groovy • http://groovy-lang.org/ • https://speakerdeck.com/glaforge/what-makes-groovy-gro ( スライド ) – SPOCK • https://code.google.com/p/spock/ – Geb • http://www.slideshare.net/youtaroutakahashi/what-makes   ( スライド ) • http://www.slideshare.net/hirokotamagawa/20141018-2se ( スライド ) • http://www.gebish.org