PHPUnitでテストケースを書いてSelenumで自動テスト
自動テストってめんどくさそうと思っていた
自動テストで品質向上、テストを便利にしたい。
ずっと考えていたが、踏み出せていなかった。
それは自動テスト = Unitテストをガチガチに組む必要があるという思い込み。
テストコードのメンテが手間、テストコード書くのにも時間がかかる。
メソッドレベルの IN - OUTまでテストコード書いて、結局 時間対効果どうなの?
などなど、ポジティブになれていなかったため。
はじめから全部でなく、まずはユーザの振る舞い、画面の動きで担保できれば良い。
エンドツーエンドってやつですかね。
それも部分的でもいいから小さく始めれば良いという思考が生まれてきたので、
SelenuimによるUIテストを学んでみようと思う。
MACで環境構築
composerのinstall
composer.jsonを作成し、以下を記載
{
"require": {
"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で起動する
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());
}
}
テスト実行
実行結果
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は動いた。
今後はいろんなパターンや、結果を見やすくする方法を学んでいこう。