Php unit extensions_selenium2_testcaseによる結合試験でらくらくテスト♪
1. PHPUni t _Ext ensi ons
_Sel eni um2Test Case
による結合試験でらくら
くテスト♪
2012/ 11/ 19( Mon)
t chi kuba@ l com
bi
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
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
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 つとは全く別モノなので注意!
17. 我々の CI 環境
• 環境
– 開発環境:開発コード
– ステージング環境:リポジトリ最新コード
– 本番環境:ある時点のリビジョン
• Capi st r ano
– 環境毎のデプロイをコマンド化
– DB 更新 ( m gr at e)
i
– f acebook グループに更新内容を通知
• Jenki ns
– テストケース実行
– ステージング環境自動デプロイ
– 本番環境用フローチェック
– デザインモック最新化
• Facebook
– テストユーザ
– 開発者用グループ
• 実装
– ブランチ非採用
– フラグ採用: β 版 vi ew, j s, css のみ
18. 【 FYI 】 PHPUni t _Fr amewor k_Test Ca
se
• 主に 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. 【 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 データ引き回しは厳禁
– セッションを多用しない
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. 結合試験デバッグ 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/
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. Sel eni um2Test Case の gi t hub
・・・まぁリンクあるだけましか・・・w
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
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. gi t hub サンプルの見方
テスト対象は超絶シンプルな ht ml
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 / sel eni um 1- t est s/ ht m / Cam CasePage. ht m
- l el l
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> タグの値が引ける
38. 我々のテストケース
• 今日紹介したのは一部
• 特に Okkr u フローは複雑
– ユーザ A :商品・友人を選んで受注
– ユーザ B :住所入力
– ユーザ A :決済
• ビジネスモデル
– 売上の~ %が我々の利益
– どのフローで止まっても利益が得られない!
39. 我々のテストケース
• 今日紹介したのは一部
• 特に Okkr u フローは複雑
– ユーザ A :商品・友人を選んで受注
– ユーザ B :住所入力
– ユーザ A :決済
• ビジネスモデル
– 売上の~ %が我々の利益
– どのフローで止まっても利益が得られない!
フローチェックの継続的なトータルサポートは
ビジネスモデルからも理に適っている!
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. 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
でテストケースを書いてみましょう~