このセクションの内容:
概要
テスト影響度分析(TIA:Test Impact Analysis)機能は、テスト対象アプリケーションのカバレッジ データを分析し、前回のビルド以降の変更によって影響を受けたテストのリストを生成します。テストのリストは .lst ファイルに保存され、SOAtest コマンドライン インターフェイスにリソースとして渡すことができます。SOAtest は、変更を検証するために、テスト影響度分析によって特定された、影響を受けるテストのサブセットのみを実行します。以下の概要では、テスト影響度分析のプロセスについて説明します。
- 構成する: SOAtest に同梱されているカバレッジ エージェント (agent.jar) を構成し、テスト対象アプリケーションにアタッチします。
- テスト コンフィギュレーションを設定する: SOAtest がエージェントと通信できるようにし、ベースライン カバレッジ レポートを作成するための設定を行います。
- 完全なテストスイートを実行する: 新しいテスト ケースを使って完全なテスト スイートを実行し、どのテストケースがカバーしているかについての情報を収集し、ベースライン カバレッジ レポートを作成します。
- 変更の影響を受けるテストを含む .lst ファイルを生成する: アプリケーションの新しいバージョンが利用可能になったら、
TestImpactAnalysis
スクリプトを実行して、ベースライン カバレッジ レポートを処理します。変更の影響を受けるテストを含む .lst ファイルが作成されます。 - 変更の影響を受けるテストを実行する:アプリケーションの最新バージョン (.war) をサーバーにデプロイし、.lst ファイルを入力として使用して SOAtest を実行するジョブを実行し、変更を検証します。
Java のサポート
TIA は、Java 11 以降でサポートされています。
設定
テスト影響度分析は、自動化されたプロセスの一部として実装されることを目的としています。テスト影響度分析 (TIA) を有効にするには、次の手順を実行します。
アプリケーションをデプロイする
テスト対象アプリケーションをデプロイします。zip、war、jar、ear などの zip ベースのファイル形式でパッケージ化されたアプリケーションがサポートされています。また、スタンドアロンのクラス ファイルまたは zip ベースのファイル内に埋め込まれたクラス ファイルを含む階層的ディレクトリ構造もサポートされています。
テスト対象アプリケーションにカバレッジ エージェントをアタッチする
SOAtest には、SOAtest が変更の影響を受けるテストを判断するために必要なカバレッジ情報を生成する Java エージェントが含まれています。
このエージェントは <INSTALL>/test_impact_analysis/integration/coverage ディレクトリにあります。同じディレクトリ内の agent.properties ファイルから構成設定を取得します。agent.jar および agent.properties ファイルを含むカバレッジ ディレクトリを、テスト対象アプリケーションが実行されているマシンにコピーする必要があります。
カバレッジ エージェントの設定
通常、アプリケーション サーバーには複数のアプリケーションが含まれます。さらに、一般的なサーバー クラスまたはアプリケーション ライブラリをインストゥルメントする必要はありません。エージェントは、アプリケーションのソース コードのカバレッジを収集するだけです。すべてのクラスをインストゥルメントするのは時間がかかりすぎます。このため、カバレッジ エージェントのスコープを適切に設定することが非常に重要です。
agent.properties のプロパティを変更し、-javaagent
引数にプロパティを渡すことにより、カバレッジ エージェントを設定できます。エージェントはいくつかのパラメーターをサポートしていますが (Coverage Agent Parameters を参照)、デフォルト設定の構成はほとんどの場合に適しています。
jtest.agent.serverEnabled=true jtest.agent.includes=com/myapp/data,com/myapp/common/** jtest.agent.excludes=com/myapp/transport/*,com/myapp/autogen/** jtest.agent.associateTestsWithCoverage=true jtest.agent.autostart=false
カバレッジ エージェントのパラメーター
エージェントに設定できるすべてのプロパティは、以下の表のとおりです。
jtest.agent.associateTestsWithCoverage | カバレッジと特定のテストの関連付けを有効/無効にします。デフォルト値は false です。 |
---|---|
jtest.agent.runtimeData | 実行時に収集するカバレッジ データを保存するエージェントのアプリケーション サーバー上の場所を指定します。 |
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 アプリケーション カバレッジの収集を有効/無効にします。デフォルト値は |
jtest.agent.serverEnabled | エージェントをアクティブにします。 |
jtest.agent.enableJacoco | エージェントが JaCoCo エンジンを使用してカバレッジを収集できるようにします。デフォルトは false です。 |
プロパティを設定したら、アプリケーション サーバーの起動時に -javaagent
引数を追加して、エージェントをアタッチし、エージェント設定ファイルを含めます。
-javaagent:'/path/to/agent.jar'=settings='/path/to/agent.properties',runtimeData='/path/to/runtime_coverage'
便宜上、カバレッジ ディレクトリには -javaagent
引数を生成するスクリプトが含まれています。agent.sh または agent.bat スクリプトを実行し、出力をサーバーの起動スクリプトにコピーします。
$ ./agent.sh Add this Java VM args to your process: --------------------------------------------------- -javaagent:"/home/TIA/test_impact_analysis/integration/coverage/agent.jar"=settings="/home/TIA/test_impact_analysis/integration/coverage/agent.properties",runtimeData="/home/TIA/test_impact_analysis/integration/coverage/runtime_coverage" --------------------------------------------------- Press any key to continue . . .
次の例では、catalina.sh (Linux) または catalina.bat (Windows) スクリプトの先頭で JAVA_OPTS 変数を使用して、エージェントが Tomcat サーバーにアタッチされています。
if [ "$1" = "start" -o "$1" = "run" ]; then JAVA_OPTS='-javaagent:"/home/TIA/test_impact_analysis/integration/coverage/agent.jar"=settings="/home/TIA/test_impact_analysis/integration/coverage/agent.properties",runtimeData="/home/TIA/coverage_storage"' fi
if "%1"=="stop" goto skip_instrumentation set JAVA_OPTS=-javaagent:"C:\TIA\test_impact_analysis\integration\coverage\agent.jar"=settings="C:\TIA\test_impact_analysis\integration\coverage\agent.properties",runtimeData="C:\TIA\coverage_storage" :skip_instrumentation
アプリケーションを起動し、ブラウザで <host>:8050/status
を開いて、エージェントの準備ができていることを確認します。test、runtime_coverage、testCase の各プロパティを含む JSON オブジェクトが表示されます。例:
{"test":null,"session":"runtime_coverage_20191008_1537_0","testCase":null}
runtimeData プロパティで指定したディレクトリを確認することもできます (上記の例では /home/TIA/coverage_storage
)。このディレクトリには、静的なカバレッジ データ ファイルが含まれているはずです。このカバレッジ データ ファイルはエージェントの起動時に生成されます。
テスト コンフィギュレーションの設定
テスト実行情報をカバレッジ エージェントに報告し、ベースライン カバレッジ レポートを生成するようにテスト コンフィギュレーションを設定します。既存のテスト コンフィギュレーションを設定することも、新しいテスト コンフィギュレーションを作成して設定することもできます ( 「カステム テスト コンフィギュレーションの作成」を参照)。
- テスト コンフィギュレーションを開き、[実行] > [アプリケーション カバレッジ] タブをクリックします。
- [アプリケーション カバレッジの収集] オプションを有効にし、テスト対象アプリケーションとカバレッジ エージェントがホストされているホスト名または IP アドレス、およびエージェントのポート番号を指定します。ポート番号は、agent.properties ファイルの
jtest.agent.port
設定の値に一致する必要があります (デフォルトは8050
)。[接続テスト] をクリックすると、SOAtest がカバレッジ エージェントとやり取りできるかどうかを検証できます。 - (任意) [カバレッジ エージェント ユーザー ID] でユーザー ID を指定できます。ID によって、カバレッジ結果が特定のユーザーと関連付けられます。ユーザー ID は、カバレッジエージェントに対して複数のユーザーのアプリケーション カバレッジが有効になっている場合にのみ指定する必要があります。
- [テスト影響分析用にベースライン カバレッジ レポートを生成] オプションを有効にし、以下を指定します。
- アプリケーション バイナリの場所 - テスト対象アプリケーションのバイナリを含む場所。フォルダーまたは .war、.jar、.zip、.ear ファイルのパスを指定できます。
- レポートの場所 - ベースラインカバレッジレポートの出力ディレクトリ。 - [カバレッジ エージェントへの接続の失敗をテストの失敗としてレポートする] オプションを有効にすると、カバレッジ エージェントの接続に失敗したとき、またはアプリケーションのバイナリの場所やレポートの場所が誤って設定されたときに、テストの失敗がレポートされます。このオプションが有効ではない場合、接続の問題はコンソールにレポートされますが、テストは失敗になりません。
- [適用] をクリックして変更を保存します。
テストおよびカバレッジ データの収集
新しいテスト コンフィギュレーションを使用して完全なテスト スイートを実行し、データを収集してベースライン カバレッジ レポートを生成します。
すでに自動テストを実行している場合は、既存のジョブを変更して新しいテスト コンフィギュレーションを使用できます。例:
soatestcli.exe -data <your workspace> -resource <your tests> -localsettings <properties file with SOAtest settings> -config <new test configuration>
SOAtest を使用したテスト実行コマンドの詳細については、「コマンドラインからのテスト実行 (soatestcli)」を参照してください。手動で SOAtest GUI からテストを実行する ことも可能です。
Linux/MacOS の一時ディレクトリ
テスト コンフィギュレーションの実行時にベースライン カバレッジ レポートを生成するには、一時ディレクトリを設定する必要があります。TEMP 変数がまだ設定されていない場合は、<INSTALL_DIR>/test_impact_analysis ディレクトリにある TestImpactAnalysis.sh スクリプトを以下のように変更する必要があります。
#!/bin/bash
TMP=/tmp
変更の影響を受けるテストのリスト生成
アプリケーションの新しいバージョンが利用可能になったら、次の構文を使用して、<INSTALL_DIR>/test_impact_analysis ディレクトリにある TestImpactAnalysis.bat (Windows) または TestImpactAnalysis.sh (Linux/macOS) スクリプトを実行します。
TestImpactAnalysis.sh -app <path to new .war> -coverageReport <path to coverage.xml report> -outputLst <path to .lst>
-app
フラグは、新しいデプロイ可能な .war を指定します。-coverageReport
フラグは、テスト コンフィギュレーションで [レポートの場所] オプションを使用して構成されたディレクトリに生成されたベースライン coverage.xml レポートを指定する必要があります (「テスト構成の構成」を参照)。-outputLst
フラグの使用は任意であり、結果の出力先を指定します。
スクリプトが終了すると、結果は -outputLst
フラグで指定されたディレクトリの .lst ファイルに保存されます。このフラグが含まれていない場合、ファイルはデフォルトで <USER_HOME>/parasoft/test_impact_analysis/lsts/ ディレクトリに保存されます。.lst ファイルのデフォルト名は <yyyyMMdd_HHmmss>_affected_tests.lst
です。.lst ファイルは、テストが変更の影響を受ける場合にのみ生成されます。
変更の影響を受けるテストの実行
変更影響度分析によって報告されたテストだけを実行するには、SOAtest の実行中に -resource
パラメーターを使用して .lst ファイルを指定します。
soatestcli.exe -data <your workspace> -resource <path to .lst> -localsettings <properties file with SOAtest settings> -config <your team's test configuration>
SOAtest を使用したテスト実行コマンドの詳細については、「コマンドラインからのテスト実行 (soatestcli)」を参照してください。