behatで行う、e2eテスト入門
TRANSCRIPT
Behatで行う、E2Eテスト入門。ランサーズ株式会社堀川 豊
今日お話すること
3今日お話すること
• テストFW、Behatについて• 何でBehatを導入したのか• 導入時苦労したこと• 導入後の所感• 今後の取り組み
よろしくお願い致します。
対象者
5対象者
PHPでWebサービスを開発されている方
自己紹介
7自己紹介1
名前:堀川 豊 https://www.facebook.com/yutaka.horikawa.7
年代:1985年生まれ略歴:
(2006~2010)公式携帯サイト運営(2011~2013)ソーシャルゲーム開発(2014~)ランサーズWebアプリケーション
エンジニアとしてJOIN
8自己紹介2
言語:Python,PHP,Ruby,JavascriptDB:MySQL,PostgreSQL,SQliteKVS:Redis,TokyoTyrant,Memcached
会社紹介
10会社紹介
ランサーズ株式会社設立 2008年4月1日
事業内容 クラウドソーシングサービス「Lancers」の運営
ビジョン 時間と場所にとらわれない働き方の創出
11クラウドソーシングとは?
• 米国で2000年頃に誕生したインターネットサービスの一つ
• 仕事を頼みたい人や企業と、自分のスキルや労働力を売りたい人をネット上でマッチングすること
満員電車にサヨナラする方法~時間と場所にとらわれない新しい働き方~
秋好 陽介(著)
サービス紹介
13サービス紹介「Lancers」
日本初+国内最大手のクラウドソーシングサービス
依頼数:
依頼総額:
会員数:
47万件
373億円41万人
依頼数ベースで年間300%成長中
14依頼可能な仕事カテゴリは「141」
15仕事タイプに合わせて選べる3つの依頼方式
L A8-‐‑‒ 9 5-‐‑‒ 3, 2 -‐‑‒ 4
H0-‐‑‒ 4 97-‐‑‒ 9 5-‐‑‒
H0-‐‑‒ 4 97-‐‑‒ 9 5-‐‑‒
8-‐‑‒ 9 5-‐‑‒ 1 2 -‐‑‒ 4
F8-‐‑‒ 9 5-‐‑‒ 1 2 -‐‑‒ 48-‐‑‒ 9 5-‐‑‒ 3, 2 -‐‑‒ 4
/
/
16最近の取り組み:クラウドソーシング研究所
17最近の取り組み:認定ランサー検索
ランサーズを支える技術
19ランサーズを支える技術
Web App DB Monitor
EC2 RDS S3 CloudWatch CloudFront
CloudSearchはじめました
Behat
21Behat
Behat http://docs.behat.org/en/v2.5/
オープンソースのBDDテストフレームワーク
PHP5.3以上に対応 。BDDの話はしません ><
テストシナリオを自然言語で記述し、実効する機能を提供。
22なにができるの?
• 自然言語に近い形でテストシナリオが記述できる
• ヘッドレスブラウザによるテスト• 自動テストツールとの連携
23なにができるの?
手動のブラウザテストが自動で出来るようになる!
ざっくり言うとこんな感じ
24なぜ導入したのか?
• アプリケーションが仕様を満たしているかを確認するため。
• 手動テストの工数削減
• 影響範囲の明確化
25とある機能のテスト項目書
26テストの実行回数
924項目のテストを実行
132 * 7テスト項目数 * 対応ブラウザ数
Oh...
27なぜ導入したのか?
テスト導入でアプリケーションの動作担保と開発スピードアップを目指す!
インストール
29インストール
curl -sS https://getcomposer.org/installer | php でcomposer.pharをDLできる。
composerからインストールが可能。設定ファイル(composer.json)を作成して、php composer.phar installコマンドを実行すればインストール完了!
30composer.json
vendor-dirがインストールディレクトリ
モジュール
32behatの周辺モジュール
behat/minkブラウザ抽象化モジュールブラウザエミュレーションツールと組み合わせてテストを行う機能を提供。
33behatの周辺モジュール
behat/mink-extensionブラウザ抽象化モジュールbehatで利用できるテストの機能を追加したり、テストケースで扱える言語を拡張。
34behatの周辺モジュール
behat/mink-goutte-driverブラウザエミュレーション
ヘッドレスブラウザ。
javascriptの実行はできない
35behatの周辺モジュール
behat/mink-selenium-driverブラウザエミュレーション
behatからseleniumを操作できる。
別途seleniumのインストールが必要
設定
37behat.yml
テストシナリオ
39テストシナリオ
自然言語(英語 or 日本語)に近い形で記述が可能
40テストシナリオ
フィーチャこのファイルに記述するフィーチャ(機能)に関して記述。その後ろはフィーチャの名前。名前の下にフィーチャの説明が記載できる。
41テストシナリオ
シナリオシナリオはひとつのテスト。 シナリオは複数のステップで構成されている。
42テストシナリオ
ステップテストを実行する命令。それぞれに対応したPHPのコードが存在しそれらが実行される。
43step一覧
path/to/bin/behat -dl —lang=ja
44step一覧
小さくてよく見えない
45テスト実行(ヘッドレスブラウザ)
path/to/bin/beht features/test.feature で実行
46テスト実行(ヘッドレスブラウザ)
がああああああああああああああ
47テスト実行(ヘッドレスブラウザ)
ただし
??
48テスト実行(ヘッドレスブラウザ)
Javascriptは実行できません!
泣ける
49テスト実行(ヘッドレスブラウザ)
でも大丈夫
本当?
50behat.yml
51テストシナリオ
52テスト実行
Seleniumと連携することでJavascriptの実行が可能!複数ブラウザでのテストも可能に!
テストデータ
54テストデータ
DoctrineDataFixturesExtensionhttps://github.com/vipsoft/DoctrineDataFixturesExtension
PHP5.3.6以上に対応
Hook
56hook
テスト実行前後に任意の処理を実行できる。処理を実行できるタイミングは8つ。フックには任意のタグを付けることができ、シナリオからタグで呼び出すことが可能。
57hook
58hook
BeforeSuite
AfterSuite
BeforeScenario
AfterScenario
BeforeStepAfterStep
導入時苦労した点
60導入時苦労したこと
target=“_blank”のリンク別タブや別ウィンドウになるとコントロールできなくなる。
61導入時苦労したこと
62
スマートなやり方知ってる方は是非教えてください…
雑な解決方法
導入時苦労したこと
63
テストデータモジュール外部からCakeを起動するのに若干苦労した。
導入時苦労したこと
64導入時苦労したこと
Cakeの定数定義してbootstrap.phpをrequire。
導入後の所感
66導入後の所感
• 手動テストに比べて工数が削減された
• テスト項目をやり直さないでも良くなりリリース間際の修正に余裕が持てる
• シナリオテストが元々なかったので、仕様を満たすといった目的の担保がやりやすくなった
67導入後の所感
• 独自ステップは必要になってくる
• ドキュメントの情報量はそこまで豊富じゃない
• 自動テストツールはほぼ必須
68今後の取り組み
やるぞー
• CIでテストを自動実行• 他メンバーへのラーニング
69エンジニア&デザイナー積極採用中
一緒に新しい働き方を創ってくれる方を募集しています!
お気軽にご連絡ください![email protected]
• 働きかたを変えたい方• 素直でポジィティブな方• 最新の技術が好きな方• 世界に打って出たい方