こんにちは横部です。
JaCoCoはJavaの為のコードカバレッジ取得ライブラリです。
http://www.eclemma.org/jacoco/
このライブラリを使うと、
テストでどこのコードを通ったのか数値化されるため、
テスト漏れを防ぐことができます。
私が参画しているプロジェクトではJUnitによる単体テストはJenkinsで自動化されており、Gradleでビルドされています。
その際はbuild.gradleにGradle JaCoCo Pluginを設定するだけで、
簡単にコードカバレッジの取得とカバレッジレポートの出力ができていました。
1 |
apply plugin: 'jacoco' |
しかしこのプラグインはGradle実行中のみ有効である為、
UIを操作して行う手動テストだとGradle JaCoCo Pluginが使えません。
UIを操作して行う手動テストでコードカバレッジを取得する為には、
TomcatにJaCoCo Agentを導入する必要があります。
またカバレッジレポートを出力するためには、
Jenkins上でTomcatのコードカバレッジを取得する必要があります。
そのため今回は、
UIを操作して行う手動テストでのコードカバレッジ取得と、
カバレッジレポートの出力に挑戦してみました。
JenkinsにJaCoCo Pluginの導入
JenkinsにJaCoCo Pluginを導入します。
JaCoCo Pluginによって、
カバレッジレポートが出力できるようになります。
導入方法については以下のページを参照してください。
https://wiki.jenkins-ci.org/display/JENKINS/JaCoCo+Plugin
今回行う手法はJenkins単体でコードカバレッジを取得する方法とは異なり、
Tomcatからコードカバレッジを取得します。
そのためにTomcatへJaCoCo Agentを導入する必要があります。
JaCoCo Agentの導入については次の手順で説明します。
TomcatにJaCoCo Agentの導入
TomcatにJaCoCo Agentを導入します。
まずJaCoCoのサイトから以下の手順でjacocoagent.jarを取得します。
http://www.eclemma.org/jacoco/
1 2 |
wget http://search.maven.org/remotecontent?filepath=org/jacoco/jacoco/0.7.4.201502262128/jacoco-0.7.4.201502262128.zip unzip jacoco-0.7.4.201502262128.zip |
JaCoCo PluginとJaCoCo Agentのバージョンが一致しない場合は、
コードカバレッジが正常に取得できない可能性があります。
対応バージョンについては以下のページを参照してください。
https://wiki.jenkins-ci.org/display/JENKINS/JaCoCo+Plugin#JaCoCoPlugin-ChangeLog
取得したJaCoCo Agentは以下のディレクトリに設置します。
1 |
cp ./lib/jacocoagent.jar $CATALINA_HOME/lib/jacocoagent.jar |
これでJaCoCo Agentの導入は完了しました。
Tomcatの設定
JaCoCo Agentを有効にする為にCATALINA_OPTSにjavaagentオプションを追加します。
1 |
-javaagent:$CATALINA_HOME/lib/jacocoagent.jar=destfile=$CATALINA_HOME/logs/jacoco.exec,append=true,dumponexit=true,output=file,jmx=false |
変数の設定については以下のページを参照してください。
http://www.eclemma.org/jacoco/trunk/doc/agent.html
この設定を行うことで、
JaCoCo AgentはTomcatの起動と同時にコードカバレッジの取得を開始します。
Tomcat起動中はコードカバレッジの計測を行い続け、
Tomcat停止時にjacoco.execファイルを生成します。
この際appendオプションをtrueにしていると、
jacoco.execファイルにコードカバレッジが追記される設定となるため、
再起動ごとにコードカバレッジが消されないので便利です。
Tomcat停止後にjacoco.execファイルが作成されていれば、
設定は無事完了です。
1 |
ls $CATALINA_HOME/logs/jacoco.exec |
このファイルがコードカバレッジの取得結果になります。
ただしファイルの内容はバイナリとなっており、
レポートとして見るためには次の手順でJenkinsのJaCoCo Pluginを使うことになります。
Jenkinsの設定
最後に作成されたjacoco.execファイルをJenkinsで取得してカバレッジレポートを出力します。
jacoco.execファイルをTomcatから取得するために、
今回はJenkinsの設定で「シェルの実行」を利用して取得してきます。
1 |
scp serverhost:$CATALINA_HOME/logs/jacoco.exec ./jacoco.exec |
カバレッジを取得したいclassとsourceをスレイブサーバ上に展開する設定を記載し、
「JaCoCoカバレッジレポートを記録」で展開する予定のディレクトリを記載します。
設定の詳細については以下のページを参照してください。
https://wiki.jenkins-ci.org/display/JENKINS/JaCoCo+Plugin#JaCoCoPlugin-GettingStarted
設定後ジョブを実行することで、
Tomcatのコードカバレッジを取得して、
Jenkins上でカバレッジレポートを出力することが出来ました。