web-dev-qa-db-ja.com

Jacoco:外部テストのコードカバレッジを見つける

最近、EclipseでEclEmmaプラグインを使用して、アプリケーション内のJUnitのコードカバレッジを見つけましたが、うまく機能しました。

次のステップでは、アプリケーションで外部から呼び出されるエンドツーエンドテスト/機能テストのコードカバレッジを見つけられるようにしたいと思います(これらは別のサーバーにあります)。

基本的に、アプリケーションをjarとしてパッケージ化し(mavenを使用)、サーバーにデプロイします。そして、この場所で機能テストをトリガーできます。

この場合、コードカバレッジを見つける方法はありますか?

私の理解コードカバレッジツールが(生の言語で)どのように機能するかは、クラスをロードし、ヒットしたコードの部分に基づいてレポートを生成することです。したがって、この理解によれば、テストコードにアクセスする必要はありません。どういうわけかplugコードカバレッジツールをアプリケーションjarに挿入するだけで、このjar内のコードが呼び出されるたびに、レポートが更新されます。 私の理解は正しいですか?

注:他のツールで可能な場合は、他のコードカバレッジツールを使用できます。

9
tryingToLearn

エージェントをJavaコマンドラインに追加することにより、実行時にJaCoCoエージェントによってインストルメント化されたサーバー上でコードを実行できます。たとえば、プロセスが現在次のコマンドで起動されている場合:

Java -jar myApp.jar

あなたはそれをに変更することができます

Java -jar myApp.jar -javaagent:/some/path/jacocoagent.jar

デフォルトでは、VMが終了すると、カバレッジデータがファイルjacoco.execに書き込まれますが、オプションでこれをオーバーライドして、TCP/IP経由でカバレッジデータを取得できます。を参照してください。 JaCoCoエージェントのドキュメント

次を使用して、これをレポート(HTMLなど)にフォーマットできます。

Java -jar jacococli.jar report jacoco.exec [options]

オプションについては、 JaCoCo CLIドキュメント を参照してください。

...または、EclEmmaを使用して出力を分析できます。

エージェントを使用できない本当の理由がある場合は、最後の手段として、instrumentjacocococliコマンドを使用して、クラスファイルをインストルメント化されたクラスファイルに静的に変換できます。これについては、 JaCoCo'Offline Instrumentation 'ドキュメント を参照してください。

JaCoCoを使用する最も基本的な方法は、エージェントを直接呼び出してjacococli.jarを使用することです。 Mavenを使用しているため、JaCoCoMavenプラグインを使用して同じ効果の多くを取得できます。

11
slim

これは私がジェンキンスパイプラインのMavenでそれをした方法です

mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent test -Dmaven.test.failure.ignore=true 

これにより、コードカバレッジデータを持つtarget/jacoco.execが作成されます。

明らかに出力を解釈することはできませんが、SonarQubeのようなツールやプラグインはそれを行うことができます(私の場合はsonarqubeを使用しました)

ただし、以下を使用して、target/site/jacoco/index.htmltarget/site/jacoco/jacoco.csvにあるhtml/csv形式に生成できます。

mvn org.jacoco:jacoco-maven-plugin:reportまたは

Java -jar jacococli.jar report jacoco.exec [options]

または、これを参照することもできます tutorial これはすべてpom.xmlで行いました

1
codereal