ブログ

ryuzeeによるブログ記事。不定期更新

Selenium + PHPUnitで簡単エンドツーエンドテストを実現する

  ここではSeleniumとPHPUnitを使って簡単にスモークテストを実現する方法を解説します。 基礎的な内容ですが、復習ということで。

下準備

  • FirefoxにSelenium IDEをインストールする
  • Selenium Serverを導入する(※ダウンロードへの直リンクはこちら)
どちらもhttp://seleniumhq.org/download/からダウンロード可能です。

Selenium IDEを使ったテストケースの作成

もうこれはあちこちのサイトで説明されているので特に説明の必要はないでしょう(笑) 簡単に言えば、Firefoxを起動し、さらにSelenium IDEをたちあげて、操作を記録していけば良いだけです。

参考サイト

テストケースを自動で実行する

ここまでの方法でFirefox上からHTML形式で作成したテストケースをSelenium IDE経由でいつでも実行できるようになります。 しかしこのやり方だと自らブラウザをたちあげてテストを実行しなければならず面倒です。 以下ではPHPUnitを使って連携する方法と、Selenium Serverの機能を使ってバッチ処理的に実行する方法を解説します。

PHPUnitと組み合わせる

PHPUnitと組み合わせて上記で作ったHTMLのテストケースを簡単に実行できます。

PHPUnitとPHPUnit_Seleniumの導入

このやり方ではPHPUnitとPHPUnit_Seleniumを利用するので、まだインストールしていない場合は以下の方法で導入します。

pear channel-discover pear.phpunit.de
pear channel-discover pear.symfony-project.com
pear install phpunit/PHPUnit
pear install phpunit/PHPUnit_Selenium

Selenium Serverの起動

起動は以下のようにします。

java -jar selenium-server-standalone-2.25.0.jar

Proxyの中にいる場合は

java -Dhttp.proxyHost=proxy.example.com -Dhttp.proxyPort=3128 -jar selenium-server-standalone-2.25.0.jar

のようにします。 以上で標準ではlocalhost:4444でSelenium Serverが起動します。

テストを作ってみる

さて先ほど作ったhtmlのテストケースを実行するテストを書いて見ましょう。 なお、先ほど作ったhtmlのテストケースを、このテストケースと同じディレクトリにあるhtmlフォルダに保存するか、以下の$seleneseDirectoryの値を作ったhtmlのテストケースが保存されているパスに書き換えてください。

class SeleneseTest extends PHPUnit_Extensions_SeleniumTestCase {

    public static $seleneseDirectory = "html/";

    protected function setUp() {
        $this->setHost("127.0.0.1");
        $this->setPort(4444);
        $this->setBrowser("*firefox");
        $this->setBrowserUrl("http://www.yahoo.co.jp/");
        $this->setTimeout(60000);
    }
}

以上ができたらテストを実行します。

phpunit SeleneseTest.php
PHPUnit 3.6.12 by Sebastian Bergmann.

..

Time: 39 seconds, Memory: 6.25Mb

OK (2 tests, 2 assertions)

はい。これでテスト通りました。ここでは$seleneseDirectoryで指定したパスの中にある拡張子がhtmlまたはhtmのテストケースを全て実行してくれます。 で、ここまでできればお分かりかと思いますが、

phpunit --log-junit=smoketest.xml SeleneseTest.php

としてあげればJUnit互換でテスト結果をXMLに出力できるので、簡単にJenkinsでテスト結果を出せるようになります。 ※詳細はPHPUnitのマニュアルにも記載があります。

なお、PHPUnitを使わないで実行するアプローチもありますので以下で説明します。

Selenium Serverの起動オプションにテストケースを設定する

以下のようにします。引数に-htmlSuiteを追加し、利用するブラウザ、開始URL、テストスイート名、結果出力ファイル名の順に指定します。テストスイートを指定しますので、最初に作ったテストケースをまとめるためのテストスイートを作っておいてください(Selenium IDEのメニューから「テストスイートに名前をつけて保存」をクリックして作成します。)

java -jar selenium-server-standalone-2.21.0.jar \
-port 4445 \
-htmlSuite "*firefox" "http://www.yahoo.co.jp" \
"./suite/TestSuite.html" \
"./result.html"

※先の例で既にSeleniumを4444番ポートで起動しているかもしれないのでサンプルとして起動ポートを4445にしています。なお、テストスイートを指定して起動した場合はテスト完了後にSelenium Serverは自動で終了します。

ここで出力されるhtmlは以下のようなものになります。

このhtmlのレポートをJenkinsに取り込むこともできます。それには、Selenium HTML Report Pluginを使います。詳細はこちら

まとめ

このようにhtmlで作ったテストケースでも簡単に自動実行できますし、Jenkinsに結果を取り込んだりできます。 画面回りのテストをコードを書いて作るのはコストが高いですが、Seleniumであれば比較的簡単につくれますので、スモークテスト用途等にも使えますし、特にレガシーコードを扱う場合には効果があると思います。 是非試してみてください。

なお、このアプローチで受け入れテストを全て自動化するのは現実的ではないことも多いです。というのも

  • 画面回りは変わりやすいこと
  • 開発前にテストを作るのが困難なこと
  • そしてテスト実行に時間がかかること
などが理由です。またhtmlのテストケースの場合、変数を外部から与えたりすることは得意でなく、処理を共通化することも困難なので、似たようなテストが大量にできてしまう問題もあります。したがってブラウザ経由のエンドツーエンドの受け入れテストをたくさん用意しなければならない場合は、htmlのテストケースではなく、WebDriverを叩くテストアプリケーションを書いた方が良いことも多いでしょう。Selenium IDEの場合は、各言語用のテストコードの出力も可能ですので、そちらを利用していくのが良いと思います。

またエンドツーエンドの挙動がガードできるようになれば、テストをもっとユニットレベルの段階で書くようにしていき(その過程でリファクタリングもある)テストにかかる時間を減らしたり、開発者にすばやくフィードバックが来るようにしていくことになります。

ちょっと上級編っぽい話は以下で書いてますのでご参考まで。 [PHP]BehatとSeleniumを組み合わせ受け入れテストを自動化する

アジャイルコーチングやトレーニングを提供しています

株式会社アトラクタでは、アジャイル開発に取り組むチーム向けのコーチングや、認定スクラムマスター研修などの各種トレーニングを提供しています。ぜひお気軽にご相談ください。

詳細はこちら
  • スクラム実践者が知るべき97のこと
  • 著者/訳者:Gunther Verheyen / 吉羽龍太郎 原田騎郎 永瀬美穂
  • 出版社:オライリージャパン(2021-03-23)
  • 定価:¥ 2,640
  • スクラムはアジャイル開発のフレームワークですが、その実装は組織やチームのレベルに応じてさまざまです。本書はスクラムの実践において、さまざまな課題に対処してきた実践者が自らの経験や考え方を語るエッセイ集です。日本語書き下ろしコラムを追加で10本収録
  • プロダクトマネジメント ―ビルドトラップを避け顧客に価値を届ける
  • 著者/訳者:Melissa Perri / 吉羽龍太郎
  • 出版社:オライリージャパン(2020-10-26)
  • 定価:¥ 2,640
  • プロダクト開発を作った機能の数やベロシティなどのアウトプットで計測すると、ビルドトラップと呼ばれる失敗に繋がります。本書ではいかにしてビルドトラップを避けて顧客に価値を届けるかを解説しています。
  • SCRUM BOOT CAMP THE BOOK 【増補改訂版】
  • 著者/訳者:西村直人 永瀬美穂 吉羽龍太郎
  • 出版社:翔泳社(2020-05-20)
  • 定価:¥ 2,640
  • スクラム初心者に向けて基本的な考え方の解説から始まり、プロジェクトでの実際の進め方やよく起こる問題への対応法まで幅広く解説。マンガと文章のセットでスクラムを短期間で理解できます。スクラムの概要を正しく理解したい人、もう一度おさらいしたい人にオススメ。
  • みんなでアジャイル ―変化に対応できる顧客中心組織のつくりかた
  • 著者/訳者:Matt LeMay / 吉羽龍太郎、永瀬美穂、原田騎郎、有野雅士
  • 出版社:オライリージャパン(2020-3-19)
  • 定価:¥ 2,640
  • アジャイルで本当の意味での成果を出すには、開発チームだけでアジャイルに取り組むのではなく、組織全体がアジャイルになる必要があります。本書にはどうやってそれを実現するかのヒントが満載です
  • レガシーコードからの脱却 ―ソフトウェアの寿命を延ばし価値を高める9つのプラクティス
  • 著者/訳者:David Scott Bernstein / 吉羽龍太郎、永瀬美穂、原田騎郎、有野雅士
  • 出版社:オライリージャパン( 2019-9-18 )
  • 定価:¥ 3,132
  • レガシーコードになってから慌てるのではなく、日々レガシーコードを作らないようにするにはどうするか。その観点で、主にエクストリームプログラミングに由来する9つのプラクティスとその背後にある原則をわかりやすく説明しています。
  • Effective DevOps ―4本柱による持続可能な組織文化の育て方
  • 著者/訳者:Jennifer Davis、Ryn Daniels / 吉羽 龍太郎、長尾高弘
  • 出版社:オライリージャパン( 2018-3-24 )
  • 定価:¥ 3,888
  • 主にDevOpsの文化的な事柄に着目し、異なるゴールを持つチームが親和性を高め、矛盾する目標のバランスを取りながら最大限の力を発揮する方法を解説します
  • ジョイ・インク 役職も部署もない全員主役のマネジメント
  • 著者/訳者:リチャード・シェリダン / 原田騎郎, 安井力, 吉羽龍太郎, 永瀬美穂, 川口恭伸
  • 出版社:翔泳社( 2016-12-20 )
  • 定価:¥ 1,944
  • 米国で何度も働きやすい職場として表彰を受けているメンローの創業者かつCEOであるリチャード・シェリダン氏が、職場に喜びをもたらす知恵や経営手法、より良い製品の作り方などを惜しみなく紹介しています
  • アジャイルコーチの道具箱 – 見える化の実例集
  • 著者/訳者:Jimmy Janlén / 原田騎郎, 吉羽龍太郎, 川口恭伸, 高江洲睦, 佐藤竜也
  • 出版社:Leanpub( 2016-04-12 )
  • 定価:$14.99
  • この本は、チームの協調とコミュニケーションを改善したり、行動を変えるための見える化の実例を集めたものです。96個(+2)の見える化の方法をそれぞれ1ページでイラストとともに解説しています。アジャイル開発かどうかに関係なくすぐに使えるカタログ集です
  • カンバン仕事術 ―チームではじめる見える化と改善
  • 著者/訳者:原田騎郎 安井力 吉羽龍太郎 角征典 高木正弘
  • 出版社:オライリージャパン( 2016-03-25 )
  • 定価:¥ 2,138
  • チームの仕事や課題を見える化する手法「カンバン」について、その導入から実践までを図とともにわかりやすく解説した書籍。カンバンの原則などの入門的な事柄から、サービスクラス、プロセスの改善など、一歩進んだ応用的な話題までを網羅的に解説します。
  • Software in 30 Days スクラムによるアジャイルな組織変革“成功"ガイド
  • 著者/訳者:Ken Schwaber、Jeff Sutherland著、角征典、吉羽龍太郎、原田騎郎、川口恭伸訳
  • 出版社:アスキー・メディアワークス( 2013-03-08 )
  • 定価:¥ 1,680
  • スクラムの父であるジェフ・サザーランドとケン・シュエイバーによる著者の日本語版。ビジネス層、マネジメント層向けにソフトウェア開発プロセス変革の必要性やアジャイル型開発プロセスの優位性について説明
  • How to Change the World 〜チェンジ・マネジメント3.0〜
  • 著者/訳者:Jurgen Appelo, 前川哲次(翻訳), 川口恭伸(翻訳), 吉羽龍太郎(翻訳)
  • 出版社:達人出版会
  • 定価:500円
  • どうすれば自分たちの組織を変えられるだろう?それには、組織に変革を起こすチェンジ・マネジメントを学習することだ。アジャイルな組織でのマネージャーの役割を説いた『Management 3.0』の著者がコンパクトにまとめた変化のためのガイドブック