[PHP]BehatとSeleniumを組み合わせ受け入れテストを自動化する
2011/02/12 | Agile, PHP | タグ: Agile, BDD, PHP, Selenium, テスト
Behatは良さそうなので引き続き検証中。
今回は、BehatとSeleniumを組み合わせて、受け入れテスト型のテストを自動化してみたので、その方法について書いてみることにする。
なお、前回の記事を読まれていない場合は一読をおすすめする。
→ PHPでBDD(Behavior Driven Development)する方法
Seleniumの課題
僕が関わっている案件では受入テストを自動化しているケースももちろんあって、その際はPHPUnitとSeleniumを組み合わせている。このテストには以下のような課題がある。
- 画面の操作をするphpコードが大量にあって、ソースを見ただけでは何をしているのか分かりにくい
- Seleniumは操作に画面の要素名利用するため、例えばサイトのデザインを大幅に変えたりすると、テストの中身も大幅に書き換えなければならない
- 上記と同様だがテスト内容とコードが密接に関連しすぎており、テストのシナリオ自体の再利用性が極めて低い
BehatとSeleniumを組み合わせることによる効果
BehatとSeleniumを組み合わせることで以下のような利点があるのではないかと考えている。
- テストのシナリオのレイヤーと自動テストの実装のレイヤーが分離できる
- テストのシナリオ自体はシステムの知識があまり無いユーザーや発注者でも作成できる
- それによって少なくともテストシナリオ自体の再利用性は進む
- When、Given、Andをうまく使うことで、それに対応するテストコード自体は必然的に小さくなる。
以下ではGoogle検索を例にして、BehatとSeleniumの組み合わせ方を解説する。
シナリオ
こんなシナリオならソースコード書けない人でも書ける
Google日本語検索で、入力内容と関連しそうな内容をサジェスチョンする
Scenario: Chromeは神かどうかのテスト
Given 私はGoogle日本語版サイトにアクセスします
And 私は検索ボックスに "Chrome ゴミブラウザ" と入力します
When 検索ボタンを押します
Then その結果画面には "もしかして: Chrome 神ブラウザ" と表示されます
Given ブラウザを終了します
テストの作成
シナリオを作成したら、まずは実装は一切なく、テストを実施してみよう。
behat フィーチャーディレクトリ名
まだステップを示すテスト内容の実体は存在しないので当然テストは失敗するが、どんなテストコードを作るべきかは以下の図のようにBehatがSuggestしてくれる。
この内容をstepディレクトリ以下に拡張子.phpのファイルを作って貼りつけよう。
貼りつけたらもう一回実行だ。
テストコードを実装
あとはテストコードの中身を書いていけば良い。
普通にTesting_Seleniumの関数を使えば良く、もちろん画面キャプチャを取得したりもできる。
$steps->Given('/^私はGoogle日本語版サイトにアクセスします$/', function($world) {
$world->selenium = new Testing_Selenium("*firefox", "http://www.google.co.jp/");
$world->selenium->start();
$world->selenium->open("http://www.google.co.jp");
$world->selenium->waitForPageToLoad("30000");
});
$steps->And('/^私は検索ボックスに "([^"]*)" と入力します$/', function($world, $arg1) {
$world->selenium->type("q", $arg1);
$world->selenium->captureEntirePageScreenshot(__DIR__."/1.png", "");
});
$steps->When('/^検索ボタンを押します$/', function($world) {
$world->selenium->click("btnG");
$world->selenium->waitForPageToLoad("30000");
$world->selenium->captureEntirePageScreenshot(__DIR__."/2.png", "");
});
$steps->Then('/^その結果画面には "([^"]*)" と表示されます$/', function($world, $arg1) {
try {
assertEquals(true, $world->selenium->isTextPresent("もしかして: Chrome 神ブラウザ"));
} catch (PHPUnit_Framework_AssertionFailedError $e) {
array_push($world->selenium->verificationErrors, $e->toString());
}
});
$steps->Given('/^ブラウザを終了します$/', function($world) {
$world->selenium->stop();
unset($world->selenium);
});
?>
以上ができたら実行してみよう。
画面のキャプチャも取得できている。
なお、動作させるには、supportディレクトリのphpスクリプト内で、Testing_Seleniumをrequire_onceしておく必要がある。Testing_Seleniumは、pearではなく、Seleniumの本家サイトのダウンロードリンク(http://code.google.com/p/selenium/downloads/list)からselenium-remote-control-1.0.3.zipを取得し、その中に同梱されているものを取得したほうが良さそうだ。(pearで導入したのだが、やたらと実行に時間が掛かった。理由は調べていないけど)
最後に、Chromeマジいいよ。まじで。
タグ: Agile, BDD, PHP, Selenium, テスト
← [PHP]PHPでBDD(Behavior Driven Development)する方法 [Trac]デブサミでITSに関するセッションに登壇しました #devsumi →
参考文献
アジャイルな見積りと計画づくり ~価値あるソフトウェアを育てる概念と技法~
著者/訳者:Mike Cohn マイク コーン
出版社:毎日コミュニケーションズ( 2009-01-29 )
定価:¥ 3,360
Amazon価格:¥ 3,360
単行本(ソフトカバー) ( 336 ページ )
ISBN-10 : 4839924023
ISBN-13 : 9784839924027
アート・オブ・アジャイル デベロップメント ―組織を成功に導くエクストリームプログラミング (Theory in practice)
著者/訳者:James Shore Shane Warden
出版社:オライリージャパン( 2009-02-18 )
定価:¥ 3,780
Amazon価格:¥ 3,780
大型本 ( 464 ページ )
ISBN-10 : 4873113954
ISBN-13 : 9784873113951
ウェブオペレーション ―サイト運用管理の実践テクニック (Theory in practice)
出版社:オライリージャパン( 2011-05-14 )
定価:¥ 2,730
Amazon価格:¥ 2,730
大型本 ( 278 ページ )
ISBN-10 : 4873114934
ISBN-13 : 9784873114934
レガシーコード改善ガイド (Object Oriented SELECTION)
著者/訳者:マイケル・C・フェザーズ
出版社:翔泳社( 2009-07-14 )
定価:¥ 4,410
Amazon価格:¥ 4,410
大型本 ( 472 ページ )
ISBN-10 : 4798116831
ISBN-13 : 9784798116839















[PHP]BehatとSeleniumを組み合わせ受け入れテストを自動化する …: Given 私はGoogle日本語版サイトにアクセスします. And 私は検索ボックスに "Chrome ゴミブラウザ" と入力します…. http://bit.ly/hsBs9a
[PHP]BehatとSeleniumを組み合わせ受け入れテストを自動化する | Ryuzee.com http://dlvr.it/GPy5t
見てる: 『[PHP]BehatとSeleniumを組み合わせ受け入れテストを自動化する | Ryuzee.com』 http://www.ryuzee.com/contents/blog/3608
[...] This post was mentioned on Twitter by Ryutaro YOSHIBA and everzet, Google 日本語入力. Google 日本語入力 said: [PHP]BehatとSeleniumを組み合わせ受け入れテストを自動化する …: Given 私はGoogle日本語版サイトにア [...]
[PHP]BehatとSeleniumを組み合わせ受け入れテストを自動化する | Ryuzee.com http://htn.to/MDw5vN
[PHP]BehatとSeleniumを組み合わせ受け入れテストを自動化する | Ryuzee.com: http://bit.ly/ialVIj
[bdd] / [PHP]BehatとSeleniumを組み合わせ受け入れテストを自動化する | Ryuzee.com http://t.co/WSrrNRy
これまじすげぇ http://t.co/NTLHY6WY
Own anyone experimented with this particular brand-new software program ever?