このセクションの内容

はじめに

実行中の Web アプリケーション サーバーで手動または自動での機能テストを実行し、カバレッジ データをモニターおよび収集できます。カバレッジ データおよびテスト結果を DTP サーバーにレポートし、データをマージして関連付けることもできます。アプリケーション カバレッジ情報を DTP のカバレッジ エクスプローラー (詳細は DTP ユーザーズ ガイドの「カバレッジ エクスプローラー」を参照) に表示し、アプリケーションがどの程度テストされたかや、テストの品質を知ることができます。

前提条件

カバレッジを収集するには、以下のコンポーネントが必要です。

  • Java JDK 1.5
  • Apache Maven、Gradle、または Ant ビルド

Java JDK 8 でのバイトコードの改行の計算方法は、それより前のバージョンの Java と異なります。そのため、カバレッジの結果が変わる場合があります。

ソース管理システムを使用する場合、適切にソース管理システムを設定します。「ソース管理システムの設定」を参照してください。

プロセスの概要

Jtest には、カバレッジ エージェントというコンポーネントが付属しています。カバレッジ エージェントは、テスト対象アプリケーション (AUT) にアタッチされ、AUT の実行されたコードをモニターします。AUT にカバレッジ エージェントをアタッチすると、REST API が公開され、テストおよびテスト セッションの開始および終了をマークできるようになります。 

カバーされるコード行に関するメタデータ (静的カバレッジ データ) は、アプリケーションのビルド プロセスの一環として特別なテスト コンフィギュレーションを実行することによって収集されます。テスト実行時には、カバレッジ エージェントとのやりとりが動的カバレッジ マップに書き込まれます。このマップには、実行されたコード行を示すマーカーが記録されます。  

Jtest は、この動的カバレッジ マップと静的カバレッジ データを処理します。カバレッジ情報を保存した coverage.xml が生成され、DTP に送信されます。DTP は、カバレッジ データを受信すると、カバレッジ イメージにロードします。カバレッジ イメージは、同じビルド ID を持つ複数の実行のカバレッジ データを集約することを可能する特別なタグです。カバレッジ イメージにより、カバレッジ情報と特定のテストを関連付けることが可能になります。 

テスト実行ツールの結果 (SOAtest のテスト、Engine によって実行されたテスト、手動テストなど) も report.xml という形で DTP に送信されます。カバレッジ データ ファイルとレポートのビルド ID が一致すると、DTP はそれらのデータを関連付け、カバレッジ情報に表示します。 

カバレッジ収集のためのテスト対象アプリケーション (AUT) の構成

AUT の準備には、以下の手順が含まれます。

  1. 静的カバレッジ ファイルを生成します。静的カバレッジ ファイルには、ユーザー クラス、メソッド、行などの情報が記録されます。詳細は「静的カバレッジ ファイルの生成」で説明されています。
  2. AUT にカバレッジ エージェントをアタッチします。「テスト対象アプリケーション (AUT) へのカバレッジ エージェントのアタッチ 」を参照してください。
  3. カバレッジ エージェントには、ファイルを出力したり、スコープを決定するためのデフォルトの設定が含まれていますが、アプリケーション カバレッジの目的に合わせて構成ファイルのプロパティを設定できます。詳細については「カバレッジ エージェントの構成」を参照してください。

静的カバレッジ ファイルの生成

静的カバレッジ ファイルは、ビルド プロセス中に Jtest Maven、Gradle または Ant プラグインによって生成されます。このファイルは、ソース コードがあるビルド マシン上で生成される必要があります。生成された静的カバレッジ ファイルは、コードが変更されるまで使用できます。 

静的カバレッジ ファイルを生成するには、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) へのカバレッジ エージェントのアタッチ 

  1. monitor.zip パッケージの内容をサーバー マシンに展開します。
  2. 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"
  3. アプリケーション サーバーの起動スクリプトに -javaagent フラグを追加してサーバーを再起動します (「Web アプリケーション カバレッジのチュートリアル」のステップ 5c を参照)。AUT にカバレッジ エージェントをアタッチすると、エージェントを制御するための REST API が公開されます。 
  4. ブラウザーに次の URL を入力して、カバレッジ エージェントが設定されていることを確認します。
    [application_host]:8050/status/
    アプリケーションが適切に構成されている場合、API は次のデータを返します。

カバレッジ エージェントの構成 

通常、アプリケーション サーバーには複数のアプリケーションがあります。さらに、共通サーバー クラスまたはアプリケーション ライブラリはインストゥルメントする必要がありません。Jtest がカバレッジを収集する必要があるのは、アプリケーションのソース コードだけです。すべてのクラスをインストゥルメントすると、時間がかかりすぎる場合があります。

サーバー上のアプリケーションは既にビルドされており、ソース コードからどのクラスが生成されたかに関する情報を収集することはできません。このため、Jtest エージェントのスコープを適切に設定することが非常に重要です。

カバレッジ エージェントは、以下の方法で設定できます。

  • agent.properties ファイルを使用して
  • -javaagent への引数を使用して

agent.properties ファイルは monitor.zip パッケージに生成されます (「静的カバレッジ ファイルの生成」を参照)。このファイルでプロパティを変更してカバレッジ エージェントを適切に設定できます。以下は、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/ ディレクトリに runtime_ という接頭辞の付いたファイルが作成されます。

'C:/tmp/myapp/runtime'

jtest.agent.includes 

インストゥルメントするクラスのパターンをカンマ区切りのリストで指定します。次のワイルドカードがサポートされています。

* はゼロ個以上の文字に一致します。
** は複数のディレクトリ レベルに一致します。

次の例では、com.myapp.data パッケージのすべてのクラスと com.myapp.common で始まるパッケージおよびサブパッケージのすべてのクラスがインストゥルメントされます。

com/myapp/data/*,com/myapp/common/**

jtest.agent.excludes

インストゥルメントから除外するクラスのパターンをカンマ区切りのリストで指定します。次のワイルドカードがサポートされています。

* はゼロ個以上の文字に一致します。
** は複数のディレクトリ レベルに一致します。

次の例では、com.myapp.transport パッケージのすべてのクラスと com.myapp.autogen で始まるパッケージおよびサブパッケージのすべてのクラスがインストゥルメントから除外されます。

com/myapp/transport/*,com/myapp/autogen/**

jtest.agent.autostart実行時データの自動収集を有効/無効にします。デフォルト値は true です。
jtest.agent.port エージェントの通信ポートを設定します。デフォルト値は 8050 です。
jtest.agent.debug コンソールへの冗長な出力を有効/無効にします。デフォルト値は false です。
jtest.agent.collectTestCoverageテスト ケースのカバレッジ情報の収集を有効/無効にします。デフォルト値は false です。 
jtest.agent.enableMultiuserCoverage

複数ユーザーの Web アプリケーション カバレッジの収集を有効/無効にします。デフォルト値は false です。 

このプロパティを true に設定すると、Coverage Agent Manager を使って複数ユーザーのカバレッジを収集できます。詳細については Parasoft DTP ドキュメントの「Coverage Agent Manager (CAM)」のセクションを参照してください。

jtest.agent.associateTestsWithCoverageカバレッジと 特定のテストの関連付けを有効/無効にします。デフォルト値は true です。
jtest.agent.testidエージェント実行時にカバレッジが関連付けられる初期テスト ID です。

テスト コンフィギュレーションと実行

SOAtest を使用して機能テストを実行したり (テスト コンフィギュレーションの設定については、『SOAtest ユーザーズ ガイド』の「SOAtest のアプリケーション カバレッジ」を参照してください)、手動テストを実行できます。テスト セッション終了時に、SOAtest で指定されたディレクトリの runtime_coverage_[timestamp].data ファイルにカバレッジが保存されます。この情報と静的カバレッジ データをマージして coverage.xml ファイルを作成し、DTP にアップロードすることができます。 

DTP への結果のアップロード

CAM を使用する場合

  1. DTP のインターフェイスで [Report Center] に移動します。
  2. 歯車のアイコンをクリックして [Report Center 設定] > [その他の設定] > [Report Center の管理] > [ツール] > [Data Collector アップロード フォーム] をクリックします (管理者権限が必要です)。
  3. [ファイルの選択] をクリックし、CAM からダウンロードした report.xml ファイルを選択します。
  4. [アップロード] ボタンをクリックし、ファイルを DTP にアップロードします。

SOAtest を使用する場合

SOAtest を使用してテストを実行した場合、SOAtest の XML レポートを DTP にアップロードします。詳細については、『SOAtest ユーザーズ ガイド』の「SOAtest のアプリケーション カバレッジ」の「Uploading Rest Results to DTP」を参照してください。

動的カバレッジ データ ファイルの生成と DTP へのアップロード

  1. Jtest で DTP、スコープ、作成者が適切に設定されていることを確認します。「DTP への接続」、「DTP への結果の送信とソース コードのパブリッシュ」、「設定」を参照してください。
  2. 適切にカバレッジ データをマージするには、dottestcli.properties ファイルで以下の設定を行います。
    - report.coverage.images - DTP Server でカバレッジ イメージを作成するために使用するタグのセットを指定します。カバレッジ イメージは、同じビルド ID を持つ複数の実行のカバレッジ データを集約する際に一意の識別子となります。DTP は、1 レポートにつき最大 3 つまでのカバレッジ イメージをサポートします。
    session.tag - 同じビルドの個々のテスト実行を区別する一意の識別子を指定します。
    build.id - 結果にラベル付けするためのビルド識別子を指定します。ビルドごとに固有の値を使用することも、特定のビルドで実行される複数のテストセッションで同じ値を使用することもできます。
  3. 次の引数で必要なデータを指定して Calculate Application Coverage テスト コンフィギュレーションを実行します。

    jtestcli -staticcoverage [path to static_coverage.xml file] -runtimecoverage [path/dir] -config "builtin://Calculate Application Coverage" -publish

    これによって、coverage.xml ファイルに実行時カバレッジ データを書き込みできるよう、静的カバレッジ データだけでなく、テスト実行時に生成される実行時データ カバレッジにも Jtest がアクセスできるようになります。

DTP でのカバレッジの参照

DTP のカバレッジ エクスプローラーを使用して、テスト実行時のアプリケーション カバレッジを参照できます。カバレッジ情報の参照については、DTP のマニュアルを参照してください。

既知の制限事項

  • 1 つの Web アプリケーションに複数のユーザーが同時にアクセスした場合、複数のユーザーのカバレッジデータが混在する場合があります。個々のユーザーに正しくカバレッジが関連付けられるようにするには、マルチユーザー モードを有効にします (「カバレッジ エージェントの構成」を参照)。
  • マルチユーザー モードを有効にするには、HTTP ヘッダーでユーザー固有の情報を提供するため、HTTP または HTTPS プロトコルが必要です。
  • マルチユーザー モードでは、同じ Web アプリケーションにアクセスしている他のユーザーの余分なカバレッジ情報が、「デフォルト」ユーザー (ID が指定されていないユーザー) に集約される場合があります。
  • マルチユーザー モードでは、マルチユーザー アプリケーションから収集されたカバレッジを個々のユーザーに割り当てる機能には制約があります。子スレッドのカバレッジ データは、実際にアプリケーションにアクセスしたユーザーではなく、「デフォルト」ユーザーに割り当てられます。
  • Web アプリケーションの初期化から収集されたカバレッジ データは、特定のユーザーではなく「デフォルト」ユーザーに割り当てられます。


  • No labels