JazzとWebと無印と

ゆっくり豊かに暮らす

PHPUnitでテストケースを書いてSelenumで自動テスト

自動テストってめんどくさそうと思っていた

自動テストで品質向上、テストを便利にしたい。

ずっと考えていたが、踏み出せていなかった。

 

それは自動テスト = Unitテストをガチガチに組む必要があるという思い込み。

テストコードのメンテが手間、テストコード書くのにも時間がかかる。

メソッドレベルの IN - OUTまでテストコード書いて、結局 時間対効果どうなの?

などなど、ポジティブになれていなかったため。

 

はじめから全部でなく、まずはユーザの振る舞い、画面の動きで担保できれば良い。

エンドツーエンドってやつですかね。

それも部分的でもいいから小さく始めれば良いという思考が生まれてきたので、

SelenuimによるUIテストを学んでみようと思う。

 

MACで環境構築

composerのinstall

curl -sS https://getcomposer.org/installer | php

 

composer.jsonを作成し、以下を記載

{

  "require": {

    "phpunit/phpunit": "3.7.*",

    "phpunit/phpunit-selenium": "1.3.*"

  }

}

 

phpunitとそこからseleniumを動かすpackageをinstall (composer.pharは環境変数に追加)

 composer.phar install

 

selenuim serverをDL( Selenium standalone server)

http://docs.seleniumhq.org/download/ 

 

テストするブラウザのdriverをinstallする。ここではChrome

以下からmac用をダウンロード。

http://chromedriver.storage.googleapis.com/index.html?path=2.20/

 

解凍した「chromedriver」をselenium-serverのjarと同じディレクトリに設置

 

テスト実行

selenium serverを起動 

デフォルトでlocalhost:4444で起動する

java -jar selenium-server-standalone-2.48.2.jar

 

PHPUnitでSampleテストケースを作成 

GoogleのTitleを確認するケース

class WebTest extends PHPUnit_Extensions_Selenium2TestCase {

    public function setUp() {

        $this->setHost('localhost');

        $this->setPort(4444);

        $this->setBrowser('chrome')

        $this->setBrowserUrl('http://google.co.jp');

    }   

 

    public function testTitle() {

        $this->url('http://google.co.jp');

        $this->assertEquals('hoge', $this->title());

        $this->assertEquals('Google', $this->title());

    }   

}

 

 テスト実行

./vendor/bin/phpunit Sample.php

これでchrome自動起動してTitleを確認してくれる。

 

実行結果

PHPUnit 3.7.38 by Sebastian Bergmann.

 

F

 

Time: 8.71 seconds, Memory: 2.75Mb

 

There was 1 failure:

 

1) WebTest::testTitle

Failed asserting that two strings are equal.

--- Expected

+++ Actual

@@ @@

-'hoge'

+'Google'

 

/XXX/Sample.php:12

 

FAILURES!

Tests: 1, Assertions: 1, Failures: 1.

想定通り、1件成功、1件NGとなった。 

 

とりあえず、Sampleは動いた。

今後はいろんなパターンや、結果を見やすくする方法を学んでいこう。