| Prev | Next |
Selenium RC はテストツールのひとつです。これを使用すると、 ウェブアプリケーションのユーザインターフェイスについてのテストを自動化することができます。 あらゆるプログラミング言語で稼動しているウェブサイトに対応しており、 現在主流のあらゆるブラウザで使用することができます。Selenium RC は Selenium Core を使用しています。これは、ブラウザ上でのタスクを自動的に実行する JavaScript のライブラリです。Selenium でのテストは、 一般のユーザが使用するのと同じようにブラウザ上で直接実行されます。 主な使用例としては、受け入れテスト (各システム単体のテストではなく、結合されたシステム全体に対するテスト) や ブラウザの互換性のテスト (ウェブアプリケーションを、さまざまなオペレーティングシステムやブラウザでテストする) などがあります。
Selenium RC のインストール手順は、次のようになります。
server/selenium-server.jar を /usr/local/bin などにコピーする。
java -jar /usr/local/bin/selenium-server.jar などのようにして Selenium RC サーバを起動する。
これで、クライアント/サーバ プロトコルを用いて Selenium RC サーバにコマンドを送信できるようになりました。
PHPUnit_Extensions_SeleniumTestCase は、Selenium RC と通信するための クライアント/サーバ プロトコルを実装したものです。 また、ウェブのテスト用に特化したアサーションメソッドも提供します。
例 18.1 は、 ウェブサイト http://www.example.com/ の <title> 要素の内容をテストする方法を示したものです。
例 18.1: PHPUnit_Extensions_SeleniumTestCase の使用例
<?php
require_once 'PHPUnit/Extensions/SeleniumTestCase.php';
class WebTest extends PHPUnit_Extensions_SeleniumTestCase
{
protected function setUp()
{
$this->setBrowser('*firefox');
$this->setBrowserUrl('http://www.example.com/');
}
public function testTitle()
{
$this->open('http://www.example.com/');
$this->assertTitle('Example WWW Page');
}
}
?>
phpunit WebTest
PHPUnit 3.5.14 by Sebastian Bergmann.
F
Time: 6 seconds, Memory: 6.25Mb
There was 1 failure:
1) WebTest::testTitle
Current URL: http://www.iana.org/domains/example/
Failed asserting that <string:IANA — Example domains> matches PCRE pattern "/Example WWW Page/".
/home/sb/WebTest.php:15
FAILURES!
Tests: 1, Assertions: 1, Failures: 1.
PHPUnit_Framework_TestCase クラスとは異なり、 PHPUnit_Extensions_SeleniumTestCase を継承したテストケースクラスは setUp() メソッドが必須となります。 このメソッド内で、Selenium RC セッションの設定を行います。 ここで使用できるメソッドの一覧は 表 18.1 を参照ください。
表18.1 Selenium RC API: セットアップ
| メソッド | 意味 |
|---|---|
void setBrowser(string $browser)
|
Selenium RC サーバが使用するブラウザを設定します。 |
void setBrowserUrl(string $browserUrl)
|
テストするベース URL を設定します。 |
void setHost(string $host)
|
Selenium RC サーバに接続する際のホスト名を設定します。 |
void setPort(int $port)
|
Selenium RC サーバに接続する際のポートを設定します。 |
void setTimeout(int $timeout)
|
Selenium RC サーバに接続する際のタイムアウト値を設定します。 |
void setSleep(int $seconds)
|
Selenium RC クライアントが、Selenium RC サーバにアクションコマンドを送信してから待機する秒数を設定します。 |
PHPUnit では、Selenium のテストが失敗したときのスクリーンショットを撮ることができます。 この機能を使うには、$captureScreenshotOnFailure、 $screenshotPath および $screenshotUrl をテストケースクラス内で 例 18.2 のように指定します。
例 18.2: テストに失敗したときのスクリーンショットの取得
<?php
require_once 'PHPUnit/Extensions/SeleniumTestCase.php';
class WebTest extends PHPUnit_Extensions_SeleniumTestCase
{
protected $captureScreenshotOnFailure = TRUE;
protected $screenshotPath = '/var/www/localhost/htdocs/screenshots';
protected $screenshotUrl = 'http://localhost/screenshots';
protected function setUp()
{
$this->setBrowser('*firefox');
$this->setBrowserUrl('http://www.example.com/');
}
public function testTitle()
{
$this->open('http://www.example.com/');
$this->assertTitle('Example WWW Page');
}
}
?>
phpunit WebTest
PHPUnit 3.5.14 by Sebastian Bergmann.
F
Time: 6 seconds, Memory: 6.25Mb
There was 1 failure:
1) WebTest::testTitle
Current URL: http://www.iana.org/domains/example/
Screenshot: http://localhost/screenshots/77d27f0770bcfcda48e582629e0a9d3d.png
Failed asserting that <string:IANA — Example domains> matches PCRE pattern "/Example WWW Page/".
/home/sb/WebTest.php:19
FAILURES!
Tests: 1, Assertions: 1, Failures: 1.
複数のブラウザを使用してテストを行なうこともできます。この場合は、 setBrowser() でブラウザの設定を行うかわりに、 テストケースクラスの中で $browsers という名前の public static な配列を作成します。 この配列の各項目が個々のブラウザの設定を表します。 これらのブラウザは、それぞれ別の Selenium RC サーバで管理することができます。 例 18.3 に例を示します。
例 18.3: 複数のブラウザの設定管理
<?php
require_once 'PHPUnit/Extensions/SeleniumTestCase.php';
class WebTest extends PHPUnit_Extensions_SeleniumTestCase
{
public static $browsers = array(
array(
'name' => 'Firefox on Linux',
'browser' => '*firefox',
'host' => 'my.linux.box',
'port' => 4444,
'timeout' => 30000,
),
array(
'name' => 'Safari on MacOS X',
'browser' => '*safari',
'host' => 'my.macosx.box',
'port' => 4444,
'timeout' => 30000,
),
array(
'name' => 'Safari on Windows XP',
'browser' => '*custom C:\Program Files\Safari\Safari.exe -url',
'host' => 'my.windowsxp.box',
'port' => 4444,
'timeout' => 30000,
),
array(
'name' => 'Internet Explorer on Windows XP',
'browser' => '*iexplore',
'host' => 'my.windowsxp.box',
'port' => 4444,
'timeout' => 30000,
)
);
protected function setUp()
{
$this->setBrowserUrl('http://www.example.com/');
}
public function testTitle()
{
$this->open('http://www.example.com/');
$this->assertTitle('Example Web Page');
}
}
?>
PHPUnit_Extensions_SeleniumTestCase を使用すると、 Selenium で実行したテストのカバレッジ情報を収集することができます。
PHPUnit/Extensions/SeleniumTestCase/phpunit_coverage.php をウェブサーバのドキュメントルートディレクトリにコピーします。
php.ini ファイルで、PHPUnit/Extensions/SeleniumTestCase/prepend.php と PHPUnit/Extensions/SeleniumTestCase/append.php をそれぞれ auto_prepend_file および auto_append_file に設定します。
PHPUnit_Extensions_SeleniumTestCase を継承したテストケースクラスで、
protected $coverageScriptUrl = 'http://host/phpunit_coverage.php';
のようにして phpunit_coverage.php スクリプトの URL を指定します。
表 18.2 は、PHPUnit_Extensions_SeleniumTestCase が提供するさまざまなアサーションメソッドの一覧です。
表18.2 アサーション
| アサーション | 意味 |
|---|---|
void assertElementValueEquals(string $locator, string $text)
|
$locator で表される要素の値が $text と異なる場合にエラーを報告します。
|
void assertElementValueNotEquals(string $locator, string $text)
|
$locator で表される要素の値が $text と等しい場合にエラーを報告します。
|
void assertElementValueContains(string $locator, string $text)
|
$locator で表される要素の値が $text を含まない場合にエラーを報告します。
|
void assertElementValueNotContains(string $locator, string $text)
|
$locator で表される要素の値が $text を含む場合にエラーを報告します。
|
void assertElementContainsText(string $locator, string $text)
|
$locator で表される要素が $text を含まない場合にエラーを報告します。
|
void assertElementNotContainsText(string $locator, string $text)
|
$locator で表される要素が $text を含む場合にエラーを報告します。
|
void assertSelectHasOption(string $selectLocator, string $option)
|
指定したオプションが使用できない場合にエラーを報告します。 |
void assertSelectNotHasOption(string $selectLocator, string $option)
|
指定したオプションが使用できる場合にエラーを報告します。 |
void assertSelected($selectLocator, $option)
|
指定したラベルが選択されていない場合にエラーを報告します。 |
void assertNotSelected($selectLocator, $option)
|
指定したラベルが選択されている場合にエラーを報告します。 |
void assertIsSelected(string $selectLocator, string $value)
|
指定した値が選択されていない場合にエラーを報告します。 |
void assertIsNotSelected(string $selectLocator, string $value)
|
指定した値が選択されている場合にエラーを報告します。 |
表 18.3 は、 PHPUnit_Extensions_SeleniumTestCase のテンプレートメソッドをまとめたものです。
表18.3 テンプレートメソッド
| メソッド | 意味 |
|---|---|
void defaultAssertions()
|
テストケース内のすべてのテストで共有するアサーションを上書きします。 このメソッドは、Selenium RC サーバにコマンドが送信されるたびに (送信された後に) コールされます。 |
使用できるコマンドのリファレンスや実際の使用法については Selenium のドキュメント を参照ください。
runSelenese($filename) メソッドを使用すると、 Selenese/HTML の設定から Selenium のテストを実行することができます。 さらに、静的属性 $seleneseDirectory を使用すると、 Selenese/HTML ファイルを含むディレクトリから自動的にテストオブジェクトを作成することができます。 指定したディレクトリ配下を再帰的に走査し、 .htm ファイルを探します。このファイルには Selenese/HTML が含まれているものとします。例として 例 18.4 を参照ください。
例 18.4: Selenese/HTML ファイルのディレクトリをテストとして使用する
<?php
require_once 'PHPUnit/Extensions/SeleniumTestCase.php';
class SeleneseTests extends PHPUnit_Extensions_SeleniumTestCase
{
public static $seleneseDirectory = '/path/to/files';
}
?>
| Prev | Next |
assertArrayHasKey()
assertClassHasAttribute()
assertClassHasStaticAttribute()
assertContains()
assertContainsOnly()
assertEmpty()
assertEqualXMLStructure()
assertEquals()
assertFalse()
assertFileEquals()
assertFileExists()
assertGreaterThan()
assertGreaterThanOrEqual()
assertInstanceOf()
assertInternalType()
assertLessThan()
assertLessThanOrEqual()
assertNull()
assertObjectHasAttribute()
assertRegExp()
assertStringMatchesFormat()
assertStringMatchesFormatFile()
assertSame()
assertSelectCount()
assertSelectEquals()
assertSelectRegExp()
assertStringEndsWith()
assertStringEqualsFile()
assertStringStartsWith()
assertTag()
assertThat()
assertTrue()
assertType()
assertXmlFileEqualsXmlFile()
assertXmlStringEqualsXmlFile()
assertXmlStringEqualsXmlString()
Copyright © 2005-2012 Sebastian Bergmann.