Przykładowy projekt do tworzenia adaptera danych diagnostycznych
"MyDiagnosticDataAdapter" jest karty prosty danych diagnostycznych, który można dołączyć plik dziennika z wynikami testu podczas uruchamiania testów.
Będą potrzebne uprawnienia administracyjne na dowolnym komputerze, gdy moduł zbierający dane diagnostyczne lub Konfiguracja edytora jest zainstalowana.
Przykład
Ten przykład pokazuje, jak wykonać następujące zadania:
Zastosuj atrybuty umożliwia odnalezienie do klasy Microsoft Test Manager jako adapter danych diagnostycznych.
Zastosuj atrybuty umożliwia odnalezienie do klasy formantu użytkownika Microsoft Test Manager jako edytor do użycia w celu zmiany konfiguracji dla karty danych diagnostycznych.
Dostęp do danych konfiguracji domyślnej.
Zarejestruj się w określonych zdarzeń zbierania danych diagnostycznych.
Dołącz plik dziennika przez wysłanie ich 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;
}
}
}
Jest to edytor konfiguracji przykładowe karty danych diagnostycznych.Dodaj formant użytkownika z projektem i utworzyć bardzo prosty formularz, który ma etykietę ("Nazwa pliku dziennika:") i pole tekstowe o nazwie "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;
}
}
}
Oto przykładowy plik konfiguracji do edytora konfiguracji zbierania danych diagnostycznych.
<?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>
Kompilowanie kodu
Aby utworzyć projekt kodu dla tej karty diagnostyki
Utwórz nowy projekt biblioteki klas o nazwie "MyDataCollector".
W Eksploratora rozwiązań, kliknij prawym przyciskiem myszy projekt, a następnie wybierz właściwości.Aby wybrać folder do dodania, wybierz polecenie ścieżki odwołania i wybierz przycisk wielokropka (...).
Wybierz ścieżkę odwołania zostanie wyświetlone okno dialogowe.
Wybierz następującą ścieżkę katalogu instalacji w oparciu o: Program Files\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies.Wybierz przycisk OK.
Aby dodać folder do ścieżki odwołania, wybierz polecenie Dodaj Folder.
Folder jest wyświetlana na liście ścieżek odwołania.
Wybierz Zapisz wszystkie ikonę, aby zapisać ścieżki odwołania.
Dodaj zestawu Microsoft.VisualStudio.QualityTools.ExecutionCommon.
W Eksploratora rozwiązań, kliknij prawym przyciskiem myszy odwołuje się do , a następnie wybierz Dodaj odwołanie.
Wybierz Przeglądaj i zlokalizować Microsoft.VisualStudio.QualityTools.ExecutionCommon.dll.
Będzie można znaleźć tego zestawu Program Files\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies.
Wybierz przycisk OK.
Dodaj zestawu Microsoft.VisualStudio.QualityTools.Common.
W Eksploratorze rozwiązań, kliknij prawym przyciskiem myszy odwołuje się do i wybierz Dodaj odwołanie.
Wybierz Przeglądaj i zlokalizować Microsoft.VisualStudio.QualityTools.Common.dll.
Będzie można znaleźć tego zestawu Program Files\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies.
Wybierz przycisk OK.
Skopiuj klasa karty danych diagnostycznych, który został wystawiony wcześniej w tym dokumencie do klasy biblioteki klas.Zapisz tej klasy.
Aby dodać kontrolki użytkownika do projektu, kliknij prawym przyciskiem myszy MyDataCollector projekt w Eksploratorze rozwiązań, wskaż polecenie Dodaj, a następnie wybierz kontrolki użytkownika.Wybierz Dodaj.
Za pomocą przybornika, dodać etykietę do kontrolki użytkownika i zmiana właściwości Text w nazwie pliku:.
Za pomocą przybornika, Dodaj pole tekstowe do kontrolki użytkownika, a następnie zmień nazwę textBoxFileName.
W Eksploratora rozwiązań, kliknij prawym przyciskiem myszy kontrolki użytkownika, a następnie wybierz widoku kodu. Ta klasa kontrolki użytkownika należy zastąpić klasę kontroli użytkowników, który został wystawiony wcześniej w tym dokumencie.Zapisz tej klasy.
[!UWAGA]
Domyślnie kontrolki użytkownika jest nazywana UserControl1.Upewnij się, że kod klasy formantu użytkownika używa nazwy użytkownika formant.
Do tworzenia pliku konfiguracji w Eksploratora rozwiązań kliknij prawym przyciskiem myszy to rozwiązanie, wskaż polecenie Dodaj, a następnie wybierz nowy element.Wybierz wybrać pliku konfiguracji aplikacji, a następnie wybierz Dodaj.Spowoduje to dodanie pliku o nazwie App.config do rozwiązania.
Skopiuj plik XML z próbki podany wcześniej do pliku XML.Zapisz plik.
Twórz rozwiązania, a następnie skopiuj zestaw wbudowanych i App.config plik do Program Files\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies\DataCollectors katalogu.
Utwórz ustawienia testu, korzystających z tej karty diagnostyczne danych niestandardowych.Skonfiguruj ustawienia testów do gromadzenia plik, który istnieje.
W przypadku korzystania z testów Microsoft Test Manager, można przypisać te ustawienia testów do planu testu przed uruchomieniem testów lub za pomocą Uruchom polecenie Opcje można przypisać ustawienia testu i zastąpić test ustawień.Aby uzyskać więcej informacji na temat ustawień testowych, zobacz Konfigurowanie maszyn i zbieranie informacji diagnostycznych za pomocą ustawień testowych.
Uruchamiania testów za pomocą ustawień testu z kartą danych diagnostycznych zaznaczone.
Określony plik danych będzie załączany do wyniki testów po wykonaniu testu.
Zobacz też
Koncepcje
Porady: tworzenie adaptera danych diagnostycznych
Porady: tworzenie edytora niestandardowego dla danych dla Twojego adaptera danych diagnostycznych
Porady: instalowanie niestandardowego adaptera danych diagnostycznych