Freigeben über


Beispielprojekt für das Erstellen eines Adapters für diagnostische Daten

"MyDiagnosticDataAdapter" ist ein einfacher Adapter für diagnostische Daten, der eine Protokolldatei an die Testergebnisse anfügen kann, wenn Sie die Tests ausführen.

Sie benötigen Administratorberechtigungen für jeden Computer, auf dem der Diagnosedatensammler oder der Konfigurations-Editor installiert ist.

Beispiel

Dieses Beispiel veranschaulicht das Ausführen der folgenden Aufgaben:

  • Anwenden von Attributen, um eine Klasse für Microsoft Test Manager als Adapter für diagnostische Daten auffindbar zu machen

  • Anwenden von Attributen, um eine Benutzersteuerelementklasse für Microsoft Test Manager als Editor auffindbar zu machen, der zum Ändern der Konfiguration für einen Adapter für diagnostische Daten verwendet werden soll.

  • Zugreifen auf standardmäßige Konfigurationsdaten

  • Registrieren bestimmter Ereignisse der Sammlung diagnostischer Daten

  • Anfügen der Protokolldatei durch Senden an das 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;
        }
    }
}

Dies ist ein beispielhafter Konfigurations-Editor für den Adapter für diagnostische Daten.Fügen Sie dem Projekt ein Benutzersteuerelement hinzu, und erstellen Sie ein sehr einfaches Formular mit einer Bezeichnung ("Name der Protokolldatei:") und einem Textfeld mit dem Namen "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;
        }
    }
}

Im Folgenden sehen Sie eine Beispielkonfigurationsdatei für den Diagnosedatensammler-Konfigurations-Editor.

<?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">
      <DefaultConfiguraton>
        <!-- Your default config settings-->
        <File FullPath="c:\temp\logfile1.txt" />
      </DefaultConfiguration>
    </DataCollector>
  </DataCollectorConfiguration>
</configuration>

Kompilieren des Codes

So erstellen Sie das Codeprojekt für diesen Diagnoseadapter

  1. Erstellen Sie ein neues Klassenbibliothekprojekt mit dem Namen "MyDataCollector".

  2. In Projektmappen-Explorermit der rechten Maustaste auf das Projekt, und klicken Sie dann Eigenschaftenaus.Um einen Ordner auszuwählen, klicken Sie auf Hinzufügen Verweispfade und klicken Sie auf die Auslassungszeichen (...).

    Das Dialogfeld Verweispfad auswählen wird angezeigt.

  3. Wählen Sie den folgenden Pfad aus, auf der Basis Ihres Installationsverzeichnisses: Program Files\Microsoft Visual Studio 11.0\Common7\IDE\PrivateAssemblies.Klicken Sie auf OK.

  4. Um dem Verweispfad den Ordner hinzuzufügen, wählen Sie Ordner hinzufügen.

    Der Ordner wird in der Liste der Verweispfade angezeigt.

  5. Wählen Sie das Alle speichern Symbol, um die Verweispfade zu speichern.

  6. Fügen Sie die Assembly Microsoft.VisualStudio.QualityTools.ExecutionCommon hinzu.

    1. In Projektmappen-Explorermit der rechten Maustaste auf Verweise, und klicken Sie dann Verweis hinzufügenaus.

    2. Wählen Sie aus Durchsuchen und suchen Sie Microsoft.VisualStudio.QualityTools.ExecutionCommon.dll.

      Diese Assembly befindet sich in Program Files\Microsoft Visual Studio 11.0\Common7\IDE\PrivateAssemblies.

    3. Klicken Sie auf OK.

  7. Fügen Sie die Assembly Microsoft.VisualStudio.QualityTools.Common hinzu.

    1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Verweise, und wählen Sie anschließend Verweis hinzufügen.

    2. Wählen Sie aus Durchsuchen und suchen Sie Microsoft.VisualStudio.QualityTools.Common.dll.

      Diese Assembly befindet sich in Program Files\Microsoft Visual Studio 11.0\Common7\IDE\PrivateAssemblies.

    3. Klicken Sie auf OK.

  8. Kopieren Sie die oben in diesem Dokument aufgeführte Klasse für den Adapter für diagnostische Daten in die Klasse für die Klassenbibliothek.Speichern Sie diese Klasse.

  9. So fügen Sie dem Projekt ein Benutzersteuerelement mit der rechten Maustaste auf MyDataCollector-Projekt dem Punkt klicken Sie im Projektmappen-Explorer mit Hinzufügenauf Hinzufügen, und wählen Sie dann Benutzersteuerelement.Wählen Sie Hinzufügenaus.

  10. Fügen Sie dem Benutzersteuerelement mithilfe der Toolbox eine Bezeichnung hinzu, und ändern Sie die Text-Eigenschaft in "Dateiname:".

  11. Fügen Sie dem Benutzersteuerelement mithilfe der Toolbox ein Textfeld hinzu, und ändern Sie den Namen in "textBoxFileName".

  12. In Projektmappen-Explorermit der rechten Maustaste auf das Benutzersteuerelement, und klicken Sie dann **Code anzeigen.**aus Ersetzen Sie diese Benutzersteuerelementklasse durch die oben im Dokument aufgeführte Benutzersteuerelementklasse.Speichern Sie diese Klasse.

    HinweisHinweis

    Standardmäßig bekommt das Benutzersteuerelement die Bezeichnung UserControl1.Stellen Sie sicher, dass im Benutzersteuerelement-Klassencode der Name des Benutzersteuerelements verwendet wird.

  13. Um die Konfigurationsdatei, in Projektmappen-Explorer Erstellen Sie mit der rechten Maustaste auf die Projektmappe, zeigen Sie auf Hinzufügen, und Neues Element auswählen.Wählen Sie Anwendungskonfigurationsdateiauszuwählen, und wählen Sie dann Hinzufügenaus.Dadurch wird der Projektmappe eine Datei mit dem Namen App.config hinzugefügt.

  14. Kopieren Sie die XML-Daten aus dem obigen Beispiel in die XML-Datei.Speichern Sie die Datei.

  15. Erstellen Sie die Projektmappe, und kopieren Sie dann die Datei App.config in das Verzeichnis Program Files\Microsoft Visual Studio 11.0\Common7\IDE\PrivateAssemblies\DataCollectors.

  16. Erstellen Sie Testeinstellungen, die diesen benutzerdefinierten Adapter für diagnostische Daten verwenden.Konfigurieren Sie die Testeinstellungen, um eine bereits vorhandene Datei zu erfassen.

    Wenn Sie Tests von Microsoft Test Manager aus ausführen, können Sie diese Testeinstellungen dem Testplan zuweisen, bevor Sie die Tests ausführen, oder verwenden Sie den Befehl "Ausführen mit Optionen", um Testeinstellungen zuzuweisen und zu überschreiben.Weitere Informationen zu Testeinstellungen finden Sie unter Einrichten von Computern und Sammeln von Diagnoseinformationen mithilfe von Testeinstellungen.

  17. Führen Sie die Tests unter Verwendung der Testeinstellungen aus, und wählen Sie dabei Ihren Adapter für diagnostische Daten aus.

    Die angegebene Datendatei wird bei Ausführung des Tests an die Testergebnisse angefügt.

Siehe auch

Konzepte

Gewusst wie: Erstellen eines Adapters für diagnostische Daten

Gewusst wie: Erstellen eines benutzerdefinierten Editors für Daten im Adapter für diagnostische Daten

Gewusst wie: Installieren eines benutzerdefinierten Adapters für diagnostische Daten

Erstellen eines Adapters für diagnostische Daten zum Sammeln von benutzerdefinierten Daten oder Beeinflussen eines Testsystems