- Tomcatで稼働しているWebアプリケーションのカバレッジを取得しレポートを作成するチュートリアルです。
- 大まかな流れは下記となります
- TomcatをJacocoのAgent付きで起動
- アプリケーション操作
- Tomcat停止してカバレッジデータダンプ取得
- Maven/Antでレポート作成
- Maven+Jettyを使った、Jetty起動>テスト>Jetty終了>カバレッジレポート作成の一連の自動化も可能ですが、ここでは触れません
###環境
- OS:Windows7
- Tomcat8
- jacoco-0.7.5.201505241946.zip
- http://www.eclemma.org/jacoco/ より取得
- C:\apps\jacoco-0.7.5.201505241946 にインストールしたものとします
- ※以降Win環境での記載とします。Linuxの場合は各種パスを読み替えて下さい
前提
- 対象のアプリケーションは、MavenまたはAntでWarビルドできる環境にしておくこと
- TomcatへWarをデプロイして置くこと
TomcatをAgent付きで起動
- apache-tomcat-8.0.21\bin\catalina.bat に下記追記
catalina.bat
set "JAVA_OPTS=-javaagent:C:\apps\jacoco-0.7.5.201505241946\lib\jacocoagent.jar=destfile=c:\temp\jacoco.exec,includes=jp/co/**,append=false"
- 下記定義しています
- カバレッジデータの出力先はc:\temp\jacoco.exec
- jp.co 以下のパッケージのみカバレッジ取得
- jacoco.execはTomcat起動時に常に上書き
- その他のオプションは、http://www.eclemma.org/jacoco/trunk/doc/agent.html を参照
レポート作成:Maven版
- jacoco-maven-plugin を利用するようにpom.xml のbuild>plugins へ下記記載追加
- dataFileでカバレッジダンプファイルを指定
- その他のパラメータは http://www.eclemma.org/jacoco/trunk/doc/report-mojo.html 参照
pom.xml
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.5.201505241946</version>
<configuration>
<dataFile>c:/temp/jacoco.exec</dataFile>
</configuration>
</plugin>
- 下記コマンドで {projectdir}/target/target/site/jacoco 以下にリポートが作成されます
- ※jacoco:report自体はコンパイルまでしないのでコンパイル指定してます。
mvn compile jacoco:report
レポート作成:Ant版
-
Antの場合もmaven同様にjacoco.execを指定してレポートを作成します
-
build.xmlのprojectタグへjacocoタスクのnamespace追加
build.xml
<project xmlns:jacoco="antlib:org.jacoco.ant" name="HogeHoge">
- build.xmlへjacocoタスク定義を追加
build.xml
<taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
<classpath path="C:/apps/jacoco-0.7.5.201505241946/lib/jacocoant.jar" />
</taskdef>
- build.xmlへレポート作成targetを追加
- propertyは適時調整して下さい
build.xml
<property name="src.dir" location="./src/main/java" />
<property name="result.dir" location="./target" />
<property name="result.classes.dir" location="${result.dir}/classes" />
<property name="result.report.dir" location="${result.dir}/site/jacoco" />
<property name="result.exec.file" location="c:/temp/jacoco.exec" />
<target name="jacoco-report">
<jacoco:report>
<executiondata>
<file file="${result.exec.file}" />
</executiondata>
<structure name="JaCoCo Ant Example">
<classfiles>
<fileset dir="${result.classes.dir}" />
</classfiles>
<sourcefiles encoding="UTF-8">
<fileset dir="${src.dir}" />
</sourcefiles>
</structure>
<html destdir="${result.report.dir}" />
<csv destfile="${result.report.dir}/report.csv" />
<xml destfile="${result.report.dir}/report.xml" />
</jacoco:report>
</target>
- 下記antコマンでレポートが作成されます
ant compile jacoco-report
注意点
- JacocoのVerはAgent側とレポート作成側で同一にしましょう。Verが異なると解析に失敗します
- jacoco.execはメモリ上にバッファリングされているので、Tomcatプロセス終了時にFlushされます。画面操作してもjacoco.execが0バイトになってても慌てないように