このセクションの内容

はじめに

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

.NET Core Web アプリケーション

dotTEST は IIS サーバーにデプロイされた .NET Core Web アプリケーションのカバレッジを収集できます。また、dotTEST に付属の coverage.exe ツールを使用することもできます。詳細は「スタンドアロン アプリケーションのアプリケーション カバレッジ」を参照してください。

前提条件

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

  • Internet Information Services (IIS) バージョン 7.5 以上
  • Coverage Agent Manager (CAM) またはSOAtest

プロセスの概要

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

以下のステップが実行されます。

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

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

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

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

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

  1. 静的カバレッジ ファイルを生成します。静的カバレッジ ファイルには、ユーザー クラス、メソッド、行などの情報が記録されます。詳細は「静的カバレッジ ファイルの生成」で説明されています。
  2. AUT にカバレッジ エージェントをアタッチします。「テスト対象アプリケーション (AUT) へのカバレッジ エージェントのアタッチ」を参照してください。

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

  1. ソリューションに対して次のテスト コンフィギュレーションを実行します。

    dottestcli.exe -config "builtin://Collect Static Coverage" -solution SOLUTION_PATH
  2. dottestcli のコンソール出力に静的カバレッジ データが保存された場所が表示されます。

    Saving static coverage information into: 'C:\Users\[USER]\Documents\Parasoft\dotTEST\Coverage\Static\[FILE].data

カバレッジのスコープのカスタマイズ

デフォルトでは、Web アプリケーション全体のカバレッジが計測されます。次のスイッチを使用すると、カバレッジのスコープをカスタマイズして、アプリケーションの一部だけを計測することができます (詳細については「テスト スコープの設定」を参照)。  

dottestcli.exe -config "builtin://Collect Static Coverage" 
-solution "C:\Devel\FooSolution\FooSolution.sln" 
-resource "FooSolution/QuxProject" 
-include "C:\Devel\FooSolution\src\QuxProject\**\*.cs" 
-exclude "C:\Devel\FooSolution\src\QuxProject\**\tests\**\*.cs"

-resource スイッチには、ソリューション内でのパスを指定します。-include および -exclud スイッチには、ファイル システムのパスを指定します。

スコープ情報はスコープ コンフィギュレーション ファイルに保存されます。Web サーバーの設定時に IIS マネージャー ツールでこのファイルを指定します (「Attaching the Coverage Agent to the AUT」を参照)。コンソール出力にはスコープ コンフィギュレーション ファイルの場所が表示されます。

Saving static coverage scope configuration into: 'C:\Users\[USER]\Documents\Parasoft\dotTEST\Coverage\Static\scope.instrumentation.txt'

IIS でコンパイルされた Web プロジェクトでは、アプリケーション カバレッジ スコープ ファイルを使用できません。これは、IIS コンパイルのターゲット アセンブリの名前が事前に決まっていないからです。カバレッジの収集が開始される前に、IIS によってロードされるアセンブリの名前がわかる場合は、スコープ ファイルを使用できます。

テスト対象アプリケーション (AUT) へのカバレッジ エージェントのアタッチ 

  1. IIS がインストールされ、アプリケーションがデプロイされているマシンに [INSTALLATION_DIR]\integration\IIS ディレクトリをコピーします。
  2. 管理者権限でコンソールを実行します。
  3. このマシンで dotTEST IIS Manager ツールを実行し、IIS 内での実行時カバレッジ収集を有効にします。

    dottest_iismanager.exe

    dotTEST IIS Manager に追加オプションを指定する必要がある場合があります。「IIS Manager Options」を参照してください。

    dottest_iismanager は、Web サーバー (IIS) の環境を初期化し、サービスのように振る舞い、ユーザーがテストを実行してカバレッジを収集することを可能にします。次のメッセージが表示されている間、サービスが待機し、コマンドを受け付けます。  

    Write 'exit' and hit Enter to close dottest_iismanager 

    テスト対象 Web サイトまたはアプリケーションがまだロードされていないときでも、セッションおよびテストを開始できることに注意してください。

  4. このマシンのファイアウォールの設定で、ポート 8050 (カバレッジ エージェントのデフォルトのポート) での HTTP トラフィックが許可されていることを確認します。デフォルトのポートを使用できない場合は、カバレッジ エージェントのポート番号を変更できます。
  5. Web サイトまたは Web アプリケーションを開きます。
  6. 次のアドレスに移動して、カバレッジ エージェントのステータスを確認します。http://host:8050/status
    次の応答を受け取るはずです。

    {"session":null,"test":null}

複数ユーザーからのカバレッジ収集

1 つの Web アプリケーションに同時にアクセスする複数のユーザーのカバレッジ情報を収集できます。それには、-multiuser スイッチを指定して dotTEST IIS Manager を起動します。

dottest_iismanager.exe -multiuser

詳細については、DTP のマニュアルの Coverage Agent Manager (CAM) セクションを参照してください。

IIS のアイドル タイムアウトの変更

デフォルトでは、IIS のアプリケーション プール プロセスは 20 分のアイドル タイムが経過するとシャットダウンしますが、このことがテスト セッションに悪影響を与える可能性があります。デフォルトのアイドル タイム値を変更し、シャットダウンを防ぐことによって、アプリケーションを操作するユーザーがテスト セッション中に予期しないサーバーの停止および再起動に遭遇しないようにできます。

  1. Internet Information Services (IIS) Manager を起動します。
  2. Application Pools ノードを開きます。
  3. Web アプリケーションが使用するプールを選択します。
  4. [Actions] パネルの [Advanced Settings] をクリックします。
  5. [Process Model ] セクションで [ Idle Time-out (minutes)] の設定をテストに適した値に変更します。

IIS マネージャーのオプション

オプション説明
-scope [path]スコープ設定ファイルへのパスです。デフォルト以外のスコープを使用する場合に必要です。「Customizing Scope of Coverage」を参照してください。
-agentTimeout[miliseconds]

Coverage Agent との接続のタイムアウト時間を指定します。マシンの性能に合わせて値を調整してください。デフォルト値は 1500 ms です。

0 または負の値を指定すると、接続はタイムアウトしません。そのため、ツールの処理が非常に遅くなったり、異常停止する場合があります。

-port[port number]デフォルトのポートが使用できない場合に dottest_iismanager の起動時に使用するポート番号を使用します。
-multiuser
複数ユーザーのカバレッジ情報収集を有効化します。「Collecting Coverage from Multiple Users」を参照してください。

SOAtest を使用したテスト コンフィギュレーションおよび実行

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

    • -runtimeCoverage: CAM でダウンロードする実行時カバレッジへのパスを指定します (詳細については DTP のマニュアルの「Coverage Agent Manager (CAM)」セクションを参照)。単一のテスト セッションのカバレッジ情報を保存した個々の .data ファイルへのパスを指定することも、複数のテスト セッションの .data ファイルを含むフォルダーへのパスを指定することもできます。
    • -staticCoverage: 静的カバレッジ ファイルへのパスを指定します (「Generating the Static Coverage File」を参照)。
    • -publish: マージされたカバレッジを DTP に送信します。
    dottestcli.exe -runtimeCoverage [path] -publish -staticCoverage [path]

動的カバレッジ収集の停止

動的カバレッジ データの収集を停止するには、以下のいずれかの操作を行います。

  1. コンソールに次のメッセージが表示されている状態で exit と入力し、dottest_iismanager を停止します。

    Write 'exit' and hit Enter to close dottest_iismanager
  2. ブラウザーに次の URL を入力することで、サービスにリクエストを送信します: http://host:port/shutdown

すべてのセッションが完了しているときにだけ dottest_iismanager を停止してください。サービスを停止すると、アプリケーション カバレッジが収集されなくなるため、カバレッジを収集するテストが実行されている間は、常に dottest_iismanager を実行しておくことが重要です。

dottest_iismanager の終了時にエラーが発生し、Web サーバー環境のクリーンアップが行われなかった場合、-stop パラメーターを指定して dottest_iismanager を実行することで、元の Web サーバー環境および設定を復元してください。 

dottest_iismanager.exe -stop

DTP でのカバレッジの参照

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

既知の制限事項

  • テスト セッションで収集されたカバレッジ情報をダウンロードできます。テスト セッションがアクティブでないときに収集されたカバレッジ情報はダウンロードできません。
  • 1 つの Web アプリケーションに複数のユーザーが同時にアクセスした場合、複数のユーザーのカバレッジデータが混在する場合があります。個々のユーザーに正しくカバレッジが関連付けられるようにするには、マルチユーザー モードを有効にします (「Collecting Coverage from Multiple Users」を参照)。
  • マルチユーザー モードを有効にするには、HTTP ヘッダーでユーザー固有の情報を提供するため、HTTP または HTTPS プロトコルが必要です。
  • マルチユーザー モードでは、WCF ベースのアプリケーションのカバレッジを収集するには、ASP.NET 互換モードが有効化されている必要があります。
  • マルチユーザー モードでは、同じ Web アプリケーションにアクセスしている他のユーザーの余分なカバレッジ情報が、「デフォルト」ユーザー (ID が指定されていないユーザー) に集約される場合があります。
  • マルチユーザー モードでは、マルチユーザー アプリケーションから収集されたカバレッジを個々のユーザーに割り当てる機能には制約があります。子スレッドのカバレッジ データは、実際にアプリケーションにアクセスしたユーザーではなく、「デフォルト」ユーザーに割り当てられます。
  • Web アプリケーションの初期化から収集されたカバレッジ データは、特定のユーザーではなく「デフォルト」ユーザーに割り当てられます。
  • WebSite プロジェクトは IIS サーバーによってリコンパイルされ、ターゲット アセンブリの名前が変わる可能性があるため、アプリケーション カバレッジ スコープ ファイルを使用できません。Web アプリケーションでは、スコープ ファイルが使用できます。
  • No labels