Projeto de amostra para a criação de um adaptador de dados de diagnóstico

"mydiagnosticdataadapter" é um adaptador de dados de diagnóstico simples pode anexar um arquivo de log para os resultados do teste quando você executa os testes.

Você precisará de permissões administrativas em qualquer máquina onde o coletor de dados de diagnóstico ou a configuração do editor está instalado.

Exemplo

Este exemplo demonstra como realizar as seguintes tarefas:

  • Aplicar atributos para tornar uma classe detectável por Microsoft Test Manager como um adaptador de dados de diagnóstico.

  • Aplicar atributos para tornar uma classe de controle de usuário localizável para Microsoft Test Manager como um editor a ser usado para alterar a configuração para um adaptador de dados de diagnóstico.

  • Dados de configuração do padrão de acesso.

  • Registrar eventos específicos de coleta de dados de diagnóstico.

  • Anexe o arquivo de log, enviando-o para o 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;
        }
    }
}

Este é um editor de configuração de exemplo para o seu adaptador de dados de diagnóstico. Adicionar um controle de usuário ao seu projeto e criar um formulário muito simple que tem um rótulo ("nome do arquivo de Log:") e uma caixa de texto chamado "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;
        }
    }
}

Este é um arquivo de configuração de exemplo para o seu editor de configuração de Coletores de dados de diagnóstico.

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

Compilando o código

Para criar o projeto de código para esse adaptador de diagnóstico

  1. Crie um novo projeto de biblioteca de classe chamado "mydatacollector".

  2. Em Solution Explorer, o botão direito do mouse no projeto e, em seguida, clique em Propriedades. Para selecionar uma pasta para adicionar, clique em Reference Paths e, em seguida, clique nas reticências ().

    O Selecionar caminho de referência caixa de diálogo é exibida.

  3. Selecione o caminho a seguir, com base em seu diretório de instalação: Program Files\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies. Clique em OK.

  4. Para adicionar a pasta para o seu caminho de referência, clique em Adicionar pasta.

    A pasta é exibida na lista de caminhos de referência.

  5. Clique o Salvar tudo ícone para salvar os caminhos de referência.

  6. Adicione o assembly Microsoft.VisualStudio.QualityTools.ExecutionCommon.

    1. Em Solution Explorer, com o botão direito referências e, em seguida, clique em Adicionar referência de.

    2. Clique em Procurar e localize Microsoft.VisualStudio.QualityTools.ExecutionCommon.dll.

      Este assembly será encontrado no Program Files\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies.

    3. Clique em OK.

  7. Adicione o assembly Microsoft.VisualStudio.QualityTools.Common.

    1. No Solution Explorer, clique com o botão direito referências e selecione Adicionar referência de.

    2. Clique em Procurar e localize Microsoft.VisualStudio.QualityTools.Common.dll.

      Este assembly será encontrado no Program Files\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies.

    3. Clique em OK.

  8. Copie a classe do adaptador de dados de diagnóstico que estava listada anteriormente neste documento para a classe para a biblioteca de classes. Salve esta classe.

  9. Para adicionar um controle de usuário para o projeto, o projeto de MyDataCollector com o botão direito no Solution Explorer, aponte para Adde em seguida, clique em O controle de usuário. Clique em Adicionar.

  10. Usando a caixa de ferramentas, adicionar um rótulo para o controle de usuário e altere a propriedade de texto para o nome do arquivo:.

  11. Usando a caixa de ferramentas, adicionar uma caixa de texto para o controle de usuário e altere o nome para textBoxFileName.

  12. Em Solution Explorer, o botão direito do mouse no controle de usuário e, em seguida, clique em View Code. Substitua essa classe de controle de usuário com a classe de controle de usuário listada anteriormente neste documento. Salve esta classe.

    ObservaçãoObservação

    Por padrão, o controle de usuário é chamado UserControl1. Certifique-se de que o código de classe de controle de usuário usa o nome do seu controle de usuário.

  13. Para criar o arquivo de configuração em Solution Explorer a solução com o botão direito, aponte para Adde em seguida, clique em Novo Item. Clique para selecionar Arquivo de configuração do aplicativoe em seguida, clique em Add. Isso adicionará um arquivo chamado App.config a solução.

  14. Copie o XML do exemplo fornecido anteriormente para o arquivo XML. Salve o arquivo.

  15. Compilar a solução e, em seguida, copie o assembly criado e o App.config de arquivo para o Program Files\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\DataCollectors directory.

  16. Crie configurações de teste usam esse adaptador de diagnóstico de dados personalizados. Defina as configurações de teste para coletar um arquivo existente.

    Se você estiver executando seus testes de Microsoft Test Manager, você pode atribuir esses testar configurações para o plano de teste antes de executar os testes ou use o executar com o comando opções para testar configurações de atribuir e substituir testar as configurações. Para obter mais informações sobre configurações de teste, consulte Configuração de máquinas e coletar informações de diagnóstico usando as configurações de teste.

  17. Execute os testes usando as configurações de teste com o seu adaptador de dados de diagnóstico selecionado.

    O arquivo de dados que você especificou será anexado para os resultados do teste quando o teste é executado.

Consulte também

Conceitos

Como: Criar um adaptador de dados de diagnóstico

Como: Criar um Editor personalizado para dados para o seu adaptador de dados de diagnóstico

Como: Instalar um adaptador de dados de diagnóstico personalizado

A criação de um adaptador de dados de diagnóstico para coletar dados personalizados ou afetam uma máquina de teste