cheka.jp 超不定期で更新する写真達。お口直しにどうぞ。

JenkinsでPHPの継続的インテグレーションを体験する 自動テスト編

PHPUnitを用いた単体テストのコードをJenkinsで起動してコードカバレッジ率とテスト結果の取込を行いましょう。

Yii2からは、Codeceptionをインストールして単体テスト、機能テスト、受け入れテストを行うようです。

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のコミットをフックして起動することも可能です。
継続的インテグレーション = テストだと思うので、どんどん活用していきたい連携です。

Add a Comment

メールアドレスが公開されることはありません。