Behatで行う、 
E2Eテスト入門。 
ランサーズ株式会社 
堀川 豊
今日お話 
すること
今日お話すること3 
• テストFW、Behatについて 
• 何でBehatを導入したのか 
• 導入時苦労したこと 
• 導入後の所感 
• 今後の取り組み 
よろしくお願い致します。
対象者
対象者5 
PHPでWebサービスを 
開発されている方
自己紹介
自己紹介1 7 
名前:堀川 豊 
https://www.facebook.com/yutaka.horikawa.7 
年代:1985年生まれ 
略歴: 
(2006~2010)公式携帯サイト運営 
(2011~2013)ソーシャルゲーム開発 
(2014~)ランサーズWebアプリケーション 
エンジニアとしてJOIN
自己紹介2 8 
言語:Python,PHP,Ruby,Javascript 
DB:MySQL,PostgreSQL,SQlite 
KVS:Redis,TokyoTyrant,Memcached
会社紹介
会社紹介10 
ランサーズ株式会社 
設立2008年4月1日 
事業内容クラウドソーシングサービス 
「Lancers」の運営 
ビジョン時間と場所にとらわれない働き方 
の創出
クラウドソーシングとは? 11 
• 米国で2000年頃に誕生したインターネットサービスの一つ 
• 仕事を頼みたい人や企業と、 
自分のスキルや労働力を売りたい人をネット上でマッチングすること 
満員電車にサヨナラする方法 
~時間と場所にとらわれない新しい働き方~ 
秋好 陽介(著)
サービス紹介
サービス紹介「Lancers」13 
日本初+国内最大手の 
クラウドソーシングサービス 
依頼数: 
依頼総額: 
会員数: 
47万件 
373億円 
41万人 
依頼数ベースで 
年間300%成長中
依頼可能な仕事カテゴリは「141」14
仕事タイプに合わせて選べる3つの依頼方式15 
(
(	/
(	 

*$
#!*% /')* 
42L'
(A 
8-‐‑‒9!5-‐‑‒3,2 -‐‑‒
4 
,.! #
H- 
0-‐‑‒
497-‐‑‒ 	9!5-‐‑‒ 
3*
%H- 
0-‐‑‒
497-‐‑‒9!5-‐‑‒ 

( 
8-‐‑‒
9!5-‐‑‒12 -‐‑‒
4 
0F1

( 
8-‐‑‒
9!5-‐‑‒12 -‐‑‒
4 
	


 
8-‐‑‒
9!5-‐‑‒3,2 -‐‑‒4
最近の取り組み:クラウドソーシング研究所16
最近の取り組み:認定ランサー検索17
ランサーズを 
支える技術
ランサーズを支える技術19 
Web App DB Monitor 
CloudSearch 
はじめました 
EC2 RDS S3 CloudWatch CloudFront
Behat
Behat 21 
Behat http://docs.behat.org/en/v2.5/ オープンソースの 
BDDテストフレームワーク 
テストシナリオを自然言語で記述し、 
実効する機能を提供。 
PHP5.3以上に対応 。BDDの話はしません
なにができるの? 22 
• 自然言語に近い形でテストシナリオ 
が記述できる 
• ヘッドレスブラウザによるテスト 
• 自動テストツールとの連携
なにができるの? 23 
手動のブラウザテストが 
自動で出来るようになる! 
ざっくり言うとこんな感じ
なぜ導入したのか? 24 
• アプリケーションが仕様を満たし 
ているかを確認するため。 
• 手動テストの工数削減 
• 影響範囲の明確化
とある機能のテスト項目書25
テストの実行回数26 
924項目の 
テストを実行 
132 * 7 
テスト項目数 * 対応ブラウザ数 
Oh...
なぜ導入したのか? 27 
テスト導入でアプリケーションの 
動作担保と開発スピードアップを 
目指す!
インストール
インストール29 
composerからインストール 
が可能。 
設定ファイル(composer.json)を作成して、 
php composer.phar installコマンドを実行すれば 
インストール完了! 
curl -sS https://getcomposer.org/installer | php  でcomposer.pharをDLできる。
composer.json 30 
vendor-dirがインストールディレクトリ
モジュール
behatの周辺モジュール32 
behat/mink 
ブラウザ抽象化モジュール 
ブラウザエミュレーションツールと組み合わせてテストを 
行う機能を提供。
behatの周辺モジュール33 
behat/mink-extension 
ブラウザ抽象化モジュール 
behatで利用できるテストの機能を追加したり、 
テストケースで扱える言語を拡張。
behatの周辺モジュール34 
behat/mink-goutte-driver 
ブラウザエミュレーション 
ヘッドレスブラウザ。 
javascriptの実行はできない
behatの周辺モジュール35 
behat/mink-selenium-driver 
ブラウザエミュレーション 
behatからseleniumを操作できる。 
別途seleniumのインストールが必要
設定
behat.yml 37
テストシナリオ
テストシナリオ39 
自然言語(英語 or 日本語)に近い形で記述が可能
テストシナリオ40 
フィーチャ 
このファイルに記述するフィーチャ(機能)に関して記述。その後ろは 
フィーチャの名前。 
名前の下にフィーチャの説明が記載できる。
テストシナリオ41 
シナリオ 
シナリオはひとつのテスト。 シナリオは複数のステップで 
構成されている。
テストシナリオ42 
ステップ 
テストを実行する命令。それぞれに対応したPHPのコードが 
存在しそれらが実行される。
step一覧43 
path/to/bin/behat -dl —lang=ja
step一覧44 
小さくてよく見えない
テスト実行(ヘッドレスブラウザ) 45 
path/to/bin/beht features/test.feature で実行
テスト実行(ヘッドレスブラウザ) 46 
がああああああああああああああ
テスト実行(ヘッドレスブラウザ) 47 
ただし 
??
テスト実行(ヘッドレスブラウザ) 48 
Javascriptは 
実行できません! 
泣ける
テスト実行(ヘッドレスブラウザ) 49 
でも大丈夫 
本当?
behat.yml 50
テストシナリオ51
テスト実行52 
Seleniumと連携することで 
Javascriptの実行が可能! 
複数ブラウザでのテストも可能に!
テストデータ
テストデータ54 
DoctrineDataFixturesExtension 
https://github.com/vipsoft/DoctrineDataFixturesExtension 
PHP5.3.6以上に対応
Hook
hook 56 
テスト実行前後に 
任意の処理を実行できる。 
処理を実行できるタイミングは8つ。 
フックには任意のタグを付けることができ、 
シナリオからタグで呼び出すことが可能。
hook 57
hook 58 
BeforeSuite 
BeforeScenario 
BeforeStep 
AfterStep 
AfterScenario 
AfterSuite
導入時 
苦労した点
導入時苦労したこと60 
target=“_blank”のリンク 
別タブや別ウィンドウになるとコントロールできなくなる。
導入時苦労したこと61
62 
導入時苦労したこと 
雑な解決方法 
スマートなやり方知ってる方は是非教えてください…
63 
導入時苦労したこと 
テストデータモジュール 
外部からCakeを起動するのに若干苦労した。
導入時苦労したこと64 
Cakeの定数定義して 
bootstrap.phpをrequire。
導入後の所感

Behatで行う、E2Eテスト入門