PHPUnitによるテストの自動化 4

Selenium RCを使ったブラウザテストの自動化(1)

Selenium RCを使ったブラウザテストの自動化(1)

 これまで紹介してきたテストは、アプリケーションの構成要素であるモジュールを対象とした単体テストでした。一 方、PHPで開発するアプリケーションと言えば、もっぱらWebシステムとなりますので、結合テストではWebブラウザを介した画面操作の確認を行いま す。一口にブラウザと言っても、Internet Exploroer(IE)、Firefox、Safari、Chromeなど複数の種類があり、またそれぞれバージョンごとに表示や動作に違いがありま す。

 PHPUnitでは、この手間のかかるテストを自動化する仕組みとして、「PHPUnit_Extensions_SeleniumTestCase」 という名前の拡張テスト・クラスを用意しています。「Selenium RC」(http://seleniumhq.org/projects/remote-control/) というWebブラウザをプログラムから制御するテスト・ツールと連携させることで、「任意のURLを開き、フォームに値を入力し、サブミットした後の画面 表示を確認する」といった一連の操作をPHPUnitのテスト・ケースとして実行できます。

 まず、Selenium RCをインストールして、起動しておきます。
--------------------------------------------------------------------------------
# mkdir /opt/selenium-remote-control-1.0.3
# cd /opt/selenium-remote-control-1.0.3
# wget http://selenium.googlecode.com/files/selenium-remote-control-1.0.3.zip
# unzip selenium-remote-control-1.0.3.zip
# java -jar selenium-server-1.0.3/selenium-server.jar
--------------------------------------------------------------------------------

 テスト・ケースは、次のようになります。setUp()の中で、ブラウザの種類と、テスト対象サイトのベースURLを設定します。実際に動作させる場合 には、接続先となるWebサイトの迷惑とならないよう、ローカルの実験用サイトを指定しましょう。

 testTitle()でのテスト内容は次の通りです。

(1)指定されたURLをWebブラウザで開く
(2)ページがロードされるまで5000秒待つ
(3)

タグの内容が"Selenium Test Page"と等しいか確認<br> --------------------------------------------------------------------------------<br> <?php <br> require_once 'PHPUnit/Extensions/SeleniumTestCase.php';<br> <br> class SeleniumTest extends PHPUnit_Extensions_SeleniumTestCase<br> {<br>   protected function setUp()<br>   {<br>     $this->setBrowser('*firefox');<br>     $this->setBrowserUrl('<a href="http://example.com%27/" target="_blank" rel="noopener">http://example.com'</a>);<br>   }<br> <br>   public function testTitle()<br>   {<br>     $this->open('/');<br>     $this->waitForPageToLoad("5000");<br>     $this->assertEquals("Selenium Test Page", $this->getTitle());<br>   }<br> }<br> ?><br> --------------------------------------------------------------------------------<br> <br>  このテスト・ケースをphpunitコマンドで実行すると、Firefoxが起動し、指定したURLのページが表示されます。 <p> <a href="/sites/default/files/articles/1202-301.png" target="_blank"> <picture> <source srcset="/sites/default/files/styles/picturize_mobile_1x/public/articles/1202-301.png.avif 1x, /sites/default/files/styles/picturize_mobile_2x/public/articles/1202-301.png.avif 2x" media="(max-width: 480px)" type="image/avif" width="480" height="241"/> <source srcset="/sites/default/files/styles/picturize_normal_1x/public/articles/1202-301.png.avif 1x" media="(min-width: 480px)" type="image/avif" width="600" height="301"/> <source srcset="/sites/default/files/styles/picturize_mobile_1x/public/articles/1202-301.png.webp 1x, /sites/default/files/styles/picturize_mobile_2x/public/articles/1202-301.png.webp 2x" media="(max-width: 480px)" type="image/webp" width="480" height="241"/> <source srcset="/sites/default/files/styles/picturize_normal_1x/public/articles/1202-301.png.webp 1x" media="(min-width: 480px)" type="image/webp" width="600" height="301"/> <source srcset="/sites/default/files/styles/picturize_normal_1x/public/articles/1202-301.png 1x" media="(min-width: 480px)" type="image/png" width="600" height="301"/> <source srcset="/sites/default/files/styles/picturize_mobile_1x/public/articles/1202-301.png 1x, /sites/default/files/styles/picturize_mobile_2x/public/articles/1202-301.png 2x" media="(max-width: 480px)" type="image/png" width="480" height="241"/> <img style="width: 400px; height: 201px;" class="picturize-processed picturize-automatic picturize lazyload-auto lazyload-processed" width="600" height="301" src="/sites/default/files/styles/picturize_base/public/articles/1202-301.png" alt="" loading="lazy" typeof="foaf:Image" decoding="async"> </picture> </a> </p> <h2> Selenium RCを使ったブラウザテストの自動化(2) </h2> <p>  アサーション・メソッドの実行結果は、コンソールで確認できます。この場合、</p> <title>タグの 文字列が一致しないので、テストは失敗となりました。<br> --------------------------------------------------------------------------------<br> $ phpunit SeleniumTest.php<br> PHPUnit 3.4.12 by Sebastian Bergmann.<br> <br> F<br> <br> Time: 8 seconds, Memory: 8.25Mb<br> <br> There was 1 failure:<br> <br> 1) SeleniumTest::testTitle<br> Current URL: <a href="http://example.com/" target="_blank" rel="noopener">http://example.com/</a><br> <br> Failed asserting that two strings are equal.<br> --- Expected<br> +++ Actual<br> @@ @@<br> -Selenium Test Page<br> +Example Web Page<br> <br> /tmp/SeleniumTest.php:16<br> <br> FAILURES!<br> Tests: 1, Assertions: 1, Failures: 1.<br> --------------------------------------------------------------------------------<br> <br>  より具体的なテスト・ケースの書き方は、PHPUnitのマニュアルを参照してください。<br> <br>  最後に、テストだけではない、ちょっと違った利用例を紹介します。手前みそではありますが、私が開発したサービス「IOS SC」(<a href="http://www.pci-aios.jp/service/219" target="_blank" rel="noopener">http://www.pci-aios.jp/service/219</a>) です。<br> <br>  IOS SCは、Webサイトの品質を測定するASPサービスです。テスト・シナリオを定期的に自動実行し、画面の表示に必要とされた時間を測定/レポートする サービスです。測定結果が基準値を下回った場合にアラートのメールを送信することもできます。<br> <br> 【IOS SCの機能】<br> (1)レスポンス時間の監視<br> (2)アラート・メールの通知<br> (3)テスト結果のレポート表示<br> <br>  IOS SCも、PHPUnitのSelenium RC連携機能を内部で使っています。単なるWebサイトの死活監視にとどまらず、ユーザーがWebブラウザで行う操作を再現できます。例えば、ECサイト での「ログイン—商品検索—カート追加—カートからの削除—チェックアウト」までの流れを、定期的にテストすることが可能です。<br> <br>  また、APIを持たないWebシステムに対して、一定の時間で決まった操作を行うことにも利用できます。例えば、ログイン後に日付を指定して売上データ をダウンロード/アップロードする作業も自動化できます。<br> <br>  さて、4回にわたり、PHPUnitを使ったテストの自動化について紹介してきました。PHPUnitの持っている機能の一部しか紹介できませんでした が、参考にしていただけたら幸いです。ありがとうございました。

この記事をシェアしてください

人気記事トップ10

人気記事ランキングをもっと見る