このセクションの内容
はじめに
実行中の Web アプリケーション サーバーで手動または自動での機能テストを実行し、カバレッジ データをモニターおよび収集できます。カバレッジ データおよびテスト結果を DTP サーバーにレポートし、データをマージして関連付けることもできます。アプリケーション カバレッジ情報を DTP のカバレッジ エクスプローラー (詳細は DTP ユーザーズ ガイドの「カバレッジ エクスプローラー」を参照) に表示し、アプリケーションがどの程度テストされたかや、テストの品質を知ることができます。
前提条件
カバレッジを収集するには、以下のコンポーネントが必要です。
- Java JDK 1.8
- Apache Maven、Gradle、または Ant ビルド システム
Java JDK 8 でのバイトコードの改行の計算方法は、それより前のバージョンの Java と異なります。そのため、カバレッジの結果が変わる場合があります。
ソース管理システムを使用する場合、適切にソース管理システムを設定します。「ソース管理システムの設定」を参照してください。
プロセスの概要
Jtest には、カバレッジ エージェントというコンポーネントが付属しています。カバレッジ エージェントは、テスト対象アプリケーション (AUT) にアタッチされ、AUT の実行されたコードをモニターします。AUT にカバレッジ エージェントをアタッチすると、REST API が公開され、テストおよびテスト セッションの開始および終了をマークできるようになります。
カバーされるコード行に関するメタデータ (静的カバレッジ データ) は、アプリケーションのビルド プロセスの一環として特別なテスト コンフィギュレーションを実行することによって収集されます。テスト実行時には、カバレッジ エージェントとのやりとりが動的カバレッジ マップに書き込まれます。このマップには、実行されたコード行を示すマーカーが記録されます。
Jtest は、この動的カバレッジ マップと静的カバレッジ データを処理します。カバレッジ情報を保存した coverage.xml が生成され、DTP に送信されます。DTP は、カバレッジ データを受信すると、カバレッジ イメージにロードします。カバレッジ イメージは、同じビルド ID を持つ複数の実行のカバレッジ データを集約することを可能する特別なタグです。カバレッジ イメージにより、カバレッジ情報と特定のテストを関連付けることが可能になります。
テスト実行ツールの結果 (SOAtest のテスト、手動テストなど) も report.xml という形で DTP に送信されます。カバレッジ データ ファイルとレポートのビルド ID が一致すると、DTP はそれらのデータを関連付け、カバレッジ情報に表示します。
カバレッジ収集のためのテスト対象アプリケーション (AUT) の構成
AUT の準備には、以下の手順が含まれます。
- 静的カバレッジ ファイルを生成します。静的カバレッジ ファイルには、ユーザー クラス、メソッド、行などの情報が記録されます。詳細は「静的カバレッジ ファイルの生成」で説明されています。
- AUT にカバレッジ エージェントをアタッチします。「Attaching the Coverage Agent to the AUT」を参照してください。
- カバレッジ エージェントには、ファイルを出力したり、スコープを決定するためのデフォルトの設定が含まれていますが、アプリケーション カバレッジの目的に合わせて構成ファイルのプロパティを設定できます。詳細については「Configuring the Coverage Agent」を参照してください。
静的カバレッジ ファイルの生成
静的カバレッジ ファイルを含むパッケージは、ビルド プロセス中に Jtest Maven、Gradle または Ant プラグインによって生成されます。カバレッジとAUTのソース コードが正しく照合されるよう、AUT のビルドに使用したのと同じビルド システムと Java のバージョンを使用してパッケージを生成してください。
静的カバレッジ ファイルは、ソース コードがあるビルド マシン上で生成される必要があります。生成された静的カバレッジ ファイルは、コードが変更されるまで使用できます。
静的カバレッジ ファイルを含むパッケージを生成するには、AUT のメイン ディレクトリで、次のコマンドを実行します。
Maven
mvn package jtest:monitor
Gradle
gradle assemble jtest-monitor -I [INSTALL]/integration/gradle/init.gradle
Ant
ant -lib [INSTALL]/integration/ant/jtest-ant-plugin.jar -listener com.parasoft.Listener jtest-monitor
Ant は、モニター タスクを実行する前にすべてのクラスをコンパイルすることを要求します。ビルドの前にプロジェクトを変更し、正しい順序になるようタスクを設定してください。以下はターゲットの設定例です。
<target name="jtest-monitor" depends="compile"> <jtest:monitor/> </target>
monitor.zip パッケージが生成され、ビルド出力ディレクトリに置かれます。その場所へのパスがコンソールに出力されます。
このパッケージには以下が含まれます。
- static_coverage.xml - 静的カバレッジ情報が保存されています。
- agent.jar - Jtest Java カバレッジ エージェントの jar ファイルです。
- agent.properties - エージェントの設定ファイルです。ビルド プロセス実行中に生成されたスコープ パラメーターや、他の属性が保存されています。
- agent.sh/agent.bat - エージェントを AUT プロセスにアタッチするために必要な Jtest Java エージェントの VM 引数を生成するスクリプトです。
テスト対象アプリケーション (AUT) へのカバレッジ エージェントのアタッチ
- monitor.zip パッケージの内容をサーバー マシンに展開します。
gent.sh/agent.bat スクリプトを実行して Jtest Java エージェントの VM 引数を生成します。monitor.zip パッケージのスクリプトは、コンソールに
-javaagent
VM 引数を出力します。エージェントを AUT にアタッチするには、この引数が必要です。結果は runtime_coverage サブ ディレクトリに出力されます。Jtest Agent VM argument: -javaagent:"[path to agent dir]\agent.jar"=settings="[path to agent properties file]\agent.properties",runtimeData="[path to monitor dir]\monitor\ runtime_coverage"
- アプリケーション サーバーの起動スクリプトに
-javaagent
フラグを追加してサーバーを再起動します (「Web アプリケーション カバレッジのチュートリアル」のステップ 5c を参照)。AUT にカバレッジ エージェントをアタッチすると、エージェントを制御するための REST API が公開されます。 - ブラウザーに次の URL を入力して、カバレッジ エージェントが設定されていることを確認します。
[application_host]:8050/status/
アプリケーションが適切に構成されている場合、API は次のデータを返します。
HTTPS 経由での Coverage Agent への接続
デフォルトでは、カバレッジ エージェントは HTTP プロトコル経由で利用できます。HTTPS 経由で接続するには、agent.sh/agent.bat スクリプトを実行した後に出力された Jtest Agent VM 引数に次のオプションを追加し、カバレッジ エージェントを設定する必要があります (「Attaching the Coverage Agent to the AUT」のステップ 2 を参照)。
useSSL=true
certificateStorePath=[キーストア ファイルへのパス]
certificateStorePassword=[キーストア ファイルのパスワード]
certificateStoreType=[キーストア ファイルのフォーマット]
certificateKeyPassword=[SSL 証明書へのパスワード]
アプリケーション サーバーの起動スクリプトに追加される Jtest Agent VM 引数は次のようになります。
-javaagent:"[path to agent dir]\agent.jar"=settings="[path to agent properties file]\agent.properties",runtimeData="[path to monitor dir]\monitor\ runtime_coverage",useSSL=true,certificateStorePath="F:\certificates\keystore.jks",certificateStorePassword=4!ij?ffQMk,certificateStoreType="JKS",certificateKeyPassword=dhW!34
こうすると、カバレッジ エージェントはテスト対象アプリケーション用に設定された SSL 証明書を認識できるようになります。
ヒント
アプリケーション用に SSL 証明書を設定する方法はいろいろあります。ブラウザーを使用している場合、信頼された証明書のリストに証明書を追加するオプションがあるかもしれません。別の Java プログラムを使用している場合、Java VM の信頼された証明書ファイルに証明書をインポートするか、Java クライアントのコマンド ラインに次の Java VM 引数を追加できます。
-Djavax.net.ssl.trustStore=[キーストア ファイルへのパス]
-Djavax.net.ssl.trustStoreType=[キーストア ファイルのフォーマット]
-Djavax.net.ssl.trustStorePassword=[キーストア ファイルのパスワード]
カバレッジ エージェントの構成
通常、アプリケーション サーバーには複数のアプリケーションがあります。さらに、共通サーバー クラスまたはアプリケーション ライブラリはインストゥルメントする必要がありません。Jtest がカバレッジを収集する必要があるのは、アプリケーションのソース コードだけです。すべてのクラスをインストゥルメントすると、時間がかかりすぎる場合があります。
サーバー上のアプリケーションは既にビルドされており、ソース コードからどのクラスが生成されたかに関する情報を収集することはできません。このため、Jtest エージェントのスコープを適切に設定することが非常に重要です。
カバレッジ エージェントは、以下の方法で設定できます。
- agent.properties ファイルを使用して
-javaagent
への引数を使用して
agent.properties ファイルは monitor.zip パッケージに生成されます (「Generating the Static Coverage File」を参照)。このファイルでプロパティを変更してカバレッジ エージェントを適切に設定できます。以下は、agent.properties ファイルを使ってカバレッジ エージェントを設定する例です。
jtest.agent.runtimeData=[path to runtime_coverage directory] jtest.agent.includes=com/myapp/data,com/myapp/common/** jtest.agent.excludes=com/myapp/transport/*,com/myapp/autogen/** jtest.agent.autostart=false
-javaagent
にプロパティを追加するには、jtest.agent 接頭辞を削除して名前を変更する必要があります。例:
-javaagent:"[path to agent dir]\agent.jar"=settings="[path to agent properties file]\agent.properties",autostart=true
重要
-javaagent
への引数として指定されたプロパティは、agent.properties ファイルで設定されたプロパティを上書きします。上記の例の場合、autostart=true
はagent.properties ファイルの jtest.agent.autostart=false
を上書きします。
以下の表は、カバレッジ エージェントを設定するために使用できる全プロパティの一覧です。
プロパティ | 説明 |
---|---|
jtest.agent.runtimeData | 実行時データが保存される場所です。次の例では、C:/tmp/myapp/ ディレクトリに
|
jtest.agent.includes | インストゥルメントするクラスのパターンをカンマ区切りのリストで指定します。次のワイルドカードがサポートされています。
次の例では、
|
jtest.agent.excludes | インストゥルメントから除外するクラスのパターンをカンマ区切りのリストで指定します。次のワイルドカードがサポートされています。
次の例では、
|
jtest.agent.autostart | 実行時データの自動収集を有効/無効にします。デフォルト値は true です。 |
jtest.agent.port | エージェントの通信ポートを設定します。デフォルト値は 8050 です。 |
jtest.agent.debug | コンソールへの冗長な出力を有効/無効にします。デフォルト値は false です。 |
jtest.agent.collectTestCoverage | テスト ケースのカバレッジ情報の収集を有効/無効にします。デフォルト値は false です。 |
jtest.agent.enableMultiuserCoverage | 複数ユーザーの Web アプリケーション カバレッジの収集を有効/無効にします。デフォルト値は このプロパティを true に設定すると、Coverage Agent Manager を使って複数ユーザーのカバレッジを収集できます。詳細については Parasoft DTP ドキュメントの「Coverage Agent Manager (CAM)」のセクションを参照してください。 |
jtest.agent.associateTestsWithCoverage | カバレッジと 特定のテストの関連付けを有効/無効にします。デフォルト値は true です。 |
jtest.agent.testid | エージェント実行時にカバレッジが関連付けられる初期テスト ID です。 |
jtest.agent.enableJacoco | Jacoco エンジンを使用した行カバレッジの収集を有効/無効にします。 |
テストを実行してランタイム カバレッジを収集する
SOAtest を使用して機能テストを実行することも、Coverage Agent Manager (CAM) とともに手動でテストを実行することもできます。テスト セッション実行の詳細については、SOAtest ユーザー ガイドまたは CAM のマニュアルを参照してください。
テスト実行時の処理
- SOAtest はランタイム カバレッジを収集し、静的カバレッジとマージしたデータを DTP にアップロードします。
- CAM はランタイム カバレッジとテスト結果を収集します。これらは手動でダウンロードする必要があります。 次に行う操作
- 手動で DTP にテスト結果をアップロードします。「DTP への結果のアップロード」を参照してください。
- ランタイム カバレッジと静的カバレッジをマージし、DTP にアップロードします。「静的カバレッジおよびランタイム カバレッジ データのマージと DTP へのアップロード」を参照してください。
DTP への結果のアップロード
CAM とともに Jtest を使用する場合
- DTP のインターフェイスで [Report Center] に移動します。
- 歯車のアイコンをクリックして [Report Center 設定] > [その他の設定] > [Report Center の管理] > [ツール] > [Data Collector アップロード フォーム] をクリックします (管理者権限が必要です)。
- [ファイルの選択] をクリックし、CAM からダウンロードした report.xml ファイルを選択します。
- [アップロード] ボタンをクリックし、ファイルを DTP にアップロードします。
SOAtest とともに Jtest を使用する場合、テスト実行時にテスト結果が自動的に DTP に送信されます。https://docs.parasoft.com にある SOAtest ユーザー ガイドの「アプリケーション カバレッジ」 セクションを参照してください。
静的カバレッジおよびランタイム カバレッジ データを DTP に送信する
CAM とともに Jtest を使用する場合
- Jtest で DTP、スコープ、作成者が適切に設定されていることを確認します。「DTP への接続」、「DTP への結果の送信とソース コードのパブリッシュ」、「設定」を参照してください。
- 適切にカバレッジ データをマージするには、jtestcli.properties ファイルで以下の設定を行います。
-- report.coverage.images
- DTP Server でカバレッジ イメージを作成するために使用するタグのセットを指定します。カバレッジ イメージは、同じビルド ID を持つ複数の実行のカバレッジ データを集約する際に一意の識別子となります。DTP は、1 レポートにつき最大 3 つまでのカバレッジ イメージをサポートします。
-session.tag
- 同じビルドの個々のテスト実行を区別する一意の識別子を指定します。
- build.id - 結果にラベル付けするためのビルド識別子を指定します。ビルドごとに固有の値を使用することも、特定のビルドで実行される複数のテストセッションで同じ値を使用することもできます。 - ランタイム カバレッジ ファイルおよび静的カバレッジ ファイルを同じマシンにコピーし、次のスイッチを指定して
jtestcli
を実行します。-runtimeCoverage
: CAM でダウンロードする実行時カバレッジへのパスを指定します (詳細については DTP のマニュアルの「Coverage Agent Manager (CAM)」セクションを参照)。単一のテスト セッションのカバレッジ情報を保存した個々の .data ファイルへのパスを指定することも、複数のテスト セッションの .data ファイルを含むフォルダーへのパスを指定することもできます。-staticCoverage
: 静的カバレッジ ファイルへのパスを指定します (「静的カバレッジ ファイルの生成」を参照)。-config
: カバレッジ データをマージするために実行する必要のあるCalculate Application Coverage
テスト コンフィギュレーションの URL を指定します。-publish
: マージされたカバレッジを DTP に送信します。jtestcli -staticcoverage [path to static_coverage.xml file] -runtimecoverage [path/dir] -config "builtin://Calculate Application Coverage" -publish
これによって、coverage.xml ファイルに実行時カバレッジ データを書き込みできるよう、静的カバレッジ データだけでなく、テスト実行時に生成される実行時データ カバレッジにも Jtest がアクセスできるようになります。
SOAtest とともに Jtest を使用する場合、テスト実行時に静的カバレッジおよび動的カバレッジ データが自動的に DTP に送信されます。https://docs.parasoft.com にある SOAtest ユーザー ガイドの「アプリケーション カバレッジ」 セクションを参照してください。
DTP でのカバレッジの参照
DTP のカバレッジ エクスプローラーを使用して、テスト実行時のアプリケーション カバレッジを参照できます。 カバレッジ情報の参照についての詳細は、https://docs.parasoft.com にある DTP ユーザー ガイドを参照してください。
既知の制限事項
- 1 つの Web アプリケーションに複数のユーザーが同時にアクセスした場合、複数のユーザーのカバレッジデータが混在する場合があります。個々のユーザーに正しくカバレッジが関連付けられるようにするには、マルチユーザー モードを有効にします (「Configuring the Coverage Agent」を参照)。
- マルチユーザー モードを有効にするには、HTTP ヘッダーでユーザー固有の情報を提供するため、HTTP または HTTPS プロトコルが必要です。
- マルチユーザー モードでは、同じ Web アプリケーションにアクセスしている他のユーザーの余分なカバレッジ情報が、「デフォルト」ユーザー (ID が指定されていないユーザー) に集約される場合があります。
- マルチユーザー モードでは、マルチユーザー アプリケーションから収集されたカバレッジを個々のユーザーに割り当てる機能には制約があります。子スレッドのカバレッジ データは、実際にアプリケーションにアクセスしたユーザーではなく、「デフォルト」ユーザーに割り当てられます。
- マルチユーザー モードでは、Jacoco エンジンを使用したカバレッジの収集はサポートされていません。
- Web アプリケーションの初期化から収集されたカバレッジ データは、特定のユーザーではなく「デフォルト」ユーザーに割り当てられます。