behatで行う、e2eテスト入門

69
Behatで行う、 E2Eテスト入門。 ランサーズ株式会社 堀川

Upload: leveragesevent

Post on 19-Jul-2015

641 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Behatで行う、E2Eテスト入門

Behatで行う、E2Eテスト入門。ランサーズ株式会社堀川 豊

Page 2: Behatで行う、E2Eテスト入門

今日お話すること

Page 3: Behatで行う、E2Eテスト入門

3今日お話すること

• テストFW、Behatについて• 何でBehatを導入したのか• 導入時苦労したこと• 導入後の所感• 今後の取り組み

よろしくお願い致します。

Page 4: Behatで行う、E2Eテスト入門

対象者

Page 5: Behatで行う、E2Eテスト入門

5対象者

PHPでWebサービスを開発されている方

Page 6: Behatで行う、E2Eテスト入門

自己紹介

Page 7: Behatで行う、E2Eテスト入門

7自己紹介1

名前:堀川 豊 https://www.facebook.com/yutaka.horikawa.7

年代:1985年生まれ略歴:

(2006~2010)公式携帯サイト運営(2011~2013)ソーシャルゲーム開発(2014~)ランサーズWebアプリケーション

エンジニアとしてJOIN

Page 8: Behatで行う、E2Eテスト入門

8自己紹介2

言語:Python,PHP,Ruby,JavascriptDB:MySQL,PostgreSQL,SQliteKVS:Redis,TokyoTyrant,Memcached

Page 9: Behatで行う、E2Eテスト入門

会社紹介

Page 10: Behatで行う、E2Eテスト入門

10会社紹介

ランサーズ株式会社設立 2008年4月1日

事業内容 クラウドソーシングサービス「Lancers」の運営

ビジョン 時間と場所にとらわれない働き方の創出

Page 11: Behatで行う、E2Eテスト入門

11クラウドソーシングとは?

• 米国で2000年頃に誕生したインターネットサービスの一つ

• 仕事を頼みたい人や企業と、自分のスキルや労働力を売りたい人をネット上でマッチングすること

満員電車にサヨナラする方法~時間と場所にとらわれない新しい働き方~

秋好 陽介(著)

Page 12: Behatで行う、E2Eテスト入門

サービス紹介

Page 13: Behatで行う、E2Eテスト入門

13サービス紹介「Lancers」

日本初+国内最大手のクラウドソーシングサービス

依頼数:

依頼総額:

会員数:

47万件

373億円41万人

依頼数ベースで年間300%成長中

Page 14: Behatで行う、E2Eテスト入門

14依頼可能な仕事カテゴリは「141」

Page 15: Behatで行う、E2Eテスト入門

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

/

/

Page 16: Behatで行う、E2Eテスト入門

16最近の取り組み:クラウドソーシング研究所

Page 17: Behatで行う、E2Eテスト入門

17最近の取り組み:認定ランサー検索

Page 18: Behatで行う、E2Eテスト入門

ランサーズを支える技術

Page 19: Behatで行う、E2Eテスト入門

19ランサーズを支える技術

Web App DB Monitor

EC2 RDS S3 CloudWatch CloudFront

CloudSearchはじめました

Page 20: Behatで行う、E2Eテスト入門

Behat

Page 21: Behatで行う、E2Eテスト入門

21Behat

Behat http://docs.behat.org/en/v2.5/

オープンソースのBDDテストフレームワーク

PHP5.3以上に対応 。BDDの話はしません ><

テストシナリオを自然言語で記述し、実効する機能を提供。

Page 22: Behatで行う、E2Eテスト入門

22なにができるの?

• 自然言語に近い形でテストシナリオが記述できる

• ヘッドレスブラウザによるテスト• 自動テストツールとの連携

Page 23: Behatで行う、E2Eテスト入門

23なにができるの?

手動のブラウザテストが自動で出来るようになる!

ざっくり言うとこんな感じ

Page 24: Behatで行う、E2Eテスト入門

24なぜ導入したのか?

• アプリケーションが仕様を満たしているかを確認するため。

• 手動テストの工数削減

• 影響範囲の明確化

Page 25: Behatで行う、E2Eテスト入門

25とある機能のテスト項目書

Page 26: Behatで行う、E2Eテスト入門

26テストの実行回数

924項目のテストを実行

132 * 7テスト項目数 * 対応ブラウザ数

Oh...

Page 27: Behatで行う、E2Eテスト入門

27なぜ導入したのか?

テスト導入でアプリケーションの動作担保と開発スピードアップを目指す!

Page 28: Behatで行う、E2Eテスト入門

インストール

Page 29: Behatで行う、E2Eテスト入門

29インストール

curl -sS https://getcomposer.org/installer | php  でcomposer.pharをDLできる。

composerからインストールが可能。設定ファイル(composer.json)を作成して、php composer.phar installコマンドを実行すればインストール完了!

Page 30: Behatで行う、E2Eテスト入門

30composer.json

vendor-dirがインストールディレクトリ

Page 31: Behatで行う、E2Eテスト入門

モジュール

Page 32: Behatで行う、E2Eテスト入門

32behatの周辺モジュール

behat/minkブラウザ抽象化モジュールブラウザエミュレーションツールと組み合わせてテストを行う機能を提供。

Page 33: Behatで行う、E2Eテスト入門

33behatの周辺モジュール

behat/mink-extensionブラウザ抽象化モジュールbehatで利用できるテストの機能を追加したり、テストケースで扱える言語を拡張。

Page 34: Behatで行う、E2Eテスト入門

34behatの周辺モジュール

behat/mink-goutte-driverブラウザエミュレーション

ヘッドレスブラウザ。

javascriptの実行はできない

Page 35: Behatで行う、E2Eテスト入門

35behatの周辺モジュール

behat/mink-selenium-driverブラウザエミュレーション

behatからseleniumを操作できる。

別途seleniumのインストールが必要

Page 36: Behatで行う、E2Eテスト入門

設定

Page 37: Behatで行う、E2Eテスト入門

37behat.yml

Page 38: Behatで行う、E2Eテスト入門

テストシナリオ

Page 39: Behatで行う、E2Eテスト入門

39テストシナリオ

自然言語(英語 or 日本語)に近い形で記述が可能

Page 40: Behatで行う、E2Eテスト入門

40テストシナリオ

フィーチャこのファイルに記述するフィーチャ(機能)に関して記述。その後ろはフィーチャの名前。名前の下にフィーチャの説明が記載できる。

Page 41: Behatで行う、E2Eテスト入門

41テストシナリオ

シナリオシナリオはひとつのテスト。 シナリオは複数のステップで構成されている。

Page 42: Behatで行う、E2Eテスト入門

42テストシナリオ

ステップテストを実行する命令。それぞれに対応したPHPのコードが存在しそれらが実行される。

Page 43: Behatで行う、E2Eテスト入門

43step一覧

path/to/bin/behat -dl —lang=ja

Page 44: Behatで行う、E2Eテスト入門

44step一覧

小さくてよく見えない

Page 45: Behatで行う、E2Eテスト入門

45テスト実行(ヘッドレスブラウザ)

path/to/bin/beht features/test.feature で実行

Page 46: Behatで行う、E2Eテスト入門

46テスト実行(ヘッドレスブラウザ)

がああああああああああああああ

Page 47: Behatで行う、E2Eテスト入門

47テスト実行(ヘッドレスブラウザ)

ただし

??

Page 48: Behatで行う、E2Eテスト入門

48テスト実行(ヘッドレスブラウザ)

Javascriptは実行できません!

泣ける

Page 49: Behatで行う、E2Eテスト入門

49テスト実行(ヘッドレスブラウザ)

でも大丈夫

本当?

Page 50: Behatで行う、E2Eテスト入門

50behat.yml

Page 51: Behatで行う、E2Eテスト入門

51テストシナリオ

Page 52: Behatで行う、E2Eテスト入門

52テスト実行

Seleniumと連携することでJavascriptの実行が可能!複数ブラウザでのテストも可能に!

Page 53: Behatで行う、E2Eテスト入門

テストデータ

Page 54: Behatで行う、E2Eテスト入門

54テストデータ

DoctrineDataFixturesExtensionhttps://github.com/vipsoft/DoctrineDataFixturesExtension

PHP5.3.6以上に対応

Page 55: Behatで行う、E2Eテスト入門

Hook

Page 56: Behatで行う、E2Eテスト入門

56hook

テスト実行前後に任意の処理を実行できる。処理を実行できるタイミングは8つ。フックには任意のタグを付けることができ、シナリオからタグで呼び出すことが可能。

Page 57: Behatで行う、E2Eテスト入門

57hook

Page 58: Behatで行う、E2Eテスト入門

58hook

BeforeSuite

AfterSuite

BeforeScenario

AfterScenario

BeforeStepAfterStep

Page 59: Behatで行う、E2Eテスト入門

導入時苦労した点

Page 60: Behatで行う、E2Eテスト入門

60導入時苦労したこと

target=“_blank”のリンク別タブや別ウィンドウになるとコントロールできなくなる。

Page 61: Behatで行う、E2Eテスト入門

61導入時苦労したこと

Page 62: Behatで行う、E2Eテスト入門

62

スマートなやり方知ってる方は是非教えてください…

雑な解決方法

導入時苦労したこと

Page 63: Behatで行う、E2Eテスト入門

63

テストデータモジュール外部からCakeを起動するのに若干苦労した。

導入時苦労したこと

Page 64: Behatで行う、E2Eテスト入門

64導入時苦労したこと

Cakeの定数定義してbootstrap.phpをrequire。

Page 65: Behatで行う、E2Eテスト入門

導入後の所感

Page 66: Behatで行う、E2Eテスト入門

66導入後の所感

• 手動テストに比べて工数が削減された

• テスト項目をやり直さないでも良くなりリリース間際の修正に余裕が持てる

• シナリオテストが元々なかったので、仕様を満たすといった目的の担保がやりやすくなった

Page 67: Behatで行う、E2Eテスト入門

67導入後の所感

• 独自ステップは必要になってくる

• ドキュメントの情報量はそこまで豊富じゃない

• 自動テストツールはほぼ必須

Page 68: Behatで行う、E2Eテスト入門

68今後の取り組み

やるぞー

• CIでテストを自動実行• 他メンバーへのラーニング

Page 69: Behatで行う、E2Eテスト入門

69エンジニア&デザイナー積極採用中

一緒に新しい働き方を創ってくれる方を募集しています!

お気軽にご連絡ください![email protected]

• 働きかたを変えたい方• 素直でポジィティブな方• 最新の技術が好きな方• 世界に打って出たい方