DevOpsとか自動化とかアジャイルな話 / 認定スクラムプロフェショナル(CSP) / CSM / CSPO / Microsoft MVP for Visual Studio ALM / @ryuzee

[PHP]BehatとSeleniumを組み合わせ受け入れテストを自動化する

2011/02/12 | Agile, PHP | タグ: , , , ,


 
Behatは良さそうなので引き続き検証中。
今回は、BehatとSeleniumを組み合わせて、受け入れテスト型のテストを自動化してみたので、その方法について書いてみることにする。
なお、前回の記事を読まれていない場合は一読をおすすめする。
PHPでBDD(Behavior Driven Development)する方法

Seleniumの課題

僕が関わっている案件では受入テストを自動化しているケースももちろんあって、その際はPHPUnitとSeleniumを組み合わせている。このテストには以下のような課題がある。

  • 画面の操作をするphpコードが大量にあって、ソースを見ただけでは何をしているのか分かりにくい
  • Seleniumは操作に画面の要素名利用するため、例えばサイトのデザインを大幅に変えたりすると、テストの中身も大幅に書き換えなければならない
  • 上記と同様だがテスト内容とコードが密接に関連しすぎており、テストのシナリオ自体の再利用性が極めて低い

BehatとSeleniumを組み合わせることによる効果

BehatとSeleniumを組み合わせることで以下のような利点があるのではないかと考えている。

  • テストのシナリオのレイヤーと自動テストの実装のレイヤーが分離できる
  • テストのシナリオ自体はシステムの知識があまり無いユーザーや発注者でも作成できる
  • それによって少なくともテストシナリオ自体の再利用性は進む
  • When、Given、Andをうまく使うことで、それに対応するテストコード自体は必然的に小さくなる。

以下ではGoogle検索を例にして、BehatとSeleniumの組み合わせ方を解説する。

シナリオ

こんなシナリオならソースコード書けない人でも書ける

Feature: Googleもしかして
  Google日本語検索で、入力内容と関連しそうな内容をサジェスチョンする

  Scenario: Chromeは神かどうかのテスト
    Given 私はGoogle日本語版サイトにアクセスします
      And 私は検索ボックスに "Chrome ゴミブラウザ" と入力します
     When 検索ボタンを押します
     Then その結果画面には "もしかして: Chrome 神ブラウザ" と表示されます
    Given ブラウザを終了します

テストの作成

シナリオを作成したら、まずは実装は一切なく、テストを実施してみよう。

behat フィーチャーディレクトリ名

まだステップを示すテスト内容の実体は存在しないので当然テストは失敗するが、どんなテストコードを作るべきかは以下の図のようにBehatがSuggestしてくれる。
この内容をstepディレクトリ以下に拡張子.phpのファイルを作って貼りつけよう。

貼りつけたらもう一回実行だ。

テストコードを実装

あとはテストコードの中身を書いていけば良い。
普通にTesting_Seleniumの関数を使えば良く、もちろん画面キャプチャを取得したりもできる。

< ?php

$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マジいいよ。まじで。

タグ: , , , ,

    

参考文献

リーン開発の現場 カンバンによる大規模プロジェクトの運営

著者/訳者:Henrik Kniberg

出版社:オーム社( 2013-10-26 )

定価:¥ 2,520

Amazon価格:¥ 2,520

単行本(ソフトカバー) ( 184 ページ )

ISBN-10 : 427406932X

ISBN-13 : 9784274069321



組織パターン (Object Oriented SELECTION)

著者/訳者:James O. Coplien Neil B.Harrison ジェームス・コプリエン ニール・ハリソン

出版社:翔泳社( 2013-08-06 )

定価:¥ 3,990

Amazon価格:¥ 3,990

大型本 ( 424 ページ )

ISBN-10 : 4798128449

ISBN-13 : 9784798128443



インフラエンジニアの教科書

著者/訳者:佐野 裕

出版社:シーアンドアール研究所( 2013-10-26 )

定価:¥ 2,100

Amazon価格:¥ 2,100

単行本(ソフトカバー) ( 184 ページ )

ISBN-10 : 4863541333

ISBN-13 : 9784863541337



継続的デリバリー 信頼できるソフトウェアリリースのためのビルド・テスト・デプロイメントの自動化

著者/訳者:David Farley Jez Humble

出版社:アスキー・メディアワークス( 2012-03-14 )

定価:¥ 3,990

Amazon価格:¥ 3,990

大型本 ( 544 ページ )

ISBN-10 : 4048707876

ISBN-13 : 9784048707879


コメント

9 Responses to “[PHP]BehatとSeleniumを組み合わせ受け入れテストを自動化する”

  1. [PHP]BehatとSeleniumを組み合わせ受け入れテストを自動化する — : Given 私はGoogle日本語版サイトにアクセスします. And 私は検索ボックスに "Chrome ゴミブラウザ" と入力します — . http://bit.ly/hsBs9a

  2. My Rss Feed より:

    [PHP]BehatとSeleniumを組み合わせ受け入れテストを自動化する | Ryuzee.com http://dlvr.it/GPy5t

  3. hidehish より:

    見てる: 『[PHP]BehatとSeleniumを組み合わせ受け入れテストを自動化する | Ryuzee.com』 http://www.ryuzee.com/contents/blog/3608

  4. [...] This post was mentioned on Twitter by Ryutaro YOSHIBA and everzet, Google 日本語入力. Google 日本語入力 said: [PHP]BehatとSeleniumを組み合わせ受け入れテストを自動化する — : Given 私はGoogle日本語版サイトにア [...]

  5. [PHP]BehatとSeleniumを組み合わせ受け入れテストを自動化する | Ryuzee.com http://htn.to/MDw5vN

  6. junichi_y より:

    [PHP]BehatとSeleniumを組み合わせ受け入れテストを自動化する | Ryuzee.com: http://bit.ly/ialVIj

  7. あいた より:

    [bdd] / [PHP]BehatとSeleniumを組み合わせ受け入れテストを自動化する | Ryuzee.com http://t.co/WSrrNRy

  8. みぃおはー より:

    これまじすげぇ http://t.co/NTLHY6WY

  9. auditors より:

    Own anyone experimented with this particular brand-new software program ever?