Compartilhar via


Como criar um adaptador de dados de diagnóstico

 

Publicado: abril de 2016

Para criar um adaptador de dados de diagnóstico, criar uma biblioteca de classes usando o Visual Studio e adicione as APIs do adaptador de dados de diagnóstico fornecidas pelo Visual Studio Enterprise para sua biblioteca de classes. Envie quaisquer informações que você desejar como um fluxo ou um arquivo a DataCollectionSink fornecido pela estrutura ao manipular eventos que são gerados durante a execução do teste. Os fluxos ou arquivos enviados a DataCollectionSink são armazenados como arquivos anexos aos resultados de teste quando seu teste é concluído. Se você criar um bug desses resultados de teste ou quando usar o Test Runner, os arquivos também serão vinculados ao bug.

Você pode criar um adaptador de dados de diagnóstico que afeta o computador onde seus testes são executados, ou um computador que é parte do ambiente que você está usando para executar o aplicativo do teste. Por exemplo, coletando arquivos em seu computador de teste onde os testes são executados ou coletando arquivos no computador que serve na função de servidor Web para seu aplicativo.

Você pode dar ao adaptador de dados de diagnóstico um nome amigável a ser exibido quando você criar suas configurações de teste usando Test Manager ou usando Visual Studio. As configurações de teste permitem que você defina qual função de computador executará adaptadores de dados de diagnóstico específicos em seu ambiente quando você executar os testes. Você também pode configurar os adaptadores de dados de diagnóstico ao criar suas configurações de teste. Por exemplo, você pode criar um adaptador de dados de diagnóstico que colete logs personalizados do servidor Web. Quando você cria suas configurações de teste, você pode selecionar para executar este adaptador de dados de diagnóstico no computador ou computadores que estão executando esta função do servidor Web, e pode alterar a configuração para que suas configurações de teste coletem somente os últimos três logs que foram criados. Para obter mais informações sobre configurações de teste, consulte Configurando máquinas e coletando informações de diagnóstico usando configurações de teste.

Eventos são gerados quando você executar os testes para que o adaptador de dados de diagnóstico possa executar tarefas nesse ponto no teste.

Importante

Esses eventos podem ser gerados em threads diferentes, especialmente quando você tem testes que são executados em vários computadores.Portanto, você deve estar ciente de possíveis problemas de threading e não corromper inadvertidamente os dados internos do adaptador personalizado.Certifique-se de que o adaptador de dados de diagnóstico seja do tipo thread-safe.

A seguir está uma lista parcial dos principais eventos que você pode usar ao criar seu adaptador de dados de diagnóstico. Para obter uma lista completa de eventos do adaptador de dados de diagnóstico, consulte a classe abstrata DataCollectionEvents .

Evento

Descrição

SessionStart

Início da execução do teste

SessionEnd

Fim da execução do teste

TestCaseStart

Início de cada teste na execução de testes

TestCaseEnd

Fim de cada teste na execução de testes

TestStepStart

Início de cada etapa de um teste

TestStepEnd

Fim de cada etapa de um teste

Dica

Quando um teste manual terminar, nenhum evento de coleção de dados é enviado ao adaptador de dados de diagnóstico.Quando um teste é executado novamente, terá um novo identificador de situação de teste.Se um usuário redefinir um teste durante um teste (gerando o evento TestCaseReset) ou se alterar um resultado da etapa de teste, nenhum evento da coleção de dados será enviado ao adaptador de dados de diagnóstico, mas o identificador de caso de teste permanecerá o mesmo.Para determinar se um caso de teste foi redefinido, você deve rastrear o identificador de caso de teste em seu adaptador de dados de diagnóstico.

Use o seguinte procedimento para criar o adaptador de dados de diagnóstico que coleta um arquivo de dados que é baseado nas informações que você configura quando você cria suas configurações de teste.

Para um projeto do adaptador de dados de diagnóstico do exemplo completo, incluindo um editor de configuração personalizados, consulte Projeto de amostra para criar um adaptador de dados de diagnóstico.

Criando e instalando um adaptador de dados de diagnóstico

Para criar e instalar um adaptador de dados de diagnóstico

  1. Criar uma nova biblioteca de classes.

    1. No menu Arquivo, selecione Novo e aponte para Novo Projeto.

    2. De tipos de projeto, selecione o idioma a ser usado.

    3. De modelos instalados do Visual Studio, selecione biblioteca de classes.

    4. Digite um nome para o adaptador de dados de diagnóstico.

    5. Escolha OK.

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

    1. No Gerenciador de Soluções, clique com o botão direito em Referências e selecione o comando Adicionar Referência.

    2. Escolha .NET e localize Microsoft.VisualStudio.QualityTools.ExecutionCommon.dll.

    3. Escolha OK.

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

    1. No Gerenciador de Soluções, clique com o botão direito em Referências e selecione o comando Adicionar Referência.

    2. Escolha /.NET, localizar Microsoft.VisualStudio.QualityTools.Common.dll.

    3. Escolha OK.

  4. Adicione as seguintes instruções using para seu arquivo de classe:

    using Microsoft.VisualStudio.TestTools.Common;
    using Microsoft.VisualStudio.TestTools.Execution;
    using System.Linq;
    using System.Text;
    using System.Xml;
    using System;
    
  5. Adicione DataCollectorTypeUriAttribute à classe do seu adaptador de dados de diagnóstico para identificá-la como um adaptador de dados de diagnóstico, substituindo Empresa, Produto, e Versão pelas informações apropriadas do seu adaptador de dados de diagnóstico:

    [DataCollectorTypeUri("datacollector://Company/Product/Version")]
    
  6. Adicione o atributo de DataCollectorFriendlyNameAttribute à classe, substituindo os parâmetros pelas informações apropriadas para o adaptador de dados de diagnóstico:

    [DataCollectorFriendlyName("Collect Log Files", false)]
    

    Este nome amigável é exibido na atividade de configurações de teste.

    Dica

    Você também pode adicionar DataCollectorConfigurationEditorAttribute para especificar Type do editor de configuração personalizada para este adaptador de dados, e opcionalmente para especificar o arquivo de ajuda para usar o editor.

    Você também pode aplicar DataCollectorEnabledByDefaultAttribute para especificar que ele sempre deve ser ativado.

  7. A classe do adaptador de dados de diagnóstico deve herdar da classe de DataCollector como segue:

    public class MyDiagnosticDataAdapter : DataCollector
    
  8. Adicione as variáveis locais como a seguir:

    private DataCollectionEvents dataEvents;
    private DataCollectionLogger dataLogger;
    private DataCollectionSink dataSink;
    private XmlElement configurationSettings;
    
  9. Adicione o método de Initialize e um método de Dispose. No método Initialize, você inicializa o coletor de dados, quaisquer dados de configuração das configurações de teste e registra os manipuladores de eventos que deseja usar como segue:

    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);
    }
    
    public override void Dispose(bool disposing)
    {
        if (disposing)
        {
            // Unregister the registered events
            dataEvents.SessionStart -= 
                new EventHandler<SessionStartEventArgs>(OnSessionStart);
            dataEvents.SessionEnd -= 
                new EventHandler<SessionEndEventArgs>(OnSessionEnd);
            dataEvents.TestCaseStart -= 
                new EventHandler<TestCaseStartEventArgs>(OnTestCaseStart);
            dataEvents.TestCaseEnd -= 
                new EventHandler<TestCaseEndEventArgs>(OnTestCaseEnd);
        }
    }
    
  10. Use o seguinte código de manipulador de eventos e o método particular para coletar o arquivo de log gerado durante o teste:

    public void OnTestCaseEnd(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);
        }
    }
    
    // A private method that returns the file names
    private List<string> getFilesToCollect()
    {
        // Get a 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;
    }
    

    Esses arquivos são anexados aos resultados de teste. Se você criar um bug desses resultados de teste ou quando usar o Test Runner, os arquivos também serão anexados ao bug.

    Se você quiser usar seu próprio editor para coletar dados para usar em suas configurações de teste, consulte Como criar um editor personalizado para dados do adaptador de dados de diagnóstico.

  11. Para coletar um arquivo de log quando um teste for concluído com base no que o usuário configurou em configurações de teste, você deve criar um arquivo App.config e adicioná-lo à solução. Este arquivo tem o seguinte formato e deve conter o URI para que o adaptador de dados de diagnóstico identifique-o. Substitua os valores reais de "Empresa/nome do produto/versão".

    Dica

    Se você não precisar configurar quaisquer informações para o adaptador de dados de diagnóstico, então não será necessário criar um arquivo de configuração.

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <configSections>
        <section name="DataCollectorConfiguration" type="Microsoft.VisualStudio.TestTools.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/MyProduct/1.0">
          <DefaultConfiguration>
            <!-- Your default config settings -->
            <Binaries>
              <Binary FullPath="C:\Example\Example.dll"/>
              <Binary FullPath="\\Server2\Example2.dll"/>
            </Binaries>
            <Symbols>
              <Symbol FullPath="\\ExampleServer\ExampleSymbol.pdb"/>
            </Symbols>
          </DefaultConfiguration>
        </DataCollector>
      </DataCollectorConfiguration>
    </configuration>
    

    Dica

    O elemento de configuração padrão pode conter todos os dados de que você precisar.Se o usuário não configurar o adaptador de dados de diagnóstico nas configurações de teste, os dados padrão serão passados para seu adaptador de dados de diagnóstico quando ele for executado.Como o XML que você adiciona à seção <DefaultConfigurations> provavelmente não é parte do esquema declarado, você pode ignorar todos os erros que o XML gerar.

    Existem outros exemplos de arquivos de configuração no caminho a seguir com base no diretório de instalação: Program Files\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\DataCollectors.

    Para obter mais informações sobre como configurar as configurações de teste para usar um ambiente quando você executa os testes, consulte Coletar mais dados de diagnóstico em testes manuais ou Criar configurações de teste para testes de sistema automatizados usando o Microsoft Test Manager.

    Para obter mais informações sobre como instalar o arquivo de configuração, consulte Como instalar um adaptador de dados de diagnóstico personalizado

  12. Construa sua solução para criar o assembly do adaptador de dados de diagnóstico.

  13. Para obter informações sobre como instalar o editor personalizado, consulte Como instalar um adaptador de dados de diagnóstico personalizado.

  14. Para obter mais informações sobre como configurar as configurações de teste para usar um ambiente quando você executa os testes, consulte Coletar mais dados de diagnóstico em testes manuais ou Criar configurações de teste para testes de sistema automatizados usando o Microsoft Test Manager.

  15. Para selecionar o adaptador de dados de diagnóstico, primeiro você deve selecionar as configurações existentes de um teste ou criar um novo do Microsoft Test Manager ou do Visual Studio. O adaptador é exibido na guia Dados e diagnósticos das configurações de teste com o nome amigável que você atribuiu à classe.

  16. Se você estiver executando seus testes do Microsoft Test Manager, poderá atribuir essas configurações de teste para seu plano de teste antes de executar seus testes ou usar o comando Executar com Opções para atribuir configurações de teste e substituir configurações de teste. Para obter mais informações sobre configurações de teste, consulte Configurando máquinas e coletando informações de diagnóstico usando configurações de teste.

    Se você estiver executando seus testes do Visual Studio, deverá definir essas configurações de teste como ativas. Para obter mais informações sobre configurações de teste, consulte Especificando configurações de teste do Visual Studio.

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

    O arquivo de dados que você especificou está anexado aos resultados do teste.

Consulte também

DataCollectorConfigurationEditorAttribute
DataCollectionEvents
DataCollector
DataCollectionSink
DataCollectorTypeUriAttribute
DataCollectorFriendlyNameAttribute
DataCollectorEnabledByDefaultAttribute
Configurando máquinas e coletando informações de diagnóstico usando configurações de teste
Especificando configurações de teste do Visual Studio
Criar configurações de teste para testes de sistema automatizados usando o Microsoft Test Manager
Coletar mais dados de diagnóstico em testes manuais
Como criar um editor personalizado para dados do adaptador de dados de diagnóstico