ジェンキンス+セレニウム+phpunitを試してみるジェンキンス+セレニウム+phpunitを試してみる前回は、~.htmlで作ったファイルでテストしました。 今回は、~.phpで作ったファイルでテスト。 PHPUnitでPHPをキックする例。 何が違うのか? さっぱりわからん。 なんでこんな面倒しい事をするのだろう? いやいや、テストって面倒しいですよね。 それを自動でやってもらうので、多少面倒しいとしても・・・・ いやー、ウィンドウズに慣れた管理人にとっては、インストール一発で済むのが大好きなのだが・・・・。 しかし、公開環境が今やLinuxは当たり前。 ということで、いやいややってみる。 まずは、PHPUnitを入れる。 PHPUnitは、参考サイトのまま、入れる。 https://phpunit.de/manual/current/ja/installation.html [root@centos7_1 ~]# wget https://phar.phpunit.de/phpunit.phar --2017-01-09 09:01:02-- https://phar.phpunit.de/phpunit.phar phar.phpunit.de (phar.phpunit.de) をDNSに問いあわせています... 188.94.27.25 phar.phpunit.de (phar.phpunit.de)|188.94.27.25|:443 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 302 Moved Temporarily 場所: https://phar.phpunit.de/phpunit-5.7.5.phar [続く] --2017-01-09 09:01:04-- https://phar.phpunit.de/phpunit-5.7.5.phar phar.phpunit.de:443 への接続を再利用します。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 3028348 (2.9M) [application/octet-stream] `phpunit.phar' に保存中 100%[==================================================================================================>] 3,028,348 524KB/s 時間 7.5s 2017-01-09 09:01:12 (393 KB/s) - `phpunit.phar' へ保存完了 [3028348/3028348] [root@centos7_1 ~]# chmod +x phpunit.phar [root@centos7_1 ~]# mv phpunit.phar /usr/local/bin/phpunit [root@centos7_1 ~]# phpunit --version Cannot load Xdebug - it was already loaded PHPUnit 5.7.5 by Sebastian Bergmann and contributors. お次は、CakePHP3にセレニウムをComposerで入れなきゃいけない。 アー面倒しい。 /var/www/html/hello/の composer.jsonを開き "phpunit/phpunit": "3.7.*", "phpunit/phpunit-selenium": "1.3.*" を追記。 "require": { "php": ">=5.5.9", "cakephp/cakephp": "3.3.*", "mobiledetect/mobiledetectlib": "2.*", "cakephp/migrations": "~1.0", "cakephp/plugin-installer": "*", "phpunit/phpunit": "3.7.*", "phpunit/phpunit-selenium": "1.3.*" }, コマンド実行 [root@centos7_1 hello]# php /root/composer.phar update Cannot load Xdebug - it was already loaded Do not run Composer as root/super user! See https://getcomposer.org/root for details Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 8 installs, 8 updates, 0 removals - Updating cakephp/chronos (1.0.3 => 1.0.4) Downloading: 100% - Updating cakephp/debug_kit (3.5.0 => 3.5.1) Downloading: 100% - Updating symfony/debug (v3.2.1 => v3.2.2) Downloading: 100% - Updating symfony/console (v3.2.1 => v3.2.2) Downloading: 100% - Updating symfony/var-dumper (v3.2.1 => v3.2.2) Downloading: 100% - Updating symfony/yaml (v3.2.1 => v2.8.16) Downloading: 100% - Updating symfony/filesystem (v3.2.1 => v3.2.2) Downloading: 100% - Updating symfony/config (v3.2.1 => v3.2.2) Downloading: 100% - Installing phpunit/php-text-template (1.2.1) Downloading: 100% - Installing phpunit/phpunit-mock-objects (1.2.3) Downloading: 100% - Installing phpunit/php-timer (1.0.8) Downloading: 100% - Installing phpunit/php-file-iterator (1.4.2) Downloading: 100% - Installing phpunit/php-token-stream (1.2.2) Downloading: 100% - Installing phpunit/php-code-coverage (1.2.18) Downloading: 100% - Installing phpunit/phpunit (3.7.38) Downloading: 100% - Installing phpunit/phpunit-selenium (1.3.3) Downloading: 100% phpunit/phpunit-mock-objects suggests installing ext-soap (*) phpunit/phpunit suggests installing phpunit/php-invoker (~1.1) Writing lock file Generating autoload files > Cake\Composer\Installer\PluginInstaller::postAutoloadDump [root@centos7_1 hello]# ルートで実行しているので、パーミッションを変えておきます。 [root@centos7_1 hello]# cd .. [root@centos7_1 html]# chown -R nginx:nginx hello [root@centos7_1 html]# chmod -R 777 hello cakeでエラーになったので・・・app.phpを変更。デバッグキット不使用に。 'debug' => filter_var(env('DEBUG', false), FILTER_VALIDATE_BOOLEAN), なんだかな~。 あ、1.3はアウトだったか! 面倒しいのでこのまま進む ファイヤーフォックスにアドオンを追加。 php unitというやつです。 要するに、phpunitというやつが、phpを実行し、テストするというわけ。 テストするのに、テストツールのテストが増えるのでは?という心配が・・・・ 入れたら、山・川のテストを、test.phpファイルとして出力します。 作ってくれた人に感謝です。 [test.php] <?php require_once '/var/www/html/hello/vendor/autoload.php'; //追加 class Example extends PHPUnit_Extensions_SeleniumTestCase { protected function setUp() { $this->setBrowser("*firefox"); $this->setBrowserUrl("http://192.168.11.205/"); } public function testMyTestCase() { $this->open("/hello/test/"); $this->type("name=t1", ""); $this->type("name=t1", "山"); $this->click("name=b1"); $this->waitForPageToLoad("30000"); $this->assertEquals("川", $this->getValue("name=t1")); } } ?> このファイルを、/var/www/html/hello/tests/TestCase の下に、test.phpとして置いておき、 ジェンキンスで、新しプロジェクトを作成。 hello_test2 とします。 ビルドしてワークスペースを作って 、 /var/www/html/hello/testsフォルダを、 /var/lib/jenkins/workspace/hello_test2/ 直下にコピー。 設定を開き、 「ビルド」ー「シェルの実行」ー「シェルスクリプト」に 「phpunit /var/lib/jenkins/workspace/hello_test2/tests/TestCase/test.php」 を記入。 「保存」。 実行してみる。 スキップされる。 [root@centos7_1 ~]# phpunit /var/www/html/hello/tests/TestCase/test.php Cannot load Xdebug - it was already loaded PHP Warning: Declaration of PHPUnit_Extensions_SeleniumTestCase::onNotSuccessfulTest(Exception $e) should be compatible with PHPUnit_Framework_TestCase::onNotSuccessfulTest($e) in /var/www/html/hello/vendor/phpunit/phpunit-selenium/PHPUnit/Extensions/SeleniumTestCase.php on line 1208 PHP Stack trace: PHP 1. {main}() /usr/local/bin/phpunit:0 PHP 2. PHPUnit_TextUI_Command::main() /usr/local/bin/phpunit:581 PHP 3. PHPUnit_TextUI_Command->run() phar:///usr/local/bin/phpunit/phpunit/TextUI/Command.php:118 PHP 4. PHPUnit_Runner_BaseTestRunner->getTest() phar:///usr/local/bin/phpunit/phpunit/TextUI/Command.php:140 PHP 5. PHPUnit_Runner_BaseTestRunner->loadSuiteClass() phar:///usr/local/bin/phpunit/phpunit/Runner/BaseTestRunner.php:65 PHP 6. PHPUnit_Runner_StandardTestSuiteLoader->load() phar:///usr/local/bin/phpunit/phpunit/Runner/BaseTestRunner.php:124 PHP 7. PHPUnit_Util_Fileloader::checkAndLoad() phar:///usr/local/bin/phpunit/phpunit/Runner/StandardTestSuiteLoader.php:39 PHP 8. PHPUnit_Util_Fileloader::load() phar:///usr/local/bin/phpunit/phpunit/Util/Fileloader.php:38 PHP 9. include_once() phar:///usr/local/bin/phpunit/phpunit/Util/Fileloader.php:56 PHP 10. spl_autoload_call() /var/www/html/hello/tests/TestCase/test.php:4 PHP 11. Composer\Autoload\ClassLoader->loadClass() /var/www/html/hello/tests/TestCase/test.php:4 PHP 12. Composer\Autoload\includeFile() /var/www/html/hello/vendor/composer/ClassLoader.php:322 PHPUnit 5.7.5 by Sebastian Bergmann and contributors. S 1 / 1 (100%) Time: 1.4 seconds, Memory: 12.00MB OK, but incomplete, skipped, or risky tests! Tests: 1, Assertions: 0, Skipped: 1. だいたいスキップされる原因は、 セレニウムサーバが動いていないためらしい 別端末を開き、下記コマンドを実行。 [root@centos7_1 ~]# java -jar /var/lib/jenkins/selenium-server-standalone-2.53.1.jar 13:31:56.056 INFO - Launching a standalone Selenium Server 13:31:57.115 INFO - Java: Oracle Corporation 25.111-b15 13:31:57.115 INFO - OS: Linux 3.10.0-514.2.2.el7.x86_64 amd64 13:31:57.821 INFO - v2.53.1, with Core v2.53.1. Built from revision a36b8b1 13:31:59.945 INFO - Driver provider org.openqa.selenium.ie.InternetExplorerDriver registration is skipped: registration capabilities Capabilities [{ensureCleanSession=true, browserName=internet explorer, version=, platform=WINDOWS}] does not match the current platform LINUX 13:31:59.979 INFO - Driver provider org.openqa.selenium.edge.EdgeDriver registration is skipped: registration capabilities Capabilities [{browserName=MicrosoftEdge, version=, platform=WINDOWS}] does not match the current platform LINUX 13:31:59.981 INFO - Driver class not found: com.opera.core.systems.OperaDriver 13:31:59.984 INFO - Driver provider com.opera.core.systems.OperaDriver is not registered 13:31:59.987 INFO - Driver provider org.openqa.selenium.safari.SafariDriver registration is skipped: registration capabilities Capabilities [{browserName=safari, version=, platform=MAC}] does not match the current platform LINUX 13:31:59.988 INFO - Driver class not found: org.openqa.selenium.htmlunit.HtmlUnitDriver 13:31:59.988 INFO - Driver provider org.openqa.selenium.htmlunit.HtmlUnitDriver is not registered 13:32:04.294 INFO - RemoteWebDriver instances should connect to: http://127.0.0.1:4444/wd/hub 13:32:04.295 INFO - Selenium Server is up and running この状態になってから、 再度、 [root@centos7_1 ~]# phpunit /var/www/html/hello/tests/TestCase/test.php を実行すると、、、 画面にファイヤーフォックスが実行され コマンドは下のようになり成功。 [root@centos7_1 ~]# phpunit /var/www/html/hello/tests/TestCase/test.php Cannot load Xdebug - it was already loaded PHP Warning: Declaration of PHPUnit_Extensions_SeleniumTestCase::onNotSuccessfulTest(Exception $e) should be compatible with PHPUnit_Framework_TestCase::onNotSuccessfulTest($e) in /var/www/html/hello/vendor/phpunit/phpunit-selenium/PHPUnit/Extensions/SeleniumTestCase.php on line 1208 PHP Stack trace: PHP 1. {main}() /usr/local/bin/phpunit:0 PHP 2. PHPUnit_TextUI_Command::main() /usr/local/bin/phpunit:581 PHP 3. PHPUnit_TextUI_Command->run() phar:///usr/local/bin/phpunit/phpunit/TextUI/Command.php:118 PHP 4. PHPUnit_Runner_BaseTestRunner->getTest() phar:///usr/local/bin/phpunit/phpunit/TextUI/Command.php:140 PHP 5. PHPUnit_Runner_BaseTestRunner->loadSuiteClass() phar:///usr/local/bin/phpunit/phpunit/Runner/BaseTestRunner.php:65 PHP 6. PHPUnit_Runner_StandardTestSuiteLoader->load() phar:///usr/local/bin/phpunit/phpunit/Runner/BaseTestRunner.php:124 PHP 7. PHPUnit_Util_Fileloader::checkAndLoad() phar:///usr/local/bin/phpunit/phpunit/Runner/StandardTestSuiteLoader.php:39 PHP 8. PHPUnit_Util_Fileloader::load() phar:///usr/local/bin/phpunit/phpunit/Util/Fileloader.php:38 PHP 9. include_once() phar:///usr/local/bin/phpunit/phpunit/Util/Fileloader.php:56 PHP 10. spl_autoload_call() /var/www/html/hello/tests/TestCase/test.php:4 PHP 11. Composer\Autoload\ClassLoader->loadClass() /var/www/html/hello/tests/TestCase/test.php:4 PHP 12. Composer\Autoload\includeFile() /var/www/html/hello/vendor/composer/ClassLoader.php:322 PHPUnit 5.7.5 by Sebastian Bergmann and contributors. . 1 / 1 (100%) Time: 39.97 seconds, Memory: 12.00MB OK (1 test, 1 assertion) ジェンキンスでhello_test2プロジェクトも実行してみると 成功コンソール出力 ユーザーadminが実行 ビルドします。 ワークスペース: /var/lib/jenkins/workspace/hello_test2 [hello_test2] $ /bin/sh -xe /tmp/hudson588831793481677346.sh + phpunit /var/lib/jenkins/workspace/hello_test2/tests/TestCase/test.php Cannot load Xdebug - it was already loaded PHP Warning: Declaration of PHPUnit_Extensions_SeleniumTestCase::onNotSuccessfulTest(Exception $e) should be compatible with PHPUnit_Framework_TestCase::onNotSuccessfulTest($e) in /var/www/html/hello/vendor/phpunit/phpunit-selenium/PHPUnit/Extensions/SeleniumTestCase.php on line 1208 PHP Stack trace: PHP 1. {main}() /usr/local/bin/phpunit:0 PHP 2. PHPUnit_TextUI_Command::main() /usr/local/bin/phpunit:581 PHP 3. PHPUnit_TextUI_Command->run() phar:///usr/local/bin/phpunit/phpunit/TextUI/Command.php:118 PHP 4. PHPUnit_Runner_BaseTestRunner->getTest() phar:///usr/local/bin/phpunit/phpunit/TextUI/Command.php:140 PHP 5. PHPUnit_Runner_BaseTestRunner->loadSuiteClass() phar:///usr/local/bin/phpunit/phpunit/Runner/BaseTestRunner.php:65 PHP 6. PHPUnit_Runner_StandardTestSuiteLoader->load() phar:///usr/local/bin/phpunit/phpunit/Runner/BaseTestRunner.php:124 PHP 7. PHPUnit_Util_Fileloader::checkAndLoad() phar:///usr/local/bin/phpunit/phpunit/Runner/StandardTestSuiteLoader.php:39 PHP 8. PHPUnit_Util_Fileloader::load() phar:///usr/local/bin/phpunit/phpunit/Util/Fileloader.php:38 PHP 9. include_once() phar:///usr/local/bin/phpunit/phpunit/Util/Fileloader.php:56 PHP 10. spl_autoload_call() /var/lib/jenkins/workspace/hello_test2/tests/TestCase/test.php:4 PHP 11. Composer\Autoload\ClassLoader->loadClass() /var/lib/jenkins/workspace/hello_test2/tests/TestCase/test.php:4 PHP 12. Composer\Autoload\includeFile() /var/www/html/hello/vendor/composer/ClassLoader.php:322 PHPUnit 5.7.5 by Sebastian Bergmann and contributors. . 1 / 1 (100%) Time: 13.49 seconds, Memory: 12.00MB OK (1 test, 1 assertion) Finished: SUCCESS 以上で完了。 前回のhtmlスィートのテストの方が感じいいですね。 phpunitを使わない分2ステップ手間が省けるので楽だと思う。 それに、動かすプログラム多いほど遅くなるはず(実際に時間を測ったわけではないけれど)。 以上でテストの方法は完了。 Testing_Selenium で出力したものはうまくいかず、エラーになった。 テストする環境をテストするなんて!? 次はcakephpのDB接続か? |