JenkinsでPHPの継続的インテグレーションを体験する 自動テスト編
|PHPUnitを用いた単体テストのコードをJenkinsで起動してコードカバレッジ率とテスト結果の取込を行いましょう。
Yii2からは、Codeceptionをインストールして単体テスト、機能テスト、受け入れテストを行うようです。
せっかくなのでCodeceptionでテストを書いてJenkinsと連携させてみましょう。
テストの準備
α版のYii2だとsuggestで記述されているので、改めてインストールします。
インストール後にテストの準備を行って起動確認まで行っておきましょう。
アプリケーションディレクトリで操作して下さい
$php composer.phar require --dev "codeception/codeception: 1.8.*@dev" "codeception/specify: *" "codeception/verify: *" >Loading composer repositories with package information >Updating dependencies (including require-dev) >・・
設定反映の為にビルドする。
$vendor/bin/codecept build
テストコードのビルド後は内容に合わせてテストすることが可能です。
#単体テスト $vendor/bin/codecept run unit #機能テスト $vendor/bin/codecept run functional #受け入れテスト $vendor/bin/codecept run acceptance #テスト可能なコードを全てテスト $vendor/bin/codecept run
テストの作成
Jenkinsのジョブと連携する前に確認用のテストコードを作成します。
既存のコードに少し手を加えました。
namespace tests\unit\models; use yii\codeception\TestCase; use app\models\User; class UserTest extends TestCase { use \Codeception\Specify; protected function setUp() { parent::setUp(); // uncomment the following to load fixtures for table tbl_user //$this->loadFixtures(['tbl_user']); } public function testGetIdentify() { $this->specify('models/User.php Identifyメソッドのテスト', function () { expect('存在しないIDは検索が出来ない', User::findIdentity(999))->null(); expect('存在するIDは検索出来る', User::findIdentity(100))->notNull(); }); } }
カバレッジの設定
codeception.ymlにカバレッジの設定を追加して下さい。
coverage: enabled: true whitelist: include: - controllers/* - models/* exclude: - assets/* - commands/* - config/* - runtime/* - tests/* - vendor/* - views/* - web/* blacklist: include: ~ exclude: ~
ジョブの作成
それではテストをjenkinsに連携させましょう。
今までと同様にジョブの登録から行います。
新規登録
ジョブ名をPHPUnitCodeceptで新規登録します。
タイプは「フリースタイル・プロジェクトのビルド」を選択して下さい。
ビルド手順の追加でcodeceptを起動するスクリプトを追加します。
cd ${WORKSPACE} && sudo vendor/bin/codecept run --xml --coverage unit || id
ビルド完了後に./tests/_log/へ結果が出力されるのでテスト結果とカバレッジを集計します。
tests/_log/report.xml tests/_log/coverage.xml
設定後はこんな感じです。
ジョブの実行
設定が完了したらジョブを実行してみましょう。
ジョブのメニューからビルドを実行して下さい。
実行中のプログレッシバーが表示されます。
しばらく待ちましょう。
ビルドが正常に完了すると結果の参照が可能になります。
手動のビルドではなくsvnやgitのコミットをフックして起動することも可能です。
継続的インテグレーション = テストだと思うので、どんどん活用していきたい連携です。