Ukázkový projekt pro vytvoření adaptéru diagnostických dat
Publikováno: duben 2016
"MyDiagnosticDataAdapter" je jednoduchý adaptér diagnostiky dat, který může připojit soubor protokolu s výsledky testu při spuštění testů.
Bude potřebovat oprávnění správce na jakýkoli počítač, kde je nainstalován kolektor diagnostických dat nebo editor konfigurace.
Příklad
Tato ukázka demonstruje, jak lze provádět následující úlohy:
Chcete-li nastavit zjistitelnost třídy v Microsoft Test Manager jako adaptér diagnostických dat, použijte atributy.
Použijte atributy, abyste nastavili uživatelský ovládací prvek třídy zjistitelný v Microsoft Test Manager jako editor k použití pro změnu konfigurace pro adaptér diagnostiky dat.
Přejděte k výchozím konfiguračním datům.
Registrujte určité události shromažďování diagnostických dat.
Připojí soubor protokolu a odeslat ho do DataCollectionSink.
// My Data Collector Class
using Microsoft.VisualStudio.TestTools.Common;
using Microsoft.VisualStudio.TestTools.Execution;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System;
namespace MyCompany.MyDiagnosticDataAdapters
{
// Provide a URI and friendly name for your diagnostic data adapter
[DataCollectorTypeUri("datacollector://MyCompany/MyDataCollector/1.0")]
[DataCollectorFriendlyName("Collect Log Files sample", false)]
// Designate your chosen configuration editor
[DataCollectorConfigurationEditor(
"configurationeditor://MyCompany/MyDataConfigEditor/1.0")]
public class MyDataCollector : DataCollector
{
private DataCollectionEvents dataEvents;
private DataCollectionLogger dataLogger;
private DataCollectionSink dataSink;
private XmlElement configurationSettings;
// Required method called by the testing framework
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);
dataEvents.DataRequest +=
new EventHandler<DataRequestEventArgs>(OnDataRequest);
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
dataEvents.SessionStart -=
new EventHandler<SessionStartEventArgs>(OnSessionStart);
dataEvents.SessionEnd -=
new EventHandler<SessionEndEventArgs>(OnSessionEnd);
dataEvents.TestCaseStart -=
new EventHandler<TestCaseStartEventArgs>(OnTestCaseStart);
dataEvents.TestCaseEnd -=
new EventHandler<TestCaseEndEventArgs>(OnTestCaseEnd);
dataEvents.DataRequest -=
new EventHandler<DataRequestEventArgs>(OnDataRequest);
}
}
#region Event Handlers
public void OnSessionStart(object sender, SessionStartEventArgs e)
{
// TODO: Provide implementation
}
public void OnSessionEnd(object sender, SessionEndEventArgs e)
{
// TODO: Provide implementation
}
public void OnTestCaseStart(object sender, TestCaseEventArgs e)
{
// TODO: Provide implementation
}
public void OnTestCaseEnd(object 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);
}
}
public void OnDataRequest(object sender, DataRequestEventArgs e)
{
// TODO: Provide implementation
// Most likely this occurs because a bug is being filed
}
#endregion
// A private method to collect the configured file names
private List<string> getFilesToCollect()
{
// Seetup 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;
}
}
}
Příklad
Toto je vzorový editor konfigurace adaptéru diagnostických dat. Přidat uživatelský ovládací prvek do projektu a vytvořit velmi jednoduchý formulář, který obsahuje popisek ("název souboru protokolu:") a textové pole s názvem "FileTextBox".
using Microsoft.VisualStudio.TestTools.Common;
using Microsoft.VisualStudio.TestTools.Execution;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System;
namespace MyCompany.DiagnosticDataAdapters.ConfigurationEditors
{
[DataCollectorConfigurationEditorTypeUri(
"configurationeditor://MyCompany/MyConfigEditor/1.0")]
public partial class MyDataConfigEditor :
UserControl, IDataCollectorConfigurationEditor
{
private DataCollectorSettings collectorSettings;
// Create a private property for the service provider
private IServiceProvider ServiceProvider { get; set; }
// Constructor
public MyConfigurationEditor()
{
InitializeComponent();
}
// Required method called by the testing framework
public void Initialize(
IServiceProvider svcProvider,
DataCollectorSettings settings)
{
ServiceProvider = svcProvider;
collectorSettings = settings;
// Display the file name as listed in the settings file.
// If the configuration has not been updated before, this
// data will be provided by the default configuration
// section from <nameofcollector>.dll.config:
// <DefaultConfiguration>
// <MyCollectorName
// xmlns="http://MyCompany/schemas/ProductName/Version");
// <File FullPath="C:\temp\logfile1.txt" />
// </MyCollectorName>
// </DefaultConfiguration>
this.SuspendLayout();
this.FileTextBox.Text = GetText(collectorSettings.Configuration);
this.ResumeLayout();
}
// Can be used to verify data before saving it
public bool VerifyData()
{
// Not currently verifying data
return true;
}
// Reset to default value from XML configuration
// using a custom method
public void ResetToAgentDefaults()
{
this.FileTextBox.Text =
getText(collectorSettings.DefaultConfiguration);
}
// Saves data changed in the editor to the test configuration
// settings. Does not change the default value.
public DataCollectorSettings SaveData()
{
collectorSettings.Configuration.InnerXml =
String.Format(
@"<MyCollectorName
http://MyCompany/schemas/MyDataCollector/1.0"">
<File FullPath=""{0}"" />
</MyCollectorName>",
FileTextBox.Text);
return collectorSettings;
}
// Reads the configuration settings
private string getText(XmlElement element)
{
// Setup namespace manager with our namespace
XmlNamespaceManager nsmgr =
new XmlNamespaceManager(
element.OwnerDocument.NameTable);
// Find all the "File" elements under our configuration
XmlNodeList files = element.SelectNodes("//ns:MyDataCollector/ns:File", nsmgr);
string result = String.Empty;
if (files.Count > 0)
{
XmlAttribute pathAttribute = files[0].Attributes["FullPath"];
if (pathAttribute != null &&
!String.IsNullOrEmpty(pathAttribute.Value))
{
result = pathAttribute.Value;
}
}
return result;
}
}
}
Příklad
Následuje ukázkový soubor konfigurace pro váš editor konfigurace kolekce diagnostických dat.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section
name="DataCollectorConfiguration"
type="Microsoft.VisualStudio.QualityTools.Execution.DataCollectorConfigurationSection,
Microsoft.visualStudio.QualityTools.ExecutionCommon,
Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" />
</configSections>
<DataCollectorConfiguration
xmlns="https://microsoft.com/schemas/VisualStudio/TeamTest/11">
<DataCollector
typeUri="datacollector://MyCompany/MyDataCollector/1.0">
<DefaultConfiguration>
<!-- Your default config settings-->
<File FullPath="c:\temp\logfile1.txt" />
</DefaultConfiguration>
</DataCollector>
</DataCollectorConfiguration>
</configuration>
Probíhá kompilace kódu
Vytvoření projektu kódu pro tento diagnostický adaptér
Vytvořte nový projekt knihovny tříd, který má název „MyDataCollector“.
V Průzkumníku řešení klikněte pravým tlačítkem myši na projekt a potom vyberte položku Vlastnosti. Chcete-li vybrat složku k přidání, vyberte Cesty odkazů a pak zvolte tři tečky (...).
Zobrazí se dialogové okno Vybrat cestu k referenci.
Vyberte následující cestu, založenou na instalační adresář: Program Files\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies. Klikněte na tlačítko OK.
Chcete-li přidat složku do cesty k odkazu, zvolte Přidat složku.
Složka se zobrazí v seznamu cest odkazů.
Zvolte ikonu Uložit všechny pro uložení cest odkazů.
Přidejte sestavení Microsoft.VisualStudio.QualityTools.ExecutionCommon.
V Průzkumníku řešení klikněte pravým tlačítkem myši na Odkazy a potom zvolte možnost Přidat odkaz.
Zvolte Procházet a vyhledejte Microsoft.VisualStudio.QualityTools.ExecutionCommon.dll.
Toto sestavení najdete v Program Files\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies.
Klikněte na tlačítko OK.
Přidejte sestavení Microsoft.VisualStudio.QualityTools.Common.
V Průzkumníku řešení klikněte pravým tlačítkem na možnost Odkazy a vyberte možnost Přidat odkaz.
Zvolte Procházet a vyhledejte Microsoft.VisualStudio.QualityTools.Common.dll.
Toto sestavení najdete v Program Files\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies.
Klikněte na tlačítko OK.
Zkopírujte třídu adaptéru diagnostiky dat, která byla uvedena výše v tomto dokumentu do třídy pro knihovnu tříd. Uložte tuto třídu.
Chcete-li přidat uživatelský ovládací prvek do projektu, klikněte pravým tlačítkem myši na projekt MyDataCollector v Průzkumníku řešení, přejděte na Přidat a pak zvolte Uživatelský ovládací prvek. Zvolte možnost Přidat.
Pomocí panelu nástrojů přidejte popisek uživatelského ovládacího prvku a změňte vlastnost textu názvu souboru:.
Pomocí panelu nástrojů přidejte textové pole uživatelského ovládacího prvku a změňte vlastnost název na textBoxFileName.
V nástroji Průzkumník řešení klikněte pravým tlačítkem myši na uživatelský ovládací prvek a vyberte Zobrazit kód. Nahraďte tuto třídu uživatelského ovládacího prvku za třídu ovládacího prvku uvedenou dříve v tomto dokumentu. Uložte tuto třídu.
Poznámka
Ve výchozím nastavení se nazývá uživatelský ovládací prvek UserControl1.Ujistěte se, že kód třídy uživatelského ovládacího prvku používá název vašeho ovládacího prvku.
Chcete-li vytvořit konfigurační soubor, v Průzkumníkovi řešení klikněte pravým tlačítkem myši na řešení, přejděte na Přidat a pak zvolte Nová položka. Vyberte výběr Konfigurační soubor aplikace a potom vyberte možnost Přidat. To přidá soubor s názvem App.config do vašeho řešení.
Zkopírujte data XML ze vzorku, který byl dříve v souboru XML. Uložte soubor.
Sestavte řešení a potom zkopírujte sestavení vytvořené a App.config do souboru Program Files\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies\DataCollectors adresáře.
Vytvořte nastavení testu, které používá tento vlastní adaptér diagnostických dat. Konfigurujte testovací nastavení, které shromáždí soubor, který existuje.
Pokud spouštíte testy z Microsoft Test Manager, můžete přiřadit tato nastavení testu do plánu testování před spuštěním testů nebo pomocí příkazu Spustit s možnostmi pro přidělení nastavení testu a přepsání nastavení testu. Další informace o nastaveních testů naleznete v tématu Nastavení počítačů a shromažďování diagnostických informací s použitím nastavení testu.
Spusťte testy pomocí nastavení testu společně s výběrem adaptéru diagnostiky datu.
Datový soubor, který jste zadali, je přikládán k výsledkům testu při spuštění testu.
Viz také
Postupy: Vytvoření adaptéru diagnostických dat
Postupy: Vytvoření vlastního editoru dat pro adaptér diagnostických dat
Postupy: Instalace vlastního adaptéru diagnostických dat
Vytvoření adaptéru diagnostických dat pro shromáždění vlastních dat nebo ovlivnění testovacího počítače