HudsonでのJavaコードカバレッジ
-
07-07-2019 - |
質問
私はいくつかのプロジェクトをアリのビルドからMavenのプロジェクトに移行しています。ビルドサーバーはであり、今後もハドソンです。
テストのため、coberturaでハドソンのコードカバレッジを記録するのに問題があります。 2回実行して記録した問題。
プロジェクトはマルチモジュールであり、必須ではありませんが、コードカバレッジデータの集約された出力があると便利です。
全体として、私が探している解決策は次のとおりです。
- すべてのモジュールに対して自動テストを実行し、結果を記録します一度;
- 個々のモジュールコードカバレッジを Hudsonで表示;
- すべてのモジュールではなく、プロジェクト全体に対して一度だけ簡単に設定できます。
ソリューションは、Cobertura、Emma、またはその他のJavaコードカバレッジツールに基づいています。
更新:テストをEmmaで実行しても結果が複製され、 merge
機能がないため、マルチモジュールビルドでは実際には使用できません。
解決
Sonar は、Hudsonと簡単に統合できる非常に優れたツールです。モジュールプロジェクト。試してみてください
代替テキストhttp://sonar.codehaus.org/ wp-content / uploads / 2009/08 / dashboard.png
他のヒント
少しハックですが、私が使用しているアプローチは、 Maven coberturaプラグインの修正版(リポジトリから入手可能)。これはcobertura:generate-reportターゲットを提供するため、テストを実行する前後にそれぞれcobertura:instrumentとcobertura:generate-reportをライフサイクルに挿入できます。これにより、テストの実行/記録を重複させることなく、必要なカバレッジデータを取得できます。
根本的な問題は、私が実行したすべての非クローバーMavenカバレッジプラグインが、Mavenライフサイクルのメインテスト実行とは別にカバレッジでテストを実行するという考えに基づいて構築されていることです。これにより、明らかに2セットのテストが実行されます。フリースタイルプロジェクトを使用している場合、記録されるのは1セットのテストのみです(2回のテスト実行でもテスト出力のコピーは1つしかないため)が、Mavenプロジェクトタイプは実際にはMaven mojoの実行をインターセプトし、フリースタイルプロジェクトのようにビルドの最後に一度にすべてではなく、テストの実行時にテストの出力/結果を記録します。これには多くの利点がありますが、2回実行される1つのテストが2つのテストとしてカウントされるというかなり明白な欠点もあります。
それは、インストルメント化されていないコードとインストルメント化されたコードの両方に対してテストを実行するための強い議論を見てきましたが、Maven / Hudsonの問題だけでなく、 45分かかるテストがある場合、同じ結果を生成するために2回実行するのは率直に言って馬鹿げているようです。
ロバート、
私もこの問題を抱えており、Maven2プロジェクトではなくフリースタイルプロジェクトとしてプロジェクトをセットアップした場合、Hudsonが二重報告しないことがわかりました。あなたはmaven2プロジェクトを持つことの良さをいくらか失いますが、私たちにとって、それは私たちがしなければならなかった取引でした。
ジェフ
フリースタイルプロジェクトを使用しており、この問題は発生していません。したがって、示されているように、これが問題の原因である可能性があります。
マージ機能を提供するために、独自のアーティファクトリポジトリを作成しました(Mavenは使用していません)。各ビルドの最後に、cobertura.serファイルをネットワーク共有にコピーし、プロセス内で名前を変更します。すべてのcoberturaファイルとソースコードファイル(ネットワーク共有にコピーされた別のビルドアーティファクト)をローカルビルドディレクトリにコピーし、Coberturaレポートを生成する統合ビュージョブがあります。
Hudson内に標準のアーティファクトリポジトリがないことは少しイライラしますが、著者が通常これらのニーズにMavenを使用することは理にかなっています。ビルドプロセスは複数のサーバーで実行されるため、他のジョブディレクトリへの相対パスを使用することはできません。
注:他のメトリックに対しても同じことを行います:テスト結果、JavaNCSS、ect。正しいツールまたはカスタムコードを使用して参加しました。
従来のビルドアーティファクトに同じリポジトリを使用します:DLL、JAR、インストールスクリプト。
優れたGUIを備えたオーバーヘッドの非常に低いツールについては、SD Javaテストカバレッジを参照してください。 「2回実行」を理解しているかどうかわかりません。問題はありますが、SDツールで(同じ決定論的)テストを2回実行した場合、同じtest等の同じテストカバレッジデータが得られます。 テストが非決定的である場合、2つの異なるテスト実行を取得しますが、これらのツールは複数の実行の結果を単一の全体的な要約に簡単にマージします。
また、非常に大規模なアプリケーションを処理し、複数のスレッド化されたアプリケーションを非常にうまく処理します(小さなタイミングの破片は、理論的に答えをわずかに不正確にする可能性がありますが、これは単に問題ではありません)。
アトラシアンのクローバーを検討しましたか?
maven-clover2-pluginには新しい目標があります: clover2:setup は、ライフサイクルをフォークしたり、テストを2回実行したりせずに、単にテストをインストルメントします。
次のようにハドソンで実行する目標を定義します。
mvn clover2:setup verify clover2:aggregate clover2:clover
maven-clover2-pluginは30日間無料で試用できます。