More Related Content
Similar to PHP agile test tips (20)
More from Tsutomu Chikuba (10)
PHP agile test tips
- 2. about tchikuba
所属
ビルコム株式会社
自社サービス
ReBuy http://rebuy.jp/
Okkru https://okkru.jp
役割
開発 PM
PM = Playing Manager
いいね!
Linux 、ビール、宇宙平和
facebook/twitter
tchikuba
- 3. テスト種別
Project としてテスト自動化して
いるフェーズは以下の 2 つ
結合試験
単体試験
テスト着手の優先度は「該当フ
ェーズ毎」にビジネス的に価値
の高いものを都度判断して決定
する
- 4. テストフレームワーク種別
当 Project では PHPUnit を採用
採用している PHPUnit は大別して以
下の通り
単体試験用
PHPUnit_Framework_TestCase
Zend_Test_PHPUnit_ControllerTestCase
結合試験用
PHPUnit_Extensions_Selenium2TestCase
※ 単体試験用の 2 つとは全く別モノなので注
意!
- 5. 必要な実行環境の要件
環境を用途により分ける必要性
( ビルド ) デプロイ自動化
リポジトリ変更をタイムリーにハン
ドル
デプロイ時に必ずテストを自動実行
開発者にタイムリーに通知
本番環境でユーザテスト実施
デザインモックをタイムリーに最新
化
- 6. 実行環境
環境
開発環境:開発コード
ステージング環境:リポジトリ最新コード
本番環境:ある時点のリビジョン
Capistrano
環境毎のデプロイをコマンド化
DB 更新 (migrate)
facebook グループに更新内容を通知
Jenkins
テストケース実行
ステージング環境自動デプロイ
本番環境用フローチェック
デザインモック最新化
Facebook
テストユーザ
開発者用グループ
実装
ブランチ非採用
フラグ採用: β 版 view,js,css のみ
- 7. PHPUnit_Framework_TestCa
se
主に Model の単体試験に採用
複数の Model を多用する
ServiceModel は setUp メソッド内に
て MOCK_OBJECT を定義して疎結
合化
if(!defined('MOCK_OBJECT'))
define('MOCK_OBJECT', true);
$this->getModel(‘[Model 名 ]’); ※直接
new×
単体の Model で完結する Model はス
テージング環境 DB に接続して試験
- 8. Zend_Test_PHPUnit_ControllerTestCase
主に Controller の単体試験に採用
以下環境でサポート外なので注意
Zendframework1.x
PHPUnit3.6 以降
とはいえ意外と便利なので PHPUnit3.7 系でも無理やり使
用
無理やり使用 tips
テストケース落ちでも unserialize エラーが発生し実際のエ
ラーの中身が不明
なので /usr/share/pear/PHPUnit/Util/PHP.php の 238 行目付
近をまさぐってテスト実行結果を /tmp 等に出力
出力内容に実際のエラーが記述されている
MOCK_OBJECT は基本必ず setUp() 内で定義
新規に手を入れる Action のテストケースをまず作成
結果、 Controller 実装における 3 大原則を守れるように
フローコントロールに注力するよう実装
Model データ引き回しは厳禁
セッションを多用しない
- 9. PHPUnit_Extensions_Selenium2TestCase
現在本番環境デプロイ直後に
Capistrano→Jenkins で自動実行
ユーザが実行する遷移を忠実に再現
クリティカルな問題を未然に防ぐ対
策
ホントはステージング環境でも動かし
たい
CentOS で動く SeleniumServer に対
して実行
webDriver の擬似ブラウザで動作確
認
- 10. Selenium2 のメリット/デメ
リット
メリット
htmlunit が使える
Selenium1 系だと htmlunit が使用不可 ( そうだっ
た)
最新なので更新が多頻度
デメリット
SeleniumIDE によるテストコード生成が出来な
い
IDE によるケースが既にあれば移植の手間
ただし移植は比較的容易
ドキュメント皆無
github と戦う
フレームワークチェック用のテストコード参照で
書ける
- 11. 結合試験デバッグ tips
テストコードサンプル
https://github.com/sebastianbergm
ann/phpunit-
selenium/blob/master/Tests/Seleni
um2TestCaseTest.php
テスト対象 html
https://github.com/sebastianbergm
ann/phpunit-
selenium/tree/master/selenium-1-
tests/html
- 12. 以上
T.Chikuba@bilcom
facebook/twitter : tchikuba