PHPUnit+Seleniumと雑多メモ
PHPUnit+Selenium使う場合にはPHPUnit_Extensions_SeleniumTestCase使えば良い模様(PHPUnit_Extensions_Selenium2TestCaseっつーのもある)
インストール
pear install phpunit/PHPUnit_Selenium
でPHPUnit Selenium Extensionを入れる。あとSelenium Serverが必要なので公式からDLしてきて起動しておく
でPHPUnitから使う場合にはphpunit.xmlで設定関係出来るけどそこら辺はドキュメント書いてるので(ry
tests/selenium_test.php
<?php
class SampleSeleniumTestCase extends PHPUnit_Extensions_SeleniumTestCase {
// エラー時にスクリーンショットを取るか否か
protected $captureScreenshotOnFailure = true;
// エラー時スクリーンショットを保管するディレクトリ
protected $screenshotPath = "/home/kinjouj";
// エラー時スクリーンショット取得時のラベル名目上で使われる模様
protected $screenshotUrl = "http://localhost";
protected function setUp() {
$this->setBrowser("firefox");
$this->setBrowserUrl("http://localhost:5000");
}
public function test_title() {
$this->setSleep(3);
$this->open("/");
$this->assertTitle("bloglious");
}
}
まぁってな感じで、あとはSeleniumに応じたAPIを使って操作テストを定義すりゃいいだけなので詳しくは(ry
雑多メモ
PHPUnitで出力方式を変えたい(TAP出力等)場合には
<?xml version="1.0" ?>
<phpunit>
<logging>
<log type="tap" target="/dev/stdout" />
</logging>
<testsuites>
<testsuite>
<directory suffix=".php">tests</directory>
</testsuite>
</testsuites>
</phpunit>
な感じで使える模様。あとPHPUnitで使えるアノテーションも色々ある模様で
<?php
class SampleTestCase extends PHPUnit_Framework_TestCase {
public function test1() {
// このテストを不完全テストとしてマークする
$this->markTestIncomplete("incomplete");
}
public function test2() {
global $data;
if (is_null($data)) {
// 条件によりテストをスキップする
$this->markTestSkipped("undefined data");
}
$this->assertTrue(true);
}
/** 特定の条件に満たないとテストがスキップされる
* @requires extension msgpack
*/
public function test3() {
$this->assertTrue(true);
}
/** テストメソッドがtestで始まってなくてもアノテーション使えば良い
* @test
*/
public function dummy() {
$this->assertTrue(true);
}
}
ってな感じ。グローバル変数に関しては前回でも書いたとおり
<?xml version="1.0" ?>
<phpunit>
<php>
<var name="data">hoge</var>
</php>
<testsuites>
<testsuite>
<directory suffix=".php">tests</directory>
</testsuite>
</testsuites>
</phpunit>