PHPUnit+Seleniumと雑多メモ

2013-01-07T00:00:00+00:00 PHP PHPUnit

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>

PHPUnitでテスト内で発生したアサーションをテストする PHPUnit+DbUnit