Sdílet prostřednictvím


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

  1. Vytvořte nový projekt knihovny tříd, který má název „MyDataCollector“.

  2. 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.

  3. 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.

  4. Chcete-li přidat složku do cesty k odkazu, zvolte Přidat složku.

    Složka se zobrazí v seznamu cest odkazů.

  5. Zvolte ikonu Uložit všechny pro uložení cest odkazů.

  6. Přidejte sestavení Microsoft.VisualStudio.QualityTools.ExecutionCommon.

    1. V Průzkumníku řešení klikněte pravým tlačítkem myši na Odkazy a potom zvolte možnost Přidat odkaz.

    2. Zvolte Procházet a vyhledejte Microsoft.VisualStudio.QualityTools.ExecutionCommon.dll.

      Toto sestavení najdete v Program Files\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies.

    3. Klikněte na tlačítko OK.

  7. Přidejte sestavení Microsoft.VisualStudio.QualityTools.Common.

    1. V Průzkumníku řešení klikněte pravým tlačítkem na možnost Odkazy a vyberte možnost Přidat odkaz.

    2. Zvolte Procházet a vyhledejte Microsoft.VisualStudio.QualityTools.Common.dll.

      Toto sestavení najdete v Program Files\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies.

    3. Klikněte na tlačítko OK.

  8. 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.

  9. 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.

  10. Pomocí panelu nástrojů přidejte popisek uživatelského ovládacího prvku a změňte vlastnost textu názvu souboru:.

  11. Pomocí panelu nástrojů přidejte textové pole uživatelského ovládacího prvku a změňte vlastnost název na textBoxFileName.

  12. 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.

  13. 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í.

  14. Zkopírujte data XML ze vzorku, který byl dříve v souboru XML. Uložte soubor.

  15. 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.

  16. 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.

  17. 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