レグレッションテスト

プログラムを修正・変更した場合は、修正前の他の機能が動作することを確認し、想定外の影響がないことを確かめておく必要があります(参考)。本サイトではレグレッションテストの代表的なツールであるSeleniumを取り上げ、レグレッションテストの概要を説明します。

 

Seleniumとは

Seleniumとは、ブラウザ上でのマウス操作やフォームへの文字列入力、文字列が存在するかのチェック、フォームの値のチェック、ページ内のJavaScriptの実行などを自動的に行うツールです。複数のブラウザで同じ操作のテストを実行することもできます。

Seleniumでは、実行形態によって、利用するSeleniumのコンポーネントが異なります。

 

1.Selenium IDE

Firefox単体でテストを実行する場合はこちらのツールを選択します。Selenium IDEはFirefoxのアドオンとして提供されており、ブラウザ操作によるテストケースの作成と、作成したテストのブラウザ上での実行ができます。

2.Selenium WebDriver

テスト用のマシンを立てて、クライアントからテストを実行する場合はこちらを選択します。ブラウザはFirefox以外にも殆どのブラウザに対応しており、テストもSelenium IDEで作成したテストケース以外に、Rubyでもテストコードを記述することができます。またJenkinsと連携させて、コミットがある度に自動的にテストを実行させることも可能です。

 

詳しく以下で説明します。

 

1.Selenium IDEを使った自動テスト

FirefoxのアドオンであるSelenium IDEを使って、クリックやキー入力操作などを記録してテストを作成し、作成したテストをブラウザで再生します。ここではインストールや使い方の概要を紹介します。

1.1 Selenium IDEのインストール

Firefoxを起動して、ダウンロードサイトのSelenium IDEにあるリンクをクリックします(下の図の赤枠)。

 

Seleniumダウンロードページ

 

Firefoxから「このサイトからはFirefoxにソフトウェアにインストールできない設定」の旨のメッセージが出たら「許可」ボタンを押下します。すると、ダウンロードするソフトウェアの一覧画面が表示されるので、「今すぐインストール」を押下して、ダウンロードの後にFirefoxを再起動します。

 

Seleniumダウンロードするプラグイン

 

これでインストール完了です。なお、Seleniumのサイトにもインストール方法は載っていますが、情報が古いことにお気をつけ下さい(2012年3月時点)。

 

1.2 テストの作成

対象とするWebアプリケーションを開いた状態から、[ツール]→[Selenium IDE]と選択すると、Selenium IDEが起動します([ツール]メニューがないときは、左上の[Firefox]→[オプション]→[メニューバー]を選択してメニュー表示させてください)。

 

Selenium IDE初期画面

 

この状態で既に記録モードになっているので、ブラウザでクリックや入力操作を行ってください。操作の度に、Selenium IDEに操作がコマンドとして記録されていきます。

 

 Seleniumコマンド記録

 

ブラウザ画面上に値が表示されているかを検証したい場合は、画面中の文字列を選択して右クリックし、「verifyTextPresent (選択文字列)」を選択します。すると、その(選択文字列)が画面中に存在するかをチェックするテスト項目を追加します。

 

 Selenium画面上の文字列チェック追加

 

テキストフィールド中に決められた値が入っているかを検証したい場合は、フィールドを選択して右クリックし、「verifyValue ...」を選択します。

 

操作の記録を停止するには、Selenium IDEの赤丸を押下します。記録後も、Selenium IDEの画面からコマンドの編集や追加をすることができます。例えば画面をキャプチャしたいときは、Selenium IDEの「コマンド」で"captureEntirePageScreenshot"を選択し、対象のところで画像ファイルへのパスを登録します。

 

Selenium画面キャプチャコマンド追加 

 

この他にもSelenium IDEのコマンド等に直接コマンドを登録することで、様々なテスト項目を追加できます(詳しくはこちら)。

[ファイル]→[テストケースの保存]により、テストケースがhtml形式で保存されます。テストケースを保存することで、他の人との共有やテストケースの再利用ができます。また、[ファイル]→[テストケースをエクスポート]で、RSpecなどが選択でき、Rubyコードによるテストとして出力することもできます。

またSelenium IDEでは複数のテストケースを"テストスイート"としてまとめて登録することも可能です。

 

1.3 テストの実行

対象とするWebアプリケーションを開いた状態から、Selenium IDEを起動します。[ファイル]メニューからテストケースまたはテストスイートを開いて、緑色の三角ボタン(再生ボタン)を押下すると、テストケースまたはテストスイートのテスト内容を実行します。テストスイートの実行では、テストスイートに含まれるテストケースが全て実行されます。テストが成功すると緑色で表示され、失敗すると赤色で表示されます。テストの一時停止や1ステップごとの実行などもできます。

 

 Selenium IDEによるテスト実行

 

 

2.Selenium WebDriverを使った自動テスト

Selenium WebDriverを使うと、テストケースをRuby言語で記述することができ、さらにFirefox以外のブラウザ上でもテストを実行することができます。実際のブラウザを使ってテストを行うため、JavaScriptの動作テストにも有効です。

Selenium WebDriverでは、テストコードを実行するマシンとブラウザを操作するマシンを同一にする場合と、テストコードから別のマシンにコマンドを送りそのマシン上のブラウザでテストを実行する場合と、二つの実行形態があります。ここでは前者の場合について、RSecを使ったテストを紹介します。後者については、Selenium Serverを利用します。詳しくはSeleniumのドキュメントWikiを参考にしてください。またRubyBindingsのWikiにも有用な情報が掲載されています。

 

2.1 サーバ側の準備

アプリケーションをデプロイしておきます。

 

2.2 クライアント側の準備

(1)ブラウザのインストールおよび設定

テストを実行するブラウザをクライアントマシンにインストールしておきます。特にInternet Explorerを使う際は、[ツール]→[インターネットオプション]の[セキュリティ]タブにおいて、全てのゾーンで同じ"保護モード"を設定しておく必要があります(全てONでも全てOFFでも、どちらでも構いません)。

 

 Selenium IEの設定

 

(2)RSpec実行環境の準備

gem installコマンドでrspecとSelenium WebDriverをインストールします。以下、RSpecファイルの格納場所を"C:\rails_apps\selenium_test"フォルダとします。

 

C:\rails_apps\selenium_test>gem install rspec
(途中略)


C:\rails_apps\selenium_test>gem install selenium-webdriver
(途中略)

 

(3)テストコード作成

SeleniumのドキュメントRubyBindingsのWikiを参考にしてテストコードを記述します。

このテストコードは、1で説明したSelenium IDEを使うと簡便に作成できます。2.1でデプロイしたアプリケーションに対してテストケースを作成し、[ファイル]→[テストケースをエクスポート]または[テストスイートをエクスポート]から[Ruby RSpec (WebDriver)]を選択して2.2(2)の格納フォルダに保存します(ここではファイル名を「selenium_test.rb」とします)。(参考:一番下の[Ruby RSpec]は、RSpec1系で記述された、旧バージョンのSelenium Clientに対応したコードが生成されます)

 

Selenium IDE エクスポートのメニュー 

 

保存したファイルを開き、テストコードを修正します。例えば、テストケースに日本語が含まれる場合は、ファイルの先頭に「# encoding: utf-8」を追加しておきます。また実行するブラウザは、「Selenium::WebDriver.for」に続く文字列で指定します。Firefoxなら「:firefox」を、Internet Explorerなら「:ie」を、Chromeなら「:chrome」を記述します。この他にも、Opera, iPhone, Androidにも対応しています。

  

# encoding: utf-8                  #ファイルに日本語が含まれる場合

require "selenium-webdriver"

require "rspec"

include RSpec::Expectations

 

describe "SeleniumTest" do

 

  before(:each) do

    @driver = Selenium::WebDriver.for :ie #ブラウザの選択

    @base_url = "http://XXX.XXX.XXX.XXX/"

    @driver.manage.timeouts.implicit_wait = 30

    @verification_errors = []
(以下略)

 

Selenium IDEで自動生成されたコードは、全ての操作がコードに反映されているとは限らないので、必要に応じて修正・追加します。また場合に応じて、操作と操作の間に待ち時間を入れておくことも可能です。

 

2.3 テストの実行

rspecコマンドで実行します。するとブラウザが起動しテストが始まります。結果はコマンドライン上に表示されます。

 

C:\rails_apps\selenium_test>rspec selenium_test.rb
.

Finished in 21.09 seconds
1 example, 0 failures

 

なおブラウザ上の動きをシミュレートするものとして、他にもCapybaraによる実行方法もありますが、ここでは省略します。