Php unit extensions_selenium2_testcaseによる結合試験でらくらくテスト♪

1,814 views

Published on

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,814
On SlideShare
0
From Embeds
0
Number of Embeds
92
Actions
Shares
0
Downloads
0
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Php unit extensions_selenium2_testcaseによる結合試験でらくらくテスト♪

  1. 1. PHPUni t _Ext ensi ons_Sel eni um2Test Caseによる結合試験でらくら くテスト♪ 2012/ 11/ 19( Mon) t chi kuba@ l com bi
  2. 2. about t chi kuba 所属 – ビルコム株式会社 自社サービス – ReBuy ht t p: / / r ebuy. j p/ – Okkr u ht t ps: / / okkr u. j p 役割 – 開発 PM – PM = Pl ayi ng Manager いいね! – Li nux 、ビール、宇宙平和 f acebook/ t wi t t er – t chi kuba
  3. 3. ビルコム株式会社 BI LCOM I NC ,デジタルエージェンシー i n Asi a
  4. 4. 自社サービスご紹介: ReBuy
  5. 5. 自社サービスご紹介: Okkr u
  6. 6. 本題に入る前に・・ ・
  7. 7. 聞いてみたいことがあります。PHPer な皆さんはどういう開発プロセスですか?
  8. 8. 我々の開発プロセスリーンソフトウェア開発! キタ━ ( ゚∀゚ ) ━!  ※ 詳細省略
  9. 9. 我々の諸環境• OS : Cent OS( ni f t y cl oud)• web サーバ: Ngi nx / Apache• DB サーバ: M ySQL• CI サーバ: Jenki ns / Sel eni um Ser ver• 言語: PHP / Zendf r am ewor k / j Quer y( Mobi l e)• SCM: Subver si on→Gi t• BTS : Bac kl og
  10. 10. 我々のテストスタイルV モデル vs Wモデル
  11. 11. 我々のテストスタイルV モデル vs Wモデル
  12. 12. 具体的なテストの肝は・ ・・
  13. 13. 自動
  14. 14. 徹底的に自動化すべし!Pr oj ect としてテスト自動化しているフェーズは 以下の 2 つ – 受入試験:ユーザ主動線をカバー – 結合/単体試験:ユニットテストテスト着手の優先度 – ビジネス価値:単体<結合<受入 – 開発フェーズ:単体>結合>受入※ 「該当フェーズ毎」にビジネス的に価値の高い ものを  都度判断して決定
  15. 15. テストフレームワーク種別• 当 Pr oj ect では PHPUni t を採用• 採用している PHPUni t は大別して以下の通り – 単体/結合試験用 • PHPUni t _Fr amewor k_Test Case • Zend_Test _PHPUni t _Cont r ol l er Test Case – 受入試験用 • PHPUni t _Ext ensi ons_Sel eni um2Test Case • ※ 単体試験用の 2 つとは全く別モノなので注意!
  16. 16. リーンな実行環境の要件• 環境を用途により分ける必要性• ( ビルド ) デプロイ自動化• リポジトリ変更をタイムリーにハンドル• デプロイ時に必ずテストを自動実行• 開発者にタイムリーに通知• 本番環境でユーザテスト実施• デザインモックをタイムリーに最新化
  17. 17. 我々の CI 環境• 環境 – 開発環境:開発コード – ステージング環境:リポジトリ最新コード – 本番環境:ある時点のリビジョン• Capi st r ano – 環境毎のデプロイをコマンド化 – DB 更新 ( m gr at e) i – f acebook グループに更新内容を通知• Jenki ns – テストケース実行 – ステージング環境自動デプロイ – 本番環境用フローチェック – デザインモック最新化• Facebook – テストユーザ – 開発者用グループ• 実装 – ブランチ非採用 – フラグ採用: β 版 vi ew, j s, css のみ
  18. 18. 【 FYI 】 PHPUni t _Fr amewor k_Test Case• 主に M odel の単体/結合試験に採用• 複数の M odel を多用する Ser vi ceM odel は set Up メ ソッド内にて M OCK_OBJECT を定義して疎結合化 – i f ( ! def i ned( MOCK_OBJECT ) ) def i ne( M OCK_OBJECT , t r ue) ; – $t hi s- >get M odel ( ‘ [ Model 名 ] ’ ) ;  ※直接 newו 単体の M odel で完結する M odel はステージング環境 DB に接続して試験
  19. 19. 【 FYI 】 Zend_Test _PHPUni t _Cont r ol l er Test Case• 主に Cont r ol l er の単体試験に採用• 以下環境でサポート外なので注意 – Zendf r amewor k1. x – PHPUni t 3. 6 以降• とはいえ意外と便利なので PHPUni t 3. 7 系でも無理やり使用• 無理やり使用 t i ps – テストケース落ちでも unser i al i ze エラーが発生し実際のエ ラーの中身が不明 – なので / usr / shar e/ pear / PHPUni t / Ut i l / PHP. php の 238 行目付近をまさぐってテスト実行結果を / t m 等に出力 p – 出力内容に実際のエラーが記述されている• MOCK_OBJECT は基本必ず set Up( ) 内で定義• 新規に手を入れる Act i on のテストケースをまず作成• 結果、 Cont r ol l er 実装における 3 大原則を守れるように – フローコントロールに注力するよう実装 – Model データ引き回しは厳禁 – セッションを多用しない
  20. 20. PHPUni t _Ext ensi ons_Sel en i um2Test Case
  21. 21. 【本命】 PHPUni t _ Ext ens i ons_Sel eni um2Test Cas e• 現在本番環境デプロイ直後に Capi st r ano→Jenki ns で 自動実行• ユーザが実行する遷移を忠実に再現• クリティカルな問題を未然に防ぐ対策 – ホントはステージング環境でも動かしたい• Cent OS で動く Sel eni um Ser ver に対して実行• webDr i ver の擬似ブラウザで動作確認 – $t hi s- >set Br owser ( ht m uni t ) ; l
  22. 22. 結合試験デバッグ t i psテストコードサンプル – ht t ps: / / gi t hub. com sebast i anber gm / ann/テスト対象 ht m l – ht t ps: / / gi t hub. com sebast i anber gm / ann/
  23. 23. 見れば分かるさ♪
  24. 24. 以上 tc hikuba @ bilcomfacebook/twitter :  tchikuba
  25. 25. ・・・あまりにも酷いような気がするので・・・
  26. 26. phpuni t . de マニュアルより抜粋f r om ht t p: / / www. phpuni t . de/ manual / cur r ent / j a/ sel eni um h . tm l
  27. 27. phpuni t . de マニュアルより抜粋f r om ht t p: / / www. phpuni t . de/ manual / cur r ent / j a/ sel eni um h . tm l
  28. 28. 以上!・・・まじっすかw
  29. 29. phpuni t . de マニュアルより抜粋 f r om ht t p: / / www. phpuni t . de/ manual / cur r ent / j a/ sel eni um h . tm lん?
  30. 30. Sel eni um2Test Case の gi t hub・・・まぁリンクあるだけましか・・・wf r om ht t ps: / / gi t hub. com sebast i anber gm / ann/ phpuni t - sel eni um bl ob/ m / ast er / Test s/ Sel eni um2Test CaseTest . php
  31. 31. gi t hub サンプルの見方URL とタイトルのアサーションf r om ht t ps: / / gi t hub. com sebast i anber gm / ann/ phpuni t - sel eni um bl ob/ m / ast er / Test s/ Sel eni um2Test CaseTest . php
  32. 32. gi t hub サンプルの見方テスト対象は超絶シンプルな ht mlf r om ht t ps: / / gi t hub. com sebast i anber gm / ann/ phpuni t - sel eni um bl ob/ m / ast er / sel eni um 1- t est s/ ht m / Cam CasePage. ht m - l el l
  33. 33. gi t hub サンプルの見方• テストケースのおさらいpubl i c f unc t i on t es t Cam Cas eUrl s AreSupport ed( ) el{        $t hi s - >ur l ( ht m / Cam CasePage. ht m ) ; l el l        $t hi s - >asser t St r i ngEndsW t h( ht m / Cam CasePage. ht m , $t hi s - >ur l ( ) ) ; i l el l        $t hi s - >asser t Equal s( Cam Case page , $t hi s - >t i t l e( ) ) ; el}• 分かること – $t hi s - >ur l ( ) でコール – $t hi s - >asser t St r i ngEndsW t h( ) で URL チェッ i ク – $t hi s - >t i t l e( ) で <t i t l e> タグの値が引ける
  34. 34. 我々のテストケースこんな感じ L.21 // error check ・問合せにアクセス ・何も入力せずサブミット ・エラーメッセージ出力を確認 ・ email 入力フォーム/確認フォームに a/b と入力してサブミット ・エラーメッセージ出力を確認
  35. 35. 我々のテストケースこんな感じ
  36. 36. 我々のテストケース L.36 // facebook login 以降 (ざっくり) ・ FB コネクトこんな感じ ・正常系で問合せ入力 ・確認画面の表示チェック ・完了画面の表示チェック
  37. 37. まとめ
  38. 38. 我々のテストケース• 今日紹介したのは一部• 特に Okkr u フローは複雑 – ユーザ A :商品・友人を選んで受注 – ユーザ B :住所入力 – ユーザ A :決済• ビジネスモデル – 売上の~ %が我々の利益 – どのフローで止まっても利益が得られない!
  39. 39. 我々のテストケース• 今日紹介したのは一部• 特に Okkr u フローは複雑 – ユーザ A :商品・友人を選んで受注 – ユーザ B :住所入力 – ユーザ A :決済• ビジネスモデル – 売上の~ %が我々の利益 – どのフローで止まっても利益が得られない!フローチェックの継続的なトータルサポートは ビジネスモデルからも理に適っている!
  40. 40. Sel eni um のメリット/デメリット 2メリット – ht m uni t が使える l • Sel eni um 系だと ht m uni t が使用不可 ( そうだった ) 1 l – 最新なので更新が多頻度 • 使えるメソッドもリアルタイムで増えてる – Sebast i an Ber gmann な恩恵(謎)デメリット – Sel eni um DE によるテストコード生成が出来ない I • I DE によるケースが既にあれば移植の手間 • ただし移植は比較的容易 ( Sel eni um前提知識必須 ) – ドキュメント皆無 • gi t hub と戦う ( って程でもないかな? ) • フレームワークチェック用のテストコード参照で書ける
  41. 41. Sel eni um のメリット/デメリット 2メリット – ht m uni t が使える l • Sel eni um 系だと ht m uni t が使用不可 ( そうだった ) 1 l – 最新なので更新が多頻度 • 使えるメソッドもリアルタイムで増えてる – Sebast i an Ber gmann な恩恵(謎)デメリット – Sel eni um DE によるテストコード生成が出来ない I • I DE によるケースが既にあれば移植の手間 • ただし移植は比較的容易 ( Sel eni um前提知識必須 ) – ドキュメント皆無 • gi t hub と戦う ( って程でもないかな? ) • フレームワークチェック用のテストコード参照で書ける デメリット以上のメリットが大きいので PHPer な方にはとっつきやすい ( と思われる ) PHPUnit_Extensions_Selenium2TestCase でテストケースを書いてみましょう~
  42. 42. ( 時間あれば ) うちの Jenki ns さんを紹介本日の Jenki ns さんのごきげん↓
  43. 43. Let ’ sPHPUni t _ Ext ens i ons_Sel eni um2Test Cas e !!!
  44. 44. 以上 tc hikuba @ bilcomfacebook/twitter :  tchikuba

×