ビルコムの人 tchikuba
ビルコム(≠ウェルコム)
http://www.rebuy.jp/
https://okkru.jp/fbec_front/gift (20代-30代の女性がターゲット)
本題に入る前に
PHPerな人はどういう開発プロセスなのか?
ウォーターフォール or アジャイル?
(アジャイルが主流?)
リーンソフトウェア開発(詳細省略)
主な開発環境
CentOS
Nginx Apache
MySQL
Jenkins
PHP Zendframework jQuery
Subversion → Git
Backlog
Vモデル vs Wモデル
具体的なテストの肝は、自動化
徹底的に自動化すべし
Projectとしてテスト自動化しているフェーズは以下の2つ
受け入れ試験 ユーザ主動線をカバー
結合 単体試験 ユニットテスト
テスト着手の優先度
ビジネス価値 単体 < 結合 < 受け入れ
開発フェーズ 単体 > 結合 > 受け入れ
該当フェーズ毎にビジネス的に価値の高いものを都度判断して決定する
(悪く言うと行き当たりばったり)
PHPUnitを採用している。
環境を用途に分ける必要性
(ビルド)デプロイ自動化
リポジトリ変更をタイムリーにハンドル
デプロイ時に必ずテストを自動実行
開発者にタイムリーに通知
本番環境でユーザテスト実施
デザインモックをタイムリーに最新化
CI環境
Capistranoでデプロイ自動化
Jenkinsでテストケース実行
Facebookでデプロイされたことがメッセージで送られる
実装
ブランチ非採用でフラグを採用している
PHPUnit_Framework_TestCase
主にModelの単体 結合試験に採用しているMOCK_OBJECTを定義して疎結合化している
Zend_Test_PHPUnit_ControllerTestCase
Controller で単体テストを実行している
PHPUnit_Extensions_Selenium2TestCase
本番デプロイ直後でCapistrano→Jenkinsで自動実行している
ユーザが実行する遷移を忠実に再現(2時間おきに自動実行)
クリティカルな問題を未然に防ぐ対策(本当はステージング環境でも動かしたい)
CentOSで動くSeleniumServerに対して実行
webDriverの疑似ブラウザで動作確認(いろいろ制約があるので)
結合試験デバッグtip
sebastianburgman
使い方
http://www.phpunit.de/manual/3.6/ja/selenium.html
ログイン連携とかをテストできる
FBコネクト
正常系で問い合わせ入力
確認画面 完了画面で表示チェック
まとめ
紹介したのは一部
Okkruのフローは複雑
ユーザA 商品 友人を選んで受注
ユーザB 住所入力
ユーザA 決済
どのフローで止まっても利益は得られない
フローチェックのトータルサポートは利に適っている
メリット
htmlunitが使える
最新なので更新頻度が高い
Sebastioan Bergmannな恩恵
デメリット
SeleniumIDEによるテストコード生成が出来ない(IDEにるケースが既にあれば移植の手間がかかるが、移植自体は比較的容易)
ドキュメント皆無(Githubと格闘する必要あり)
デメリット以上のメリットが大きいのでPHPerな人にはとっつきやすいと思われる
質疑
PHPStoriesと組み合わせてはいない
非同期のAPIをテストする
Behatなら簡単に出来そう?