ジェンキンス+セレニウム+phpunitを試してみる

VB Tips And Sample(HOME)(VB.NET Sample インデックス)

ジェンキンス+セレニウム+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はアウトだったか!
面倒しいのでこのまま進む


ファイヤーフォックスにアドオンを追加。
phpunit
php unitというやつです。
要するに、phpunitというやつが、phpを実行し、テストするというわけ。
テストするのに、テストツールのテストが増えるのでは?という心配が・・・・
入れたら、山・川のテストを、test.phpファイルとして出力します。
作ってくれた人に感謝です。
phpunitで出力



[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
を実行すると、、、
画面にファイヤーフォックスが実行され
phpunit実行例
コマンドは下のようになり成功。
[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接続か?



VB Tips And Sample(HOME)>(VB.NET Sample インデックス)