Поделиться через


Практическое руководство. Создание адаптера диагностических данных

Для создания адаптера диагностических данных нужно создать библиотеку классов с помощью Microsoft Visual Studio 2010 и добавить в нее API адаптера диагностических данных, содержащиеся в Microsoft Visual Studio 2010 Premium. Любые необходимые данные можно отправить в DataCollectionSink инфраструктуры в виде потока или файла при обработке событий, возникших во время тестового запуска. Потоки или файлы, отправляемые в объект DataCollectionSink, при окончании теста сохраняются в виде вложений в результатах теста. При создании ошибки на основе этих результатов теста и при использовании Test Runner эти файлы также связываются с ошибкой.

Можно создать адаптер диагностических данных, влияющий на компьютер, на котором выполняются тесты, или на компьютер, являющийся частью среды, в которой выполняется тестируемое приложение. Например, он может выполнять сбор файлов на тестовом компьютере (на котором выполняются тесты) или на компьютере, выполняющем роль веб-сервера для приложения.

Адаптеру диагностических данных можно дать понятное имя, отображаемое при создании параметров тестирования в Менеджер тестирования или Microsoft Visual Studio 2010. Параметры тестирования позволяют указать роль компьютера, которая будет запускать в среде определенные адаптеры диагностических данных при выполнении тестов. Адаптеры диагностических данных также можно настроить при создании параметров тестирования. Например, можно создать адаптер диагностических данных, собирающий пользовательские журналы с веб-сервера. При создании параметров тестирования можно указать, чтобы этот адаптер диагностических данных запускался на одном или нескольких компьютерах, исполняющих роль веб-сервера, и изменить конфигурацию параметров тестирования для сбора лишь трех журналов, создававшихся последними. Дополнительные сведения о параметрах тестирования см. в разделе Настройка компьютеров и сбор диагностических данных с помощью параметров тестирования.

При выполнении тестов создаются события, чтобы адаптер диагностических данных мог выполнять задачи в этих точках теста.

Важно!

Эти события могут возникать на различных потоках (в особенности при выполнении тестов на нескольких компьютерах).Таким образом, необходимо знать о вероятности возникновения проблем в связи с потоками, чтобы случайно не повредить внутренние данные настраиваемого адаптера.Убедитесь в потокобезопасности адаптера диагностических данных.

Далее перечислены некоторые ключевые события, которые можно использовать при создании адаптера диагностических данных. Полный список событий адаптера диагностических данных см. в абстрактном классе DataCollectionEvents.

Событие

Описание

SessionStart

Начало тестового запуска

SessionEnd

Завершение тестового запуска

TestCaseStart

Начало каждого теста в тестовом запуске

TestCaseEnd

Завершение каждого теста в тестовом запуске

TestStepStart

Начало каждого шага теста

TestStepEnd

Окончание каждого шага теста

Примечание

При завершении ручного теста прекращается отправка событий сбора данных в адаптер диагностических данных.Повторно выполняемый тест получает новый идентификатор тестового случая.Если пользователь сбрасывает тест в ходе выполнения теста (что вызывает событие TestCaseReset) или изменяет результат шага теста, отправка событий сбора данных адаптеру диагностических данных не производится, но идентификатор тестового случая не изменяется.Чтобы определить, выполнялся ли сброс тестового случая, необходимо отследить идентификатор тестового случая в адаптере диагностических данных.

Чтобы создать адаптер диагностических данных, собирающий данные в файл на основе информации, заданной при создании параметров тестирования, выполните следующие действия.

Полный пример проекта адаптера диагностических данных, включая специализированный редактор конфигурации, см. в разделе Пример проекта для создания адаптера диагностических данных.

Создание и установка адаптера диагностических данных

Создание и установка адаптера диагностических данных

  1. Создайте новую библиотеку классов.

    1. В меню Файл выберите пункт Создать и щелкните Новый проект.

    2. В разделе Типы проектов выберите используемый язык.

    3. В разделе Установленные шаблоны Visual Studio выберите Библиотека классов.

    4. Введите имя адаптера диагностических данных.

    5. Нажмите кнопку ОК.

  2. Добавьте сборку Microsoft.VisualStudio.QualityTools.ExecutionCommon.

    1. В обозревателе решений щелкните правой кнопкой мыши папку Ссылки и выберите команду Добавить ссылку.

    2. Щелкните .NET и найдите Microsoft.VisualStudio.QualityTools.ExecutionCommon.dll.

    3. Нажмите кнопку ОК.

  3. Добавьте сборку Microsoft.VisualStudio.QualityTools.Common.

    1. В обозревателе решений щелкните правой кнопкой мыши папку Ссылки и выберите команду Добавить ссылку.

    2. Щелкните /.NET и найдите Microsoft.VisualStudio.QualityTools.Common.dll.

    3. Нажмите кнопку ОК.

  4. Добавьте в класс файла следующие выражения с оператором using:

    using Microsoft.VisualStudio.TestTools.Common;
    using Microsoft.VisualStudio.TestTools.Execution;
    using System.Linq;
    using System.Text;
    using System.Xml;
    using System;
    
  5. Добавьте атрибут DataCollectorTypeUriAttribute в класс адаптера диагностических данных, чтобы он определялся как адаптер диагностических данных, заменив параметры Company, Product и Version соответствующими сведениями об этом адаптере диагностических данных:

    [DataCollectorTypeUri("datacollector://Company/Product/Version")]
    
  6. Добавьте в класс атрибут DataCollectorFriendlyNameAttribute, заменив параметры соответствующими сведениями об этом адаптере диагностических данных.

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

    Это понятное имя будет отображаться в действии параметров тестирования.

    Примечание

    Можно также добавить атрибут DataCollectorConfigurationEditorAttribute, чтобы указать тип Type пользовательского редактора конфигураций для этого адаптера данных, а также при необходимости задать файл справки, используемый для редактора.

    Кроме того, можно применить атрибут DataCollectorEnabledByDefaultAttribute, указав тем самым, что адаптер должен быть всегда включен.

  7. Класс создаваемого адаптера диагностических данных должен быть унаследован от класса DataCollector следующим образом:

    public class MyDiagnosticDataAdapter : DataCollector
    
  8. Добавление локальных переменных производится следующим образом.

    private DataCollectionEvents dataEvents;
    private DataCollectionLogger dataLogger;
    private DataCollectionSink dataSink;
    private XmlElement configurationSettings;
    
  9. Добавьте метод Initialize и метод Dispose. С помощью метода Initialize можно инициализировать приемник данных и любые данные конфигурации из параметров тестирования, а также регистрировать требуемые обработчики событий. Это делается следующим образом.

    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. Для получения файла журнала, созданного во время выполнения теста, используйте следующий код обработчика событий и закрытый метод:

    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;
    }
    

    Эти файлы вложены в результаты теста. Если при создании ошибки на основе результатов теста используется Test Runner, эти файлы также добавляются к ошибке.

    Если параметра тестирования требуется использовать собственный редактор для сбора данных, см. раздел Практическое руководство. Создание специализированного редактора данных для адаптера диагностических данных.

  11. Для сбора файла журнала при завершении теста на основе пользовательской настройки параметров тестирования необходимо создать файл App.config и добавить его в решение. Этот файл, имеющий следующий формат, должен содержать URI для адаптера диагностических данных для его идентификации. Вместо параметров "Company/ProductName/Version" вставьте реальные значения.

    Примечание

    Если не требуется настраивать сведения для адаптера диагностических данных, создавать файл конфигурации не нужно.

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

    Примечание

    Элемент конфигурации по умолчанию может содержать любые необходимые данные.Если пользователь не настраивает адаптер диагностических данных в параметрах тестирования, при выполнении адаптера диагностических данных ему будут передаваться данные по умолчанию.Поскольку XML-код, добавляемый в раздел <DefaultConfigurations>, скорее всего, не является частью объявленной схемы, можно пропустить все создаваемые им ошибки XML.

    Имеются другие примеры файлов конфигурации в следующей папке, в зависимости от каталога установки: Program Files\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\DataCollectors.

    Дополнительные сведения о том, как настраивать параметры тестирования для использования среды при выполнении тестов, см. в разделах Создание параметров тестирования для ручных тестов и Создание параметров тестирования для автоматических тестов в составе плана тестирования.

    Дополнительные сведения об установке файла конфигурации см. в разделе Практическое руководство. Установка настраиваемого адаптера диагностических данных.

  12. Выполните построение решения для создания сборки адаптера диагностических данных.

  13. Сведения об установке пользовательского редактора см. в разделе Практическое руководство. Установка настраиваемого адаптера диагностических данных.

  14. Дополнительные сведения о том, как настраивать параметры тестирования для использования среды при выполнении тестов, см. в разделах Создание параметров тестирования для ручных тестов и Создание параметров тестирования для автоматических тестов в составе плана тестирования.

  15. Для выбора адаптера диагностических данных необходимо сначала выбрать существующие параметры тестирования или создать новый параметр с помощью Microsoft Test Manager или Microsoft Visual Studio 2010. Адаптер отображается на вкладке Данные и диагностика параметров тестирования; указывается понятное имя, присвоенное классу.

  16. При выполнении тестов в Microsoft Test Manager эти параметры тестирования можно присвоить плану тестирования перед выполнением тестов или использовать команду "Запуск с параметрами" для присвоения или переопределения параметров тестирования. Дополнительные сведения о параметрах тестирования см. в разделе Настройка компьютеров и сбор диагностических данных с помощью параметров тестирования.

    Если тесты выполняются из Microsoft Visual Studio 2010, необходимо выбрать данные параметры тестирования в качестве активных. Дополнительные сведения о параметрах тестирования см. в разделе Создание параметров тестирования для запуска автоматических тестов из Visual Studio.

  17. Выполните тесты с данными параметрами тестирования, выбрав свой адаптер диагностических данных.

    Указанный файл данных присоединяется к результатам тестов.

См. также

Задачи

Создание параметров тестирования для запуска автоматических тестов из Visual Studio

Создание параметров тестирования для автоматических тестов в составе плана тестирования

Создание параметров тестирования для ручных тестов

Ссылки

DataCollectorConfigurationEditorAttribute

DataCollectionEvents

DataCollector

[T:Microsoft.VisualStudio.TestTools.Execution.DataCollectionSinkT:Microsoft.VisualStudio.TestTools.Execution.DataCollectorTypeUriAttribute]

DataCollectorFriendlyNameAttribute

DataCollectorEnabledByDefaultAttribute

Основные понятия

Настройка компьютеров и сбор диагностических данных с помощью параметров тестирования

Практическое руководство. Создание специализированного редактора данных для адаптера диагностических данных