方法: カスタム診断データ アダプターを作成する
発行: 2016年7月
診断データ アダプターを作成するには、Visual Studio を使用してクラス ライブラリを作成し、Visual Studio Enterprise に用意されている診断データ アダプター API をクラス ライブラリに追加します。 テストの実行中に発生したイベントを処理するときに、フレームワークによって提供される DataCollectionSink に対し、ストリームまたはファイルとして情報を送信します。 DataCollectionSink に送信したストリームまたはファイルは、テスト完了時点でテスト結果に対する添付ファイルとして保存されます。 テスト結果からバグを作成すると、またはテスト ランナーを使用すると、ファイルはバグにもリンクされます。
テストを実行するマシン、またはテスト対象のアプリケーションを実行するために使用している環境の一部を構成するマシンに影響を与える診断データ アダプターを作成できます。 たとえば、テストを実行するテスト マシンでのファイルの収集や、アプリケーションに対して Web サーバー ロールで実行されているマシンでのファイルの収集などが挙げられます。
診断データ アダプターには表示名を設定できます。表示名は、Test Manager または Visual Studio を使用してテスト設定を作成するときに表示されます。 テストの設定を使用すると、テストの実行時に、使用している環境下で、どのマシン ロールが特定の診断データ アダプターを実行するかを定義できます。 診断データ アダプターは、テストの設定を作成するときに構成することもできます。 たとえば、Web サーバーからカスタム ログを収集する診断データ アダプターを作成できます。 テストの設定を作成するとき、この Web サーバーの役割を実行しているマシン上でこの診断データ アダプターを実行するように選択できます。また、作成された最新の 3 つのログだけを収集するようにテストの設定の構成を変更できます。 テスト設定の詳細については、「コンピューターの設定およびテストの設定を使用した診断情報の収集」を参照してください。
イベントは、テストでイベントが発生した時点で診断データ アダプターがタスクを実行できるように、テストの実行時に発生します。
重要
これらのイベントは、特に複数のマシンでテストを実行する場合に、異なるスレッドで発生する可能性があります。そのため、スレッドに関する問題が発生する可能性を認識し、カスタム アダプターの内部データが誤って破損しないようにする必要があります。診断データ アダプターがスレッド セーフであることを確認してください。
診断データ アダプターを作成するときに使用できる主なイベントを次に示します。 診断データ アダプターのイベントの完全な一覧については、DataCollectionEvents 抽象クラスを参照してください。
イベント |
説明 |
---|---|
テストの実行を開始します。 |
|
テストの実行を終了します。 |
|
テストの実行で各テストを開始します。 |
|
テストの実行で各テストを終了します。 |
|
テストで各テスト ステップを開始します。 |
|
テストで各テスト ステップを終了します。 |
注意
手動テストが完了すると、これ以降、データ収集イベントは診断データ アダプターに送信されません。テストを再実行すると、テスト ケース識別子が新しくなります。ユーザーがテスト中にテストをリセットするか (TestCaseReset イベントが発生します)、またはテスト ステップを変更すると、これ以降、データ収集イベントは診断データ アダプターに送信されません。ただし、テスト ケース識別子は変更されません。テスト ケースがリセットされているかどうかを確認するには、診断データ アダプターでテスト ケース識別子を追跡する必要があります。
テストの設定を作成するときに構成した情報に基づいてデータ ファイルを収集する診断データ アダプターを作成するには、次の手順に従って操作します。
カスタムの構成エディターを含む、診断データ アダプター プロジェクトのサンプル全体については、「診断データ アダプター作成用のサンプル プロジェクト」を参照してください。
診断データ アダプターの作成とインストール
診断データ アダプターを作成してインストールするには
新しいクラス ライブラリを作成します。
[ファイル] メニューの [新規作成] をポイントし、[新しいプロジェクト] をクリックします。
[プロジェクトの種類] で使用する言語をクリックします。
[Visual Studio にインストールされたテンプレート] で [クラス ライブラリ] をクリックします。
診断データ アダプターの名前を入力します。
[OK] をクリックします。
アセンブリ Microsoft.VisualStudio.QualityTools.ExecutionCommon を追加します。
ソリューション エクスプローラーで、[参照] を右クリックし、[参照の追加] をクリックします。
[.NET] をクリックし、Microsoft.VisualStudio.QualityTools.ExecutionCommon.dll を指定します。
[OK] をクリックします。
アセンブリ Microsoft.VisualStudio.QualityTools.Common を追加します。
ソリューション エクスプローラーで、[参照] を右クリックし、[参照の追加] をクリックします。
[.NET] をクリックし、Microsoft.VisualStudio.QualityTools.Common.dll を指定します。
[OK] をクリックします。
クラス ファイルに次の using ステートメントを追加します。
using Microsoft.VisualStudio.TestTools.Common; using Microsoft.VisualStudio.TestTools.Execution; using System.Linq; using System.Text; using System.Xml; using System;
診断データ アダプター用のクラスに DataCollectorTypeUriAttribute を追加して、診断データ アダプターとして識別します。このとき、Company、Product、および Version を診断データ アダプターに応じた情報に置き換えます。
[DataCollectorTypeUri("datacollector://Company/Product/Version")]
クラスに DataCollectorFriendlyNameAttribute 属性を追加して、パラメーターを診断データ アダプターに応じた情報に置き換えます。
[DataCollectorFriendlyName("Collect Log Files", false)]
テストの設定アクティビティに表示名が表示されます。
注意
また、DataCollectorConfigurationEditorAttribute を追加して、このデータ アダプターのカスタム構成エディターの Type を指定し、必要に応じて、エディターに使用するヘルプ ファイルを指定できます。
また、DataCollectorEnabledByDefaultAttribute を適用し、常に有効にすべきであることを指定できます。
診断データ アダプターのクラスは、次のように、DataCollector クラスから継承する必要があります。
public class MyDiagnosticDataAdapter : DataCollector
次のように、ローカル変数を追加します。
private DataCollectionEvents dataEvents; private DataCollectionLogger dataLogger; private DataCollectionSink dataSink; private XmlElement configurationSettings;
Initialize メソッドと Dispose メソッドを追加します。 Initialize メソッドでは、次のように、データ シンクおよびテストの設定の構成データを初期化し、使用するイベント ハンドラーを登録します。
public override void Initialize( XmlElement configurationElement, DataCollectionEvents events, DataCollectionSink sink, DataCollectionLogger logger, DataCollectionEnvironmentContext environmentContext) { dataEvents = events; // The test events dataLogger = logger; // The error and warning log dataSink = sink; // Saves collected data // Configuration from the test settings configurationSettings = configurationElement; // Register common events for the data collector // Not all of the events are used in this class dataEvents.SessionStart += new EventHandler<SessionStartEventArgs>(OnSessionStart); dataEvents.SessionEnd += new EventHandler<SessionEndEventArgs>(OnSessionEnd); dataEvents.TestCaseStart += new EventHandler<TestCaseStartEventArgs>(OnTestCaseStart); dataEvents.TestCaseEnd += new EventHandler<TestCaseEndEventArgs>(OnTestCaseEnd); } public override void Dispose(bool disposing) { if (disposing) { // Unregister the registered events dataEvents.SessionStart -= new EventHandler<SessionStartEventArgs>(OnSessionStart); dataEvents.SessionEnd -= new EventHandler<SessionEndEventArgs>(OnSessionEnd); dataEvents.TestCaseStart -= new EventHandler<TestCaseStartEventArgs>(OnTestCaseStart); dataEvents.TestCaseEnd -= new EventHandler<TestCaseEndEventArgs>(OnTestCaseEnd); } }
次のようなイベント ハンドラー コードとプライベート メソッドを使用して、テスト中に生成されるログ ファイルを収集します。
public void OnTestCaseEnd(sender, TestCaseEndEventArgs e) { // Get any files to be collected that are // configured in your test settings List<string> files = getFilesToCollect(); // For each of the files, send the file to the data sink // which will attach it to the test results or to a bug foreach (string file in files) { dataSink.SendFileAsync(e.Context, file, false); } } // A private method that returns the file names private List<string> getFilesToCollect() { // Get a namespace manager with our namespace XmlNamespaceManager nsmgr = new XmlNamespaceManager( configurationSettings.OwnerDocument.NameTable); nsmgr.AddNamespace("ns", "http://MyCompany/schemas/MyDataCollector/1.0"); // Find all of the "File" elements under our configuration XmlNodeList files = configurationSettings.SelectNodes( "//ns:MyDataCollector/ns:File"); // Build the list of files to collect from the // "FullPath" attributes of the "File" nodes. List<string> result = new List<string>(); foreach (XmlNode fileNode in files) { XmlAttribute pathAttribute = fileNode.Attributes["FullPath"]; if (pathAttribute != null && !String.IsNullOrEmpty(pathAttribute.Value)) { result.Add(pathAttribute.Value); } } return result; }
これらのファイルは、テスト結果に添付されます。 これらのテスト結果からバグを作成する場合、またはテスト ランナーを使用する場合、ファイルはバグにも添付されます。
独自のエディターを使用してテストの設定で使用するデータを収集する場合は、「方法: 診断データ アダプター用のデータのカスタム エディターを作成する」を参照してください。
テストが終了したときに、ユーザーによるテストの設定の構成に基づいてログ ファイルを収集するには、App.config ファイルを作成し、ソリューションに追加する必要があります。 このファイルは次の形式で作成し、識別するために診断データ アダプターの URI が含まれる必要があります。 "Company/ProductName/Version" を実際の値に置き換えてください。
注意
診断データ アダプターの情報を構成する必要がない場合は、構成ファイルを作成する必要はありません。
<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <section name="DataCollectorConfiguration" type="Microsoft.VisualStudio.TestTools.Execution.DataCollectorConfigurationSection, Microsoft.VisualStudio.QualityTools.ExecutionCommon, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a "/> </configSections> <DataCollectorConfiguration xmlns="https://microsoft.com/schemas/VisualStudio/TeamTest/2010"> <DataCollector typeUri="datacollector://MyCompany/MyProduct/1.0"> <DefaultConfiguration> <!-- Your default config settings --> <Binaries> <Binary FullPath="C:\Example\Example.dll"/> <Binary FullPath="\\Server2\Example2.dll"/> </Binaries> <Symbols> <Symbol FullPath="\\ExampleServer\ExampleSymbol.pdb"/> </Symbols> </DefaultConfiguration> </DataCollector> </DataCollectorConfiguration> </configuration>
注意
既定の構成要素には必要なデータを含めることができます。テストの設定で診断データ アダプターを構成しなかった場合は、実行時に既定のデータが診断データ アダプターに渡されます。<DefaultConfigurations> セクションに追加する XML は、宣言されたスキーマの一部となる可能性が少ないため、生成される XML エラーを無視できます。
インストール ディレクトリに基づく構成ファイルの他の例がパス Program Files\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\DataCollectors 内にあります。
テストを実行するときに、環境を使用するテストの設定を構成する方法の詳細については、「手動テストでの複数の診断データの収集」または「Microsoft テスト マネージャーを使用した自動システム テストのテスト設定の作成」を参照してください。
構成ファイルのインストールに関する詳細については、「方法: カスタム診断データ アダプターをインストールする」を参照してください。
ソリューションをビルドして、診断データ アダプターのアセンブリを作成します。
カスタム エディターをインストールする方法の詳細については、「方法: カスタム診断データ アダプターをインストールする」を参照してください。
テストを実行するときに、環境を使用するテストの設定を構成する方法の詳細については、「手動テストでの複数の診断データの収集」または「Microsoft テスト マネージャーを使用した自動システム テストのテスト設定の作成」を参照してください。
診断データ アダプターを選択するには、まず既存のテスト設定を選択するか、Microsoft Test Manager または Visual Studio から新しく作成する必要があります。 アダプターは、テストの設定の [データと診断] タブに、クラスに割り当てた表示名と共に表示されます。
Microsoft Test Manager からテストを実行する場合は、テストを実行する前にこれらのテストの設定をテスト計画に割り当てるか、[オプションを指定して実行] コマンドを使用して、テストの設定の割り当ておよびオーバーライドを行います。 テスト設定の詳細については、「コンピューターの設定およびテストの設定を使用した診断情報の収集」を参照してください。
Visual Studio からテストを実行する場合は、これらのテスト設定をアクティブとして設定する必要があります。 テストの設定の詳細については、「Visual Studio のテストにおけるテスト設定の指定」を参照してください。
この診断データ アダプターを選択したテストの設定を使用して、テストを実行します。
指定したデータ ファイルがテスト結果に関連付けられます。
参照
DataCollectorConfigurationEditorAttribute
DataCollectionEvents
DataCollector
DataCollectionSink
DataCollectorTypeUriAttribute
DataCollectorFriendlyNameAttribute
DataCollectorEnabledByDefaultAttribute
コンピューターの設定およびテストの設定を使用した診断情報の収集
Visual Studio のテストにおけるテスト設定の指定
Microsoft テスト マネージャーを使用した自動システム テストのテスト設定の作成
手動テストでの複数の診断データの収集
方法: 診断データ アダプター用のデータのカスタム エディターを作成する