LoginSignup
22
19

More than 5 years have passed since last update.

Tomcat+Jacocoでカバレッジ取得してレポートを作成するチュートリアル

Posted at
  • Tomcatで稼働しているWebアプリケーションのカバレッジを取得しレポートを作成するチュートリアルです。
  • 大まかな流れは下記となります
    • TomcatをJacocoのAgent付きで起動
    • アプリケーション操作
    • Tomcat停止してカバレッジデータダンプ取得
    • Maven/Antでレポート作成
  • Maven+Jettyを使った、Jetty起動>テスト>Jetty終了>カバレッジレポート作成の一連の自動化も可能ですが、ここでは触れません

環境

  • OS:Windows7
  • Tomcat8
  • jacoco-0.7.5.201505241946.zip
  • ※以降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版

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バイトになってても慌てないように

参照

22
19
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
19