SlideShare a Scribd company logo
1 of 80
Download to read offline
Copyright 2017 Hiroyuki Onaka
#stac2017
GebとSpockではじめるシステム
テスト自動化
2017/12/10 システムテスト自動化カンファレンス2017-2
大中浩行(@setoazusa)
この作品は クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。
Copyright 2017 Hiroyuki Onaka
#stac2017
みなさまへのお願い
• 講演の様子は撮影可です。
• シャッター音が出ないようにしてください。
• このスライドはslideshareで公開します
• 感想はハッシュタグ #stac2017 まで
Copyright 2017 Hiroyuki Onaka
#stac2017
アジェンダ(1)
Groovyで書かれたWebDriver拡張であるGebと、
BDDスタイルのテスティングフレームワークで
あるSpockによるシステムテストの自動化につ
いて、その特徴をプロジェクトの採用を通じて
得られた知見を含めながら紹介します。
Copyright 2017 Hiroyuki Onaka
#stac2017
アジェンダ(2)
• テスト自動化ピラミッド
• Gebによるシステムテスト自動化
• Gebの建前と本音
• まとめ
Copyright 2017 Hiroyuki Onaka
#stac2017
わたしについて
• TDD Boot Camp(TDDBC)方面
• SIerの傭兵部隊所属
• アプリケーションエンジニア(主にJava)とインフラエンジニアの二刀
流
• 自動デプロイとかBlue-Green Deploymentとかやってたらいつのまにかこう
いうことになった
• 技術系同人サークル「ふぃーるどのーつ」主宰
• 国会図書館で「TDDの発展史」とか「Geb Spock」とかで検索すると結果に出
てくる
Copyright 2017 Hiroyuki Onaka
#stac2017
本スライドのサンプルコードは、
https://github.com/azusa/stac2017-geb
で公開しています。
Copyright 2017 Hiroyuki Onaka
#stac2017
テスト自動化
ピラミッド
Copyright 2017 Hiroyuki Onaka
#stac2017
...その前に
「システムテスト」とは?
Copyright 2017 Hiroyuki Onaka
#stac2017
よくある分類
• 単体テスト
• 結合テスト
• システムテスト
Copyright 2017 Hiroyuki Onaka
#stac2017
この言葉の呼び方って定義が拡散しますよね
「画面が関係するものは結合テストで扱いま
す」
「単体テストではブラウザーから画面を叩いて、
デバッガーで挙動を確認します」
Copyright 2017 Hiroyuki Onaka
#stac2017
新・アジャイルテストの四象限
Gregory, Janet, and Lisa Crispin.
「More Agile Testting Learining Journeys for the Whole Team.」
Copyright 2017 Hiroyuki Onaka
#stac2017
Googleのテスト分類
「グーグルでは、形態よりも規模を協調するた
めに、コード、統合、システムテストという区
別をせず、Sテスト、Mテスト、Lテストという
表現を使う」
James A. Whittaker,Jason Arbon,Jeff Carollo(著) 長尾高弘(訳)
「テストから見えてくるグーグルのソフトウェア開発
テストファーストによるエンジニアリング生産性向上」
Copyright 2017 Hiroyuki Onaka
#stac2017
「テスト自動化ピラミッド」
Mike Cohn 「Suceeding with agile」
Copyright 2017 Hiroyuki Onaka
#stac2017
Copyright 2017 Hiroyuki Onaka
#stac2017
• テスト自動化のレイヤーを「UI」
「Service」「Unit」の3つに分類したもの。
• 「Service」に対するテストが、アプリケー
ションのインターフェスに対するテストを、
UI(ユーザーインターフェース)を迂回して実
行することが特徴。
Copyright 2017 Hiroyuki Onaka
#stac2017
ここで使う「システムテスト」
UI(ユーザーインターフェース)を通して、エン
ドツーエンドでシステムの動作を確認する
Copyright 2017 Hiroyuki Onaka
#stac2017
エンドツーエンドのつらさ
• データのセットアップつらい…
• 実行時間つらい…
• コード何もいじってないのにテスト落ちた、
つらい…
Copyright 2017 Hiroyuki Onaka
#stac2017
マイクロサービスアーキテクチャ
Sam Newman(著) 佐藤直生(監訳)
「マイクロサービスアーキテクチャ」
Copyright 2017 Hiroyuki Onaka
#stac2017
エンドツーエンドテストの難易度の増大。
• システム相互の疎結合化、分散化
• それに伴う非同期処理の増大
結局昔やってた「結合一発勝負」とかわらなく
なってくる
Copyright 2017 Hiroyuki Onaka
#stac2017
「ストーリーでなくジャーニーをテストする」
これに対抗する最善の方法は、少数の中核となるジャーニー
に焦点を絞ってシステム全体をテストする方法です。この中
核となるジャーニーで対象になっていない機能は、互いに分
離してサービスを分析するテストで対処する必要があります。
このジャーニーは相互に合意され、共同で所有される必要が
あります。音楽専門店の例では、CD の注文、商品の返品、
新規顧客の作成といった(高価値な対話であり極めて少数
の)動作に焦点を絞るでしょう。
Sam Newman(著) 佐藤直生(監訳)
「マイクロサービスアーキテクチャ」
Copyright 2017 Hiroyuki Onaka
#stac2017
ところで、「ジャーニー」ってなによ
正直よくわからない
おそらく重要なのは、テストの粒度ではなく
「相互に合意され、共同で所有される必要」の
ほう
Copyright 2017 Hiroyuki Onaka
#stac2017
相互に合意することが必要な理由
継続的に開発が進むサービスにおいて、「システムテス
トの粒度を粗くする」ということは
• プロダクトオーナー(企画)サイドがリスクをどこま
で許容できるか
• 監視アラートへの立ち上がりを迅速に出来るか
という、ITサービス運用のリスク管理の視点と関係して
くるため
Copyright 2017 Hiroyuki Onaka
#stac2017
一つだけわかっていること
システムテストを自動化することは、「ユー
ザーストーリーをエンドツーエンドで網羅する
自動テストを作成する」ことではない
また、「メンテナンス対象となるシステムが一
個増える」くらいの覚悟が必要
Copyright 2017 Hiroyuki Onaka
#stac2017
Gebによるシス
テムテスト自
動化
Copyright 2017 Hiroyuki Onaka
#stac2017
Geb
• GroovyによるSelenium WebDriver拡張
• http://gebish.org/
• ライセンス: Apache License Version 2.0
Copyright 2017 Hiroyuki Onaka
#stac2017
Gebの特徴
• Groovy の言語機能を生かした簡潔な記述
• jQuery ライクなDOM へアクセスするための式言語
• ページオブジェクトのサポート
• 任意のテスティングフレームワークと組み合わせて
使用(Spock/Junit/TestNG/Cucumeber-JVM)
Copyright 2017 Hiroyuki Onaka
#stac2017
Spock
• Groovyで動作するテスティングフレーム
ワーク(BDDスタイル)
• Groovyの特徴を生かしたテスト記述
• PowerAssert/データ駆動/DSLによるテストケー
ス記述 etc
• Spock信者
Copyright 2017 Hiroyuki Onaka
#stac2017
Gebを採用した背景
• エンドツーエンドテストの自動化を検討した
が、キャプチャーアンドリプレイだと以下の
理由で立ちゆかなくなるのが目に見えてた
(2014年当時)
Copyright 2017 Hiroyuki Onaka
#stac2017
Gebを採用した背景(1/3)
キャプチャーアンドリプレイでは規模の拡大に
ともない保守が苦しくなる
Copyright 2017 Hiroyuki Onaka
#stac2017
Gebを採用した背景(2/3)
アジャイル開発プロセスの導入に伴い、イテ
レーションの進行につれてリグレッションテス
トの工数が拡大していくのに備える必要があっ
た
Copyright 2017 Hiroyuki Onaka
#stac2017
Gebを採用した背景(3/3)
シングルページアプリケーション
(Backbone.js)導入に伴い、画面遷移が非同期
が基本になるため、キャプチャーアンドリプレ
イでは画面遷移のところに個別にwaitを追加す
る必要が出てくる
Copyright 2017 Hiroyuki Onaka
#stac2017
Gebを採用したのは、自分の周囲にGroovyを
やっている人が多かったから
Copyright 2017 Hiroyuki Onaka
#stac2017
Spockを採用した背景
Geb+JUnitでプロトタイプ作成してチームメン
バーに渡したらいつの間にかGeb+Spockになっ
ていた
(実話)
Copyright 2017 Hiroyuki Onaka
#stac2017
ページオブジェクト
public メソッドは、ページが提供するサービスを表す
• ページの内部構造を露出しないようつとめる
• 原則として(ページオブジェクト内で) アサーションを行わない
• メソッドは他のページオブジェクトを返す
• 一つのページ全体を(一つの) ページオブジェクトで表す必要は
無い
• 同じ操作が異なる結果となる場合は、異なるメソッドとしてモ
デル化する
https://github.com/SeleniumHQ/selenium/wiki/PageObjects
Copyright 2017 Hiroyuki Onaka
#stac2017
Gebによるページオブジェクト
class GebishOrgHomePage extends Page {
static at = { title == "Geb - Very Groovy Browser Automation" }
static content = {
manualsMenu { module(ManualsMenuModule) }
}
}
Copyright 2017 Hiroyuki Onaka
#stac2017
Gebによるテスト(Spock+ページオブジェクト)
Copyright 2017 Hiroyuki Onaka
#stac2017Gebによるテスト(JUnit+ページ
オブジェクト未使用)
Copyright 2017 Hiroyuki Onaka
#stac2017
Gebによるテストの組み合わせ
• ページオブジェクト使う - 使わない
• テスティングフレームワーク
• Spock - JUnit - TestNG - Cucumber-JVM
• Maven - Gradle
Copyright 2017 Hiroyuki Onaka
#stac2017
テストのスタイルについてどう選択をするか
結論は、
ページオブジェクト+Spock+Gradle
一択
Copyright 2017 Hiroyuki Onaka
#stac2017
なぜページオブジェクトなのか
各ページのDOM要素にid属性を付けて要素の特
定に使う、という技法がSelenium WebDriver
のテストにはあります。
Copyright 2017 Hiroyuki Onaka
#stac2017htmlの要素にテストのためのid属性を
つけることの問題
• SPA(シングルページアプリケーション)だとス
コープがアプリケーション全体になる
• アプリケーションからの動的なDOM生成が増え
ると、idやclass属性を通してアプリケーション
のロジックとテストが密結合してしまう
「フロントエンドをリファクタリングしたらエンドツー
エンドのテストが全滅」とか...
Copyright 2017 Hiroyuki Onaka
#stac2017「idやclassを使ってテストを書くのは、
もはやアンチパターンである」
https://qiita.com/akameco/items/519f7e4d5442b2a9d2da
Copyright 2017 Hiroyuki Onaka
#stac2017
現実的な最適解
• セレクターでDOM要素への指定を記述して、
ページオブジェクトでそれをラップする。
• Gebの場合はjQueryライクなセレクターを使用可能
• テストからはページオブジェクト経由でアクセ
スすることで、DOMの要素を隠蔽し、htmlの構
造がかわったときの影響範囲を限定する
Copyright 2017 Hiroyuki Onaka
#stac2017
GebによるテストでSpockを選択する理由
Gebによるテスト記述はストーリーベースの記
述となるため、BDDスタイルのSpockでの記述
が向いている。
後パラメーター駆動のテストもやりやすい
Copyright 2017 Hiroyuki Onaka
#stac2017
もう一つのSpockを選択する理由:spock-reports
Copyright 2017 Hiroyuki Onaka
#stac2017
Gradleを選択する理由
ビルドに関するワークフローが単純なものには
Mavenが向いているが、
Copyright 2017 Hiroyuki Onaka
#stac2017
Gebによるテストには、スクリプトとしての細かい
制御が求められる
• クロスブラウザー
• テスト環境の切替
• テストスイートの管理など
よってGradle
Copyright 2017 Hiroyuki Onaka
#stac2017
Gebの建前と本
音
Copyright 2017 Hiroyuki Onaka
#stac2017
• 非同期処理
• スクリーンショット
• クロスブラウザー
• GebとGroovy
Copyright 2017 Hiroyuki Onaka
#stac2017
非同期処理(建前)
Geb では非同期処理の記述を行うには、要素の出現
判定する処理のブロックをwaitFor{ 条件}で囲みま
す。
タイムアウトまでの時間は、GebConfig.groovy の
waiting ブロックのクロージャーでtimeout プロパ
ティーを設定します。
Copyright 2017 Hiroyuki Onaka
#stac2017
非同期処理(本音)
DOMの出現でいくらWaitかけたってサーバー側
の非同期処理はWaitのしようがない
不安定なGebのシナリオのかなりの割合が、
サーバー側の非同期処理に対するWaitが適切で
ないことによります
Copyright 2017 Hiroyuki Onaka
#stac2017
サーバー側の非同期処理
データ連携などの非同期処理の結果を参照でき
るAPIを用意するなど、アーキテクチャーで手
当をすべきです。
それがないと、データベースをポーリングして
データが反映されるのを待つとか、sleepの秒数
で調節するとか、つらいことになります。
Copyright 2017 Hiroyuki Onaka
#stac2017
スクリーンショット(建前)
• geb.spock.GebReportingSpec を継承する
ことで、テストの実行時に自動でスクリーン
ショットを取得することができます。
Copyright 2017 Hiroyuki Onaka
#stac2017
スクリーンショット(本音)
• トーストの消える消えない等のアニメーショ
ンの動きを、スクリーンショットを見てわか
るには超能力が必要
• SPAにおける、アプリケーションのハング
アップもまた爾り
Copyright 2017 Hiroyuki Onaka
#stac2017
画面を録画するソリューション
• BrowserStackとかSauce Labsとか
• 画面を録画する用途にしては大げさすぎやし
ませんか?
Copyright 2017 Hiroyuki Onaka
#stac2017というわけで、OSSだけで画面録画を目指してみ
ましょう
用意するもの
• Ubuntu(17.10)
• ブラウザー(Firefox)
• Xvfb
• tmux
• FFmpeg
Copyright 2017 Hiroyuki Onaka
#stac2017
Xvfb :1 -screen 0 1920x1200x24 -ac &
tmux new-session -d -s Recording1 'ffmpeg -y -f
x11grab -video_size 1920x1200 -i :1 -codec:v
libx264 -r 12 -ab 128k /vagrant/out4.mp4'
export DISPLAY=:1
./gradlew test -Pbrowser=firefox
tmux send-keys -t Recording1 q
Copyright 2017 Hiroyuki Onaka
#stac2017
やっていること
• Xvfbで起動した仮想デスクトップをFFmpegで
キャプチャー
• Gradleによるテストを、仮想デスクトップ上で
実行
• FFmpegは終了するのに「q」のキーシーケンス
を送る必要があるので、tmuxのセッション上で
起動
Copyright 2017 Hiroyuki Onaka
#stac2017
詳しくはブログで
http://blog.fieldnotes.jp/entry/recordiing-
selenium-test
Copyright 2017 Hiroyuki Onaka
#stac2017
クロスブラウザー(建前)
GebConfig.groovy 内のdriver という変数に
• WebDriver の実装クラス名を指す文字列
• WebDriver のインスタンスを返すクロージャー
を示すことで、使用するブラウザーを切り替え
ることができます。
Copyright 2017 Hiroyuki Onaka
#stac2017
クロスブラウザー(本音)
• 1ブラウザーでも不安定なテスト安定させる
の大変なのにクロスブラウザーとか正直やっ
てられない
• 大体ここでやりたいことはユーザーインター
フェースの単体テストではない
Copyright 2017 Hiroyuki Onaka
#stac2017
それでもクロスブラウザーをやるというなら
Geb では、実行時にシステムプロパティー
geb.env を設定することにより、設定ファイル
(GebConfig.groovy) のenvironmentsブロック
で設定値の切り替えを行うことができます。
Gebの公式サンプルでは、この機能を使ってブ
ラウザーの切替を行っています。
geb/geb-example.gradle
https://github.com/geb/geb-example-gradle
Copyright 2017 Hiroyuki Onaka
#stac2017
ですが
ブラウザーの切り替えにgeb.envを使うと、対
象の環境(開発環境とかステージング環境とか)
の切替をどこに持たせるかという問題がおきま
す。
またGebの公式サンプルでは、IDEからの実行
を考慮していないという問題
Copyright 2017 Hiroyuki Onaka
#stac2017
そうすると、起動時にフラグでブラウザーを指
定して、GebConfig.groovyの中で切替やセッ
トアップをすることになるわけですが...
Copyright 2017 Hiroyuki Onaka
#stac2017
画像はイメージです(1)
Copyright 2017 Hiroyuki Onaka
#stac2017
画像はイメージです(2)
Copyright 2017 Hiroyuki Onaka
#stac2017
このやり方はちとつらい
というわけで今回紹介するのが、
ブラウザーごとにWebDriverのセットアップを
自動でやってくれるWebDriverManager
(https://github.com/bonigarcia/webdriverm
anager)
です。
Copyright 2017 Hiroyuki Onaka
#stac2017
先ほどのコードがこうなります
Copyright 2017 Hiroyuki Onaka
#stac2017
GebとGroovy(建前)
Geb は、Groovy の言語機能を生かした簡潔な
記述でテストを書くことができます。
Copyright 2017 Hiroyuki Onaka
#stac2017
GebとGroovy(本音)
IDEの補完効かない
Copyright 2017 Hiroyuki Onaka
#stac2017
それに対する解: Intellij IDEA
Copyright 2017 Hiroyuki Onaka
#stac2017
まとめ
Copyright 2017 Hiroyuki Onaka
#stac2017
システムテストを自動化するということ
システムテストを自動化するということは、
「メンテナンスするシステムが1個増える」
くらいに考えたほうがいい
Copyright 2017 Hiroyuki Onaka
#stac2017
それでもなぜ自動化するのか
• 自動化のゴールをコスト削減に向けると、全
体として縮小均衡にしかならない
• 私は「テスト自動化によってテスト要員を○名削
減できました」という仕事がしたいわけではない
Copyright 2017 Hiroyuki Onaka
#stac2017
自動化によって「何を減らせるか」ではなく、
自動化によって「新しいことが出来るようにな
る」、ということに目を向けるべき
Copyright 2017 Hiroyuki Onaka
#stac2017「システムテストを自動化する」ことに
よって新しくできることになることは?
その前に、一個エピソードを紹介したいと思い
ます。
Copyright 2017 Hiroyuki Onaka
#stac2017
大手通信会社の法人向けサービスの事例
開発チームがGebで作成したエンドツーエンド
のテストを、Javaのバージョンアップや、
Blue-Green Deployment導入に伴うインフラ
更改の際の動作確認として使用した、という事
例。
Copyright 2017 Hiroyuki Onaka
#stac2017
システムテストが自動化されていたことにより、
インフラがサービス水準の改善のために積極的
にインフラの構成に手をいれることができるよ
うになった、ということ。
Copyright 2017 Hiroyuki Onaka
#stac2017「システムテストを自動化する」ことに
よって新しくできることになることは?
複数の異なる粒度のテストのレイヤーが自動化
されて組み合わさることにより、
• 継続的なサービスな改善に対応できるテスト
工程が構築されること。
• 手動テストが、「魅力的品質」寄りのテスト
に注力できるようになること。
Copyright 2017 Hiroyuki Onaka
#stac2017
ありがとうございました!
• 大中浩行(Onaka,Hiroyuki)
• @setoazusa
• グロースエクスパートナーズ株式会社
アーキテクチャソリューション部
テクニカルリード
• http://hiroyuki.fieldnotes.jp/

More Related Content

What's hot

ワタシはSingletonがキライだ
ワタシはSingletonがキライだワタシはSingletonがキライだ
ワタシはSingletonがキライだTetsuya Kaneuchi
 
TDD のこころ @ OSH2014
TDD のこころ @ OSH2014TDD のこころ @ OSH2014
TDD のこころ @ OSH2014Takuto Wada
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
 
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについてSEGADevTech
 
このPHP QAツールがすごい!2019
このPHP QAツールがすごい!2019 このPHP QAツールがすごい!2019
このPHP QAツールがすごい!2019 sasezaki
 
5分でわかるクリーンアーキテクチャ
5分でわかるクリーンアーキテクチャ5分でわかるクリーンアーキテクチャ
5分でわかるクリーンアーキテクチャKenji Tanaka
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビューTakafumi ONAKA
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門泰 増田
 
イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知るShuhei Fujita
 
【Ltech#6 】LIFULLでのQAのあり方
【Ltech#6 】LIFULLでのQAのあり方【Ltech#6 】LIFULLでのQAのあり方
【Ltech#6 】LIFULLでのQAのあり方LIFULL Co., Ltd.
 
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールこんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールdcubeio
 
クラシフィケーション・ツリー法入門
クラシフィケーション・ツリー法入門クラシフィケーション・ツリー法入門
クラシフィケーション・ツリー法入門H Iseri
 
(2017.6.9) Neo4jの可視化ライブラリまとめ
(2017.6.9) Neo4jの可視化ライブラリまとめ(2017.6.9) Neo4jの可視化ライブラリまとめ
(2017.6.9) Neo4jの可視化ライブラリまとめMitsutoshi Kiuchi
 
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステムSEGADevTech
 
テストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jpテストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jpkyon mm
 
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをなAmazon Web Services Japan
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean ArchitectureAtsushi Nakamura
 

What's hot (20)

ワタシはSingletonがキライだ
ワタシはSingletonがキライだワタシはSingletonがキライだ
ワタシはSingletonがキライだ
 
TDD のこころ @ OSH2014
TDD のこころ @ OSH2014TDD のこころ @ OSH2014
TDD のこころ @ OSH2014
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
 
このPHP QAツールがすごい!2019
このPHP QAツールがすごい!2019 このPHP QAツールがすごい!2019
このPHP QAツールがすごい!2019
 
5分でわかるクリーンアーキテクチャ
5分でわかるクリーンアーキテクチャ5分でわかるクリーンアーキテクチャ
5分でわかるクリーンアーキテクチャ
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
 
イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知る
 
【Ltech#6 】LIFULLでのQAのあり方
【Ltech#6 】LIFULLでのQAのあり方【Ltech#6 】LIFULLでのQAのあり方
【Ltech#6 】LIFULLでのQAのあり方
 
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールこんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツール
 
GraphQL入門 (AWS AppSync)
GraphQL入門 (AWS AppSync)GraphQL入門 (AWS AppSync)
GraphQL入門 (AWS AppSync)
 
クラシフィケーション・ツリー法入門
クラシフィケーション・ツリー法入門クラシフィケーション・ツリー法入門
クラシフィケーション・ツリー法入門
 
DevOps with Database on AWS
DevOps with Database on AWSDevOps with Database on AWS
DevOps with Database on AWS
 
(2017.6.9) Neo4jの可視化ライブラリまとめ
(2017.6.9) Neo4jの可視化ライブラリまとめ(2017.6.9) Neo4jの可視化ライブラリまとめ
(2017.6.9) Neo4jの可視化ライブラリまとめ
 
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
 
テストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jpテストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jp
 
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
 
Molecule入門
Molecule入門Molecule入門
Molecule入門
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 

Similar to 「GebとSpockではじめるシステムテスト自動化」

Web frontend performance tuning
Web frontend      performance tuningWeb frontend      performance tuning
Web frontend performance tuningssuser3c214d
 
Mackerelではじめる お手軽サーバー監視
Mackerelではじめる お手軽サーバー監視Mackerelではじめる お手軽サーバー監視
Mackerelではじめる お手軽サーバー監視Hiroyuki Ohnaka
 
決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニー決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニーTokuhiro Eto
 
Azure Functions あれこれ
Azure Functions あれこれAzure Functions あれこれ
Azure Functions あれこれYasuaki Matsuda
 
最近、実務に導入してみたフロントエンドの技術8つの良かった点と反省点
最近、実務に導入してみたフロントエンドの技術8つの良かった点と反省点最近、実務に導入してみたフロントエンドの技術8つの良かった点と反省点
最近、実務に導入してみたフロントエンドの技術8つの良かった点と反省点Horiguchi Seito
 
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話JustSystems Corporation
 
単体テストをやってみた~既存サービスに単体テストを追加するチャレンジ~
単体テストをやってみた~既存サービスに単体テストを追加するチャレンジ~単体テストをやってみた~既存サービスに単体テストを追加するチャレンジ~
単体テストをやってみた~既存サービスに単体テストを追加するチャレンジ~ceres-inc
 
Gradleどうでしょう
GradleどうでしょうGradleどうでしょう
GradleどうでしょうTakuma Watabiki
 
TDDはじめて物語 Second Season #tddbc
TDDはじめて物語 Second Season #tddbcTDDはじめて物語 Second Season #tddbc
TDDはじめて物語 Second Season #tddbcHiroyuki Ohnaka
 
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Hiroyuki Ohnaka
 
Android studio で行ってみよう!!
Android studio で行ってみよう!!Android studio で行ってみよう!!
Android studio で行ってみよう!!Kazuaki Ueda
 
Material DesignをPolymerで表現しよう(神戸ITフェスティバル × HTML5fun@神戸)
Material DesignをPolymerで表現しよう(神戸ITフェスティバル × HTML5fun@神戸)Material DesignをPolymerで表現しよう(神戸ITフェスティバル × HTML5fun@神戸)
Material DesignをPolymerで表現しよう(神戸ITフェスティバル × HTML5fun@神戸)Masayuki Abe
 
Test automation strategy for .net core 3 transition
Test automation strategy for .net core 3 transitionTest automation strategy for .net core 3 transition
Test automation strategy for .net core 3 transitionTatsuya Ishikawa
 
Azure Machine Leaning Workbench の使い方
Azure Machine Leaning Workbench の使い方Azure Machine Leaning Workbench の使い方
Azure Machine Leaning Workbench の使い方Yoshitaka Seo
 
SeleniumConf16 UK参加報告
SeleniumConf16 UK参加報告SeleniumConf16 UK参加報告
SeleniumConf16 UK参加報告Osamu Shimoda
 
レガシーと向き合い技術スタックを代謝する(ElasticBeanstalk / Vue.js)
レガシーと向き合い技術スタックを代謝する(ElasticBeanstalk / Vue.js)レガシーと向き合い技術スタックを代謝する(ElasticBeanstalk / Vue.js)
レガシーと向き合い技術スタックを代謝する(ElasticBeanstalk / Vue.js)Recruit Lifestyle Co., Ltd.
 
ML Ops NYC 19 & Strata Data Conference 2019 NewYork 注目セッションまとめ
ML Ops NYC 19 & Strata Data Conference 2019 NewYork 注目セッションまとめML Ops NYC 19 & Strata Data Conference 2019 NewYork 注目セッションまとめ
ML Ops NYC 19 & Strata Data Conference 2019 NewYork 注目セッションまとめTetsutaro Watanabe
 
誰にでもできるパフォーマンスチューニング
誰にでもできるパフォーマンスチューニング誰にでもできるパフォーマンスチューニング
誰にでもできるパフォーマンスチューニングKiyokazu Kaba
 
Azure Function GAした!Visual Studio Tools for Azure Functions もプレビューだ!
Azure Function GAした!Visual Studio Tools for Azure Functions もプレビューだ!Azure Function GAした!Visual Studio Tools for Azure Functions もプレビューだ!
Azure Function GAした!Visual Studio Tools for Azure Functions もプレビューだ!Yasuaki Matsuda
 

Similar to 「GebとSpockではじめるシステムテスト自動化」 (20)

Web frontend performance tuning
Web frontend      performance tuningWeb frontend      performance tuning
Web frontend performance tuning
 
Mackerelではじめる お手軽サーバー監視
Mackerelではじめる お手軽サーバー監視Mackerelではじめる お手軽サーバー監視
Mackerelではじめる お手軽サーバー監視
 
決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニー決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニー
 
決済金融から始めるデータドリブンカンパニー #yjmu
決済金融から始めるデータドリブンカンパニー #yjmu決済金融から始めるデータドリブンカンパニー #yjmu
決済金融から始めるデータドリブンカンパニー #yjmu
 
Azure Functions あれこれ
Azure Functions あれこれAzure Functions あれこれ
Azure Functions あれこれ
 
最近、実務に導入してみたフロントエンドの技術8つの良かった点と反省点
最近、実務に導入してみたフロントエンドの技術8つの良かった点と反省点最近、実務に導入してみたフロントエンドの技術8つの良かった点と反省点
最近、実務に導入してみたフロントエンドの技術8つの良かった点と反省点
 
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
 
単体テストをやってみた~既存サービスに単体テストを追加するチャレンジ~
単体テストをやってみた~既存サービスに単体テストを追加するチャレンジ~単体テストをやってみた~既存サービスに単体テストを追加するチャレンジ~
単体テストをやってみた~既存サービスに単体テストを追加するチャレンジ~
 
Gradleどうでしょう
GradleどうでしょうGradleどうでしょう
Gradleどうでしょう
 
TDDはじめて物語 Second Season #tddbc
TDDはじめて物語 Second Season #tddbcTDDはじめて物語 Second Season #tddbc
TDDはじめて物語 Second Season #tddbc
 
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
 
Android studio で行ってみよう!!
Android studio で行ってみよう!!Android studio で行ってみよう!!
Android studio で行ってみよう!!
 
Material DesignをPolymerで表現しよう(神戸ITフェスティバル × HTML5fun@神戸)
Material DesignをPolymerで表現しよう(神戸ITフェスティバル × HTML5fun@神戸)Material DesignをPolymerで表現しよう(神戸ITフェスティバル × HTML5fun@神戸)
Material DesignをPolymerで表現しよう(神戸ITフェスティバル × HTML5fun@神戸)
 
Test automation strategy for .net core 3 transition
Test automation strategy for .net core 3 transitionTest automation strategy for .net core 3 transition
Test automation strategy for .net core 3 transition
 
Azure Machine Leaning Workbench の使い方
Azure Machine Leaning Workbench の使い方Azure Machine Leaning Workbench の使い方
Azure Machine Leaning Workbench の使い方
 
SeleniumConf16 UK参加報告
SeleniumConf16 UK参加報告SeleniumConf16 UK参加報告
SeleniumConf16 UK参加報告
 
レガシーと向き合い技術スタックを代謝する(ElasticBeanstalk / Vue.js)
レガシーと向き合い技術スタックを代謝する(ElasticBeanstalk / Vue.js)レガシーと向き合い技術スタックを代謝する(ElasticBeanstalk / Vue.js)
レガシーと向き合い技術スタックを代謝する(ElasticBeanstalk / Vue.js)
 
ML Ops NYC 19 & Strata Data Conference 2019 NewYork 注目セッションまとめ
ML Ops NYC 19 & Strata Data Conference 2019 NewYork 注目セッションまとめML Ops NYC 19 & Strata Data Conference 2019 NewYork 注目セッションまとめ
ML Ops NYC 19 & Strata Data Conference 2019 NewYork 注目セッションまとめ
 
誰にでもできるパフォーマンスチューニング
誰にでもできるパフォーマンスチューニング誰にでもできるパフォーマンスチューニング
誰にでもできるパフォーマンスチューニング
 
Azure Function GAした!Visual Studio Tools for Azure Functions もプレビューだ!
Azure Function GAした!Visual Studio Tools for Azure Functions もプレビューだ!Azure Function GAした!Visual Studio Tools for Azure Functions もプレビューだ!
Azure Function GAした!Visual Studio Tools for Azure Functions もプレビューだ!
 

More from Hiroyuki Ohnaka

remote Docker over SSHが熱い
remote Docker over SSHが熱いremote Docker over SSHが熱い
remote Docker over SSHが熱いHiroyuki Ohnaka
 
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験Hiroyuki Ohnaka
 
Remote Development with Visual Studio Code & A clean dev env, working every ...
Remote Development with Visual Studio Code &  A clean dev env, working every ...Remote Development with Visual Studio Code &  A clean dev env, working every ...
Remote Development with Visual Studio Code & A clean dev env, working every ...Hiroyuki Ohnaka
 
ChefとItamaeをニコイチしてAnsibleにマイグレーションした話
ChefとItamaeをニコイチしてAnsibleにマイグレーションした話ChefとItamaeをニコイチしてAnsibleにマイグレーションした話
ChefとItamaeをニコイチしてAnsibleにマイグレーションした話Hiroyuki Ohnaka
 
「WindowsデスクトップでWeb開発 改訂版」サンプル
「WindowsデスクトップでWeb開発 改訂版」サンプル「WindowsデスクトップでWeb開発 改訂版」サンプル
「WindowsデスクトップでWeb開発 改訂版」サンプルHiroyuki Ohnaka
 
Microsoft DocsにContributeした話
Microsoft DocsにContributeした話Microsoft DocsにContributeした話
Microsoft DocsにContributeした話Hiroyuki Ohnaka
 
Azure functions+typescript
Azure functions+typescriptAzure functions+typescript
Azure functions+typescriptHiroyuki Ohnaka
 
技術書典4 く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
 技術書典4  く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版 技術書典4  く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
技術書典4 く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版Hiroyuki Ohnaka
 
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版Hiroyuki Ohnaka
 
仮想通貨始めました~GethではじめるEthereum~
仮想通貨始めました~GethではじめるEthereum~仮想通貨始めました~GethではじめるEthereum~
仮想通貨始めました~GethではじめるEthereum~Hiroyuki Ohnaka
 
錬金術MeetUpへのお誘い
錬金術MeetUpへのお誘い錬金術MeetUpへのお誘い
錬金術MeetUpへのお誘いHiroyuki Ohnaka
 
TDDはじめて物語Second Season(updated)
TDDはじめて物語Second Season(updated)TDDはじめて物語Second Season(updated)
TDDはじめて物語Second Season(updated)Hiroyuki Ohnaka
 
XP祭り2017 LT 「DevOps再考」(改題)
XP祭り2017 LT 「DevOps再考」(改題)XP祭り2017 LT 「DevOps再考」(改題)
XP祭り2017 LT 「DevOps再考」(改題)Hiroyuki Ohnaka
 
JDK9の真の目玉機能はこれだ!
JDK9の真の目玉機能はこれだ!JDK9の真の目玉機能はこれだ!
JDK9の真の目玉機能はこれだ!Hiroyuki Ohnaka
 
「すいーとみゅーじっく」のできるまで
「すいーとみゅーじっく」のできるまで「すいーとみゅーじっく」のできるまで
「すいーとみゅーじっく」のできるまでHiroyuki Ohnaka
 
pact-jvmではじめるコンシューマー駆動契約
pact-jvmではじめるコンシューマー駆動契約pact-jvmではじめるコンシューマー駆動契約
pact-jvmではじめるコンシューマー駆動契約Hiroyuki Ohnaka
 
実録Blue-Green Deployment導入記
実録Blue-Green Deployment導入記実録Blue-Green Deployment導入記
実録Blue-Green Deployment導入記Hiroyuki Ohnaka
 
TDDのこれまで、そしてこれから
TDDのこれまで、そしてこれからTDDのこれまで、そしてこれから
TDDのこれまで、そしてこれからHiroyuki Ohnaka
 
「TDDはじめて物語」 #tddbc
「TDDはじめて物語」 #tddbc「TDDはじめて物語」 #tddbc
「TDDはじめて物語」 #tddbcHiroyuki Ohnaka
 

More from Hiroyuki Ohnaka (20)

remote Docker over SSHが熱い
remote Docker over SSHが熱いremote Docker over SSHが熱い
remote Docker over SSHが熱い
 
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
 
Remote Development with Visual Studio Code & A clean dev env, working every ...
Remote Development with Visual Studio Code &  A clean dev env, working every ...Remote Development with Visual Studio Code &  A clean dev env, working every ...
Remote Development with Visual Studio Code & A clean dev env, working every ...
 
ChefとItamaeをニコイチしてAnsibleにマイグレーションした話
ChefとItamaeをニコイチしてAnsibleにマイグレーションした話ChefとItamaeをニコイチしてAnsibleにマイグレーションした話
ChefとItamaeをニコイチしてAnsibleにマイグレーションした話
 
「WindowsデスクトップでWeb開発 改訂版」サンプル
「WindowsデスクトップでWeb開発 改訂版」サンプル「WindowsデスクトップでWeb開発 改訂版」サンプル
「WindowsデスクトップでWeb開発 改訂版」サンプル
 
Mackerelの薄い本
Mackerelの薄い本Mackerelの薄い本
Mackerelの薄い本
 
Microsoft DocsにContributeした話
Microsoft DocsにContributeした話Microsoft DocsにContributeした話
Microsoft DocsにContributeした話
 
Azure functions+typescript
Azure functions+typescriptAzure functions+typescript
Azure functions+typescript
 
技術書典4 く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
 技術書典4  く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版 技術書典4  く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
技術書典4 く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
 
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
 
仮想通貨始めました~GethではじめるEthereum~
仮想通貨始めました~GethではじめるEthereum~仮想通貨始めました~GethではじめるEthereum~
仮想通貨始めました~GethではじめるEthereum~
 
錬金術MeetUpへのお誘い
錬金術MeetUpへのお誘い錬金術MeetUpへのお誘い
錬金術MeetUpへのお誘い
 
TDDはじめて物語Second Season(updated)
TDDはじめて物語Second Season(updated)TDDはじめて物語Second Season(updated)
TDDはじめて物語Second Season(updated)
 
XP祭り2017 LT 「DevOps再考」(改題)
XP祭り2017 LT 「DevOps再考」(改題)XP祭り2017 LT 「DevOps再考」(改題)
XP祭り2017 LT 「DevOps再考」(改題)
 
JDK9の真の目玉機能はこれだ!
JDK9の真の目玉機能はこれだ!JDK9の真の目玉機能はこれだ!
JDK9の真の目玉機能はこれだ!
 
「すいーとみゅーじっく」のできるまで
「すいーとみゅーじっく」のできるまで「すいーとみゅーじっく」のできるまで
「すいーとみゅーじっく」のできるまで
 
pact-jvmではじめるコンシューマー駆動契約
pact-jvmではじめるコンシューマー駆動契約pact-jvmではじめるコンシューマー駆動契約
pact-jvmではじめるコンシューマー駆動契約
 
実録Blue-Green Deployment導入記
実録Blue-Green Deployment導入記実録Blue-Green Deployment導入記
実録Blue-Green Deployment導入記
 
TDDのこれまで、そしてこれから
TDDのこれまで、そしてこれからTDDのこれまで、そしてこれから
TDDのこれまで、そしてこれから
 
「TDDはじめて物語」 #tddbc
「TDDはじめて物語」 #tddbc「TDDはじめて物語」 #tddbc
「TDDはじめて物語」 #tddbc
 

「GebとSpockではじめるシステムテスト自動化」

  • 1. Copyright 2017 Hiroyuki Onaka #stac2017 GebとSpockではじめるシステム テスト自動化 2017/12/10 システムテスト自動化カンファレンス2017-2 大中浩行(@setoazusa) この作品は クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。
  • 2. Copyright 2017 Hiroyuki Onaka #stac2017 みなさまへのお願い • 講演の様子は撮影可です。 • シャッター音が出ないようにしてください。 • このスライドはslideshareで公開します • 感想はハッシュタグ #stac2017 まで
  • 3. Copyright 2017 Hiroyuki Onaka #stac2017 アジェンダ(1) Groovyで書かれたWebDriver拡張であるGebと、 BDDスタイルのテスティングフレームワークで あるSpockによるシステムテストの自動化につ いて、その特徴をプロジェクトの採用を通じて 得られた知見を含めながら紹介します。
  • 4. Copyright 2017 Hiroyuki Onaka #stac2017 アジェンダ(2) • テスト自動化ピラミッド • Gebによるシステムテスト自動化 • Gebの建前と本音 • まとめ
  • 5. Copyright 2017 Hiroyuki Onaka #stac2017 わたしについて • TDD Boot Camp(TDDBC)方面 • SIerの傭兵部隊所属 • アプリケーションエンジニア(主にJava)とインフラエンジニアの二刀 流 • 自動デプロイとかBlue-Green Deploymentとかやってたらいつのまにかこう いうことになった • 技術系同人サークル「ふぃーるどのーつ」主宰 • 国会図書館で「TDDの発展史」とか「Geb Spock」とかで検索すると結果に出 てくる
  • 6. Copyright 2017 Hiroyuki Onaka #stac2017 本スライドのサンプルコードは、 https://github.com/azusa/stac2017-geb で公開しています。
  • 7. Copyright 2017 Hiroyuki Onaka #stac2017 テスト自動化 ピラミッド
  • 8. Copyright 2017 Hiroyuki Onaka #stac2017 ...その前に 「システムテスト」とは?
  • 9. Copyright 2017 Hiroyuki Onaka #stac2017 よくある分類 • 単体テスト • 結合テスト • システムテスト
  • 10. Copyright 2017 Hiroyuki Onaka #stac2017 この言葉の呼び方って定義が拡散しますよね 「画面が関係するものは結合テストで扱いま す」 「単体テストではブラウザーから画面を叩いて、 デバッガーで挙動を確認します」
  • 11. Copyright 2017 Hiroyuki Onaka #stac2017 新・アジャイルテストの四象限 Gregory, Janet, and Lisa Crispin. 「More Agile Testting Learining Journeys for the Whole Team.」
  • 12. Copyright 2017 Hiroyuki Onaka #stac2017 Googleのテスト分類 「グーグルでは、形態よりも規模を協調するた めに、コード、統合、システムテストという区 別をせず、Sテスト、Mテスト、Lテストという 表現を使う」 James A. Whittaker,Jason Arbon,Jeff Carollo(著) 長尾高弘(訳) 「テストから見えてくるグーグルのソフトウェア開発 テストファーストによるエンジニアリング生産性向上」
  • 13. Copyright 2017 Hiroyuki Onaka #stac2017 「テスト自動化ピラミッド」 Mike Cohn 「Suceeding with agile」
  • 14. Copyright 2017 Hiroyuki Onaka #stac2017
  • 15. Copyright 2017 Hiroyuki Onaka #stac2017 • テスト自動化のレイヤーを「UI」 「Service」「Unit」の3つに分類したもの。 • 「Service」に対するテストが、アプリケー ションのインターフェスに対するテストを、 UI(ユーザーインターフェース)を迂回して実 行することが特徴。
  • 16. Copyright 2017 Hiroyuki Onaka #stac2017 ここで使う「システムテスト」 UI(ユーザーインターフェース)を通して、エン ドツーエンドでシステムの動作を確認する
  • 17. Copyright 2017 Hiroyuki Onaka #stac2017 エンドツーエンドのつらさ • データのセットアップつらい… • 実行時間つらい… • コード何もいじってないのにテスト落ちた、 つらい…
  • 18. Copyright 2017 Hiroyuki Onaka #stac2017 マイクロサービスアーキテクチャ Sam Newman(著) 佐藤直生(監訳) 「マイクロサービスアーキテクチャ」
  • 19. Copyright 2017 Hiroyuki Onaka #stac2017 エンドツーエンドテストの難易度の増大。 • システム相互の疎結合化、分散化 • それに伴う非同期処理の増大 結局昔やってた「結合一発勝負」とかわらなく なってくる
  • 20. Copyright 2017 Hiroyuki Onaka #stac2017 「ストーリーでなくジャーニーをテストする」 これに対抗する最善の方法は、少数の中核となるジャーニー に焦点を絞ってシステム全体をテストする方法です。この中 核となるジャーニーで対象になっていない機能は、互いに分 離してサービスを分析するテストで対処する必要があります。 このジャーニーは相互に合意され、共同で所有される必要が あります。音楽専門店の例では、CD の注文、商品の返品、 新規顧客の作成といった(高価値な対話であり極めて少数 の)動作に焦点を絞るでしょう。 Sam Newman(著) 佐藤直生(監訳) 「マイクロサービスアーキテクチャ」
  • 21. Copyright 2017 Hiroyuki Onaka #stac2017 ところで、「ジャーニー」ってなによ 正直よくわからない おそらく重要なのは、テストの粒度ではなく 「相互に合意され、共同で所有される必要」の ほう
  • 22. Copyright 2017 Hiroyuki Onaka #stac2017 相互に合意することが必要な理由 継続的に開発が進むサービスにおいて、「システムテス トの粒度を粗くする」ということは • プロダクトオーナー(企画)サイドがリスクをどこま で許容できるか • 監視アラートへの立ち上がりを迅速に出来るか という、ITサービス運用のリスク管理の視点と関係して くるため
  • 23. Copyright 2017 Hiroyuki Onaka #stac2017 一つだけわかっていること システムテストを自動化することは、「ユー ザーストーリーをエンドツーエンドで網羅する 自動テストを作成する」ことではない また、「メンテナンス対象となるシステムが一 個増える」くらいの覚悟が必要
  • 24. Copyright 2017 Hiroyuki Onaka #stac2017 Gebによるシス テムテスト自 動化
  • 25. Copyright 2017 Hiroyuki Onaka #stac2017 Geb • GroovyによるSelenium WebDriver拡張 • http://gebish.org/ • ライセンス: Apache License Version 2.0
  • 26. Copyright 2017 Hiroyuki Onaka #stac2017 Gebの特徴 • Groovy の言語機能を生かした簡潔な記述 • jQuery ライクなDOM へアクセスするための式言語 • ページオブジェクトのサポート • 任意のテスティングフレームワークと組み合わせて 使用(Spock/Junit/TestNG/Cucumeber-JVM)
  • 27. Copyright 2017 Hiroyuki Onaka #stac2017 Spock • Groovyで動作するテスティングフレーム ワーク(BDDスタイル) • Groovyの特徴を生かしたテスト記述 • PowerAssert/データ駆動/DSLによるテストケー ス記述 etc • Spock信者
  • 28. Copyright 2017 Hiroyuki Onaka #stac2017 Gebを採用した背景 • エンドツーエンドテストの自動化を検討した が、キャプチャーアンドリプレイだと以下の 理由で立ちゆかなくなるのが目に見えてた (2014年当時)
  • 29. Copyright 2017 Hiroyuki Onaka #stac2017 Gebを採用した背景(1/3) キャプチャーアンドリプレイでは規模の拡大に ともない保守が苦しくなる
  • 30. Copyright 2017 Hiroyuki Onaka #stac2017 Gebを採用した背景(2/3) アジャイル開発プロセスの導入に伴い、イテ レーションの進行につれてリグレッションテス トの工数が拡大していくのに備える必要があっ た
  • 31. Copyright 2017 Hiroyuki Onaka #stac2017 Gebを採用した背景(3/3) シングルページアプリケーション (Backbone.js)導入に伴い、画面遷移が非同期 が基本になるため、キャプチャーアンドリプレ イでは画面遷移のところに個別にwaitを追加す る必要が出てくる
  • 32. Copyright 2017 Hiroyuki Onaka #stac2017 Gebを採用したのは、自分の周囲にGroovyを やっている人が多かったから
  • 33. Copyright 2017 Hiroyuki Onaka #stac2017 Spockを採用した背景 Geb+JUnitでプロトタイプ作成してチームメン バーに渡したらいつの間にかGeb+Spockになっ ていた (実話)
  • 34. Copyright 2017 Hiroyuki Onaka #stac2017 ページオブジェクト public メソッドは、ページが提供するサービスを表す • ページの内部構造を露出しないようつとめる • 原則として(ページオブジェクト内で) アサーションを行わない • メソッドは他のページオブジェクトを返す • 一つのページ全体を(一つの) ページオブジェクトで表す必要は 無い • 同じ操作が異なる結果となる場合は、異なるメソッドとしてモ デル化する https://github.com/SeleniumHQ/selenium/wiki/PageObjects
  • 35. Copyright 2017 Hiroyuki Onaka #stac2017 Gebによるページオブジェクト class GebishOrgHomePage extends Page { static at = { title == "Geb - Very Groovy Browser Automation" } static content = { manualsMenu { module(ManualsMenuModule) } } }
  • 36. Copyright 2017 Hiroyuki Onaka #stac2017 Gebによるテスト(Spock+ページオブジェクト)
  • 37. Copyright 2017 Hiroyuki Onaka #stac2017Gebによるテスト(JUnit+ページ オブジェクト未使用)
  • 38. Copyright 2017 Hiroyuki Onaka #stac2017 Gebによるテストの組み合わせ • ページオブジェクト使う - 使わない • テスティングフレームワーク • Spock - JUnit - TestNG - Cucumber-JVM • Maven - Gradle
  • 39. Copyright 2017 Hiroyuki Onaka #stac2017 テストのスタイルについてどう選択をするか 結論は、 ページオブジェクト+Spock+Gradle 一択
  • 40. Copyright 2017 Hiroyuki Onaka #stac2017 なぜページオブジェクトなのか 各ページのDOM要素にid属性を付けて要素の特 定に使う、という技法がSelenium WebDriver のテストにはあります。
  • 41. Copyright 2017 Hiroyuki Onaka #stac2017htmlの要素にテストのためのid属性を つけることの問題 • SPA(シングルページアプリケーション)だとス コープがアプリケーション全体になる • アプリケーションからの動的なDOM生成が増え ると、idやclass属性を通してアプリケーション のロジックとテストが密結合してしまう 「フロントエンドをリファクタリングしたらエンドツー エンドのテストが全滅」とか...
  • 42. Copyright 2017 Hiroyuki Onaka #stac2017「idやclassを使ってテストを書くのは、 もはやアンチパターンである」 https://qiita.com/akameco/items/519f7e4d5442b2a9d2da
  • 43. Copyright 2017 Hiroyuki Onaka #stac2017 現実的な最適解 • セレクターでDOM要素への指定を記述して、 ページオブジェクトでそれをラップする。 • Gebの場合はjQueryライクなセレクターを使用可能 • テストからはページオブジェクト経由でアクセ スすることで、DOMの要素を隠蔽し、htmlの構 造がかわったときの影響範囲を限定する
  • 44. Copyright 2017 Hiroyuki Onaka #stac2017 GebによるテストでSpockを選択する理由 Gebによるテスト記述はストーリーベースの記 述となるため、BDDスタイルのSpockでの記述 が向いている。 後パラメーター駆動のテストもやりやすい
  • 45. Copyright 2017 Hiroyuki Onaka #stac2017 もう一つのSpockを選択する理由:spock-reports
  • 46. Copyright 2017 Hiroyuki Onaka #stac2017 Gradleを選択する理由 ビルドに関するワークフローが単純なものには Mavenが向いているが、
  • 47. Copyright 2017 Hiroyuki Onaka #stac2017 Gebによるテストには、スクリプトとしての細かい 制御が求められる • クロスブラウザー • テスト環境の切替 • テストスイートの管理など よってGradle
  • 48. Copyright 2017 Hiroyuki Onaka #stac2017 Gebの建前と本 音
  • 49. Copyright 2017 Hiroyuki Onaka #stac2017 • 非同期処理 • スクリーンショット • クロスブラウザー • GebとGroovy
  • 50. Copyright 2017 Hiroyuki Onaka #stac2017 非同期処理(建前) Geb では非同期処理の記述を行うには、要素の出現 判定する処理のブロックをwaitFor{ 条件}で囲みま す。 タイムアウトまでの時間は、GebConfig.groovy の waiting ブロックのクロージャーでtimeout プロパ ティーを設定します。
  • 51. Copyright 2017 Hiroyuki Onaka #stac2017 非同期処理(本音) DOMの出現でいくらWaitかけたってサーバー側 の非同期処理はWaitのしようがない 不安定なGebのシナリオのかなりの割合が、 サーバー側の非同期処理に対するWaitが適切で ないことによります
  • 52. Copyright 2017 Hiroyuki Onaka #stac2017 サーバー側の非同期処理 データ連携などの非同期処理の結果を参照でき るAPIを用意するなど、アーキテクチャーで手 当をすべきです。 それがないと、データベースをポーリングして データが反映されるのを待つとか、sleepの秒数 で調節するとか、つらいことになります。
  • 53. Copyright 2017 Hiroyuki Onaka #stac2017 スクリーンショット(建前) • geb.spock.GebReportingSpec を継承する ことで、テストの実行時に自動でスクリーン ショットを取得することができます。
  • 54. Copyright 2017 Hiroyuki Onaka #stac2017 スクリーンショット(本音) • トーストの消える消えない等のアニメーショ ンの動きを、スクリーンショットを見てわか るには超能力が必要 • SPAにおける、アプリケーションのハング アップもまた爾り
  • 55. Copyright 2017 Hiroyuki Onaka #stac2017 画面を録画するソリューション • BrowserStackとかSauce Labsとか • 画面を録画する用途にしては大げさすぎやし ませんか?
  • 56. Copyright 2017 Hiroyuki Onaka #stac2017というわけで、OSSだけで画面録画を目指してみ ましょう 用意するもの • Ubuntu(17.10) • ブラウザー(Firefox) • Xvfb • tmux • FFmpeg
  • 57. Copyright 2017 Hiroyuki Onaka #stac2017 Xvfb :1 -screen 0 1920x1200x24 -ac & tmux new-session -d -s Recording1 'ffmpeg -y -f x11grab -video_size 1920x1200 -i :1 -codec:v libx264 -r 12 -ab 128k /vagrant/out4.mp4' export DISPLAY=:1 ./gradlew test -Pbrowser=firefox tmux send-keys -t Recording1 q
  • 58. Copyright 2017 Hiroyuki Onaka #stac2017 やっていること • Xvfbで起動した仮想デスクトップをFFmpegで キャプチャー • Gradleによるテストを、仮想デスクトップ上で 実行 • FFmpegは終了するのに「q」のキーシーケンス を送る必要があるので、tmuxのセッション上で 起動
  • 59. Copyright 2017 Hiroyuki Onaka #stac2017 詳しくはブログで http://blog.fieldnotes.jp/entry/recordiing- selenium-test
  • 60. Copyright 2017 Hiroyuki Onaka #stac2017 クロスブラウザー(建前) GebConfig.groovy 内のdriver という変数に • WebDriver の実装クラス名を指す文字列 • WebDriver のインスタンスを返すクロージャー を示すことで、使用するブラウザーを切り替え ることができます。
  • 61. Copyright 2017 Hiroyuki Onaka #stac2017 クロスブラウザー(本音) • 1ブラウザーでも不安定なテスト安定させる の大変なのにクロスブラウザーとか正直やっ てられない • 大体ここでやりたいことはユーザーインター フェースの単体テストではない
  • 62. Copyright 2017 Hiroyuki Onaka #stac2017 それでもクロスブラウザーをやるというなら Geb では、実行時にシステムプロパティー geb.env を設定することにより、設定ファイル (GebConfig.groovy) のenvironmentsブロック で設定値の切り替えを行うことができます。 Gebの公式サンプルでは、この機能を使ってブ ラウザーの切替を行っています。 geb/geb-example.gradle https://github.com/geb/geb-example-gradle
  • 63. Copyright 2017 Hiroyuki Onaka #stac2017 ですが ブラウザーの切り替えにgeb.envを使うと、対 象の環境(開発環境とかステージング環境とか) の切替をどこに持たせるかという問題がおきま す。 またGebの公式サンプルでは、IDEからの実行 を考慮していないという問題
  • 64. Copyright 2017 Hiroyuki Onaka #stac2017 そうすると、起動時にフラグでブラウザーを指 定して、GebConfig.groovyの中で切替やセッ トアップをすることになるわけですが...
  • 65. Copyright 2017 Hiroyuki Onaka #stac2017 画像はイメージです(1)
  • 66. Copyright 2017 Hiroyuki Onaka #stac2017 画像はイメージです(2)
  • 67. Copyright 2017 Hiroyuki Onaka #stac2017 このやり方はちとつらい というわけで今回紹介するのが、 ブラウザーごとにWebDriverのセットアップを 自動でやってくれるWebDriverManager (https://github.com/bonigarcia/webdriverm anager) です。
  • 68. Copyright 2017 Hiroyuki Onaka #stac2017 先ほどのコードがこうなります
  • 69. Copyright 2017 Hiroyuki Onaka #stac2017 GebとGroovy(建前) Geb は、Groovy の言語機能を生かした簡潔な 記述でテストを書くことができます。
  • 70. Copyright 2017 Hiroyuki Onaka #stac2017 GebとGroovy(本音) IDEの補完効かない
  • 71. Copyright 2017 Hiroyuki Onaka #stac2017 それに対する解: Intellij IDEA
  • 72. Copyright 2017 Hiroyuki Onaka #stac2017 まとめ
  • 73. Copyright 2017 Hiroyuki Onaka #stac2017 システムテストを自動化するということ システムテストを自動化するということは、 「メンテナンスするシステムが1個増える」 くらいに考えたほうがいい
  • 74. Copyright 2017 Hiroyuki Onaka #stac2017 それでもなぜ自動化するのか • 自動化のゴールをコスト削減に向けると、全 体として縮小均衡にしかならない • 私は「テスト自動化によってテスト要員を○名削 減できました」という仕事がしたいわけではない
  • 75. Copyright 2017 Hiroyuki Onaka #stac2017 自動化によって「何を減らせるか」ではなく、 自動化によって「新しいことが出来るようにな る」、ということに目を向けるべき
  • 76. Copyright 2017 Hiroyuki Onaka #stac2017「システムテストを自動化する」ことに よって新しくできることになることは? その前に、一個エピソードを紹介したいと思い ます。
  • 77. Copyright 2017 Hiroyuki Onaka #stac2017 大手通信会社の法人向けサービスの事例 開発チームがGebで作成したエンドツーエンド のテストを、Javaのバージョンアップや、 Blue-Green Deployment導入に伴うインフラ 更改の際の動作確認として使用した、という事 例。
  • 78. Copyright 2017 Hiroyuki Onaka #stac2017 システムテストが自動化されていたことにより、 インフラがサービス水準の改善のために積極的 にインフラの構成に手をいれることができるよ うになった、ということ。
  • 79. Copyright 2017 Hiroyuki Onaka #stac2017「システムテストを自動化する」ことに よって新しくできることになることは? 複数の異なる粒度のテストのレイヤーが自動化 されて組み合わさることにより、 • 継続的なサービスな改善に対応できるテスト 工程が構築されること。 • 手動テストが、「魅力的品質」寄りのテスト に注力できるようになること。
  • 80. Copyright 2017 Hiroyuki Onaka #stac2017 ありがとうございました! • 大中浩行(Onaka,Hiroyuki) • @setoazusa • グロースエクスパートナーズ株式会社 アーキテクチャソリューション部 テクニカルリード • http://hiroyuki.fieldnotes.jp/