Практическое руководство. Создание адаптера диагностических данных
Опубликовано: Июль 2016
Чтобы создать адаптер диагностических данных, нужно создать библиотеку классов с помощью Visual Studio и добавить в нее интерфейсы API адаптера диагностических данных, входящие в Visual Studio Enterprise. Любые необходимые данные можно отправить в DataCollectionSink инфраструктуры в виде потока или файла при обработке событий, возникших во время тестового запуска. Потоки или файлы, отправляемые в объект DataCollectionSink, при окончании теста сохраняются в виде вложений в результатах теста. При создании ошибки на основе этих результатов теста и при использовании Test Runner эти файлы также связываются с ошибкой.
Можно создать адаптер диагностических данных, влияющий на компьютер, на котором выполняются тесты, или на компьютер, являющийся частью среды, в которой выполняется тестируемое приложение. Например, он может выполнять сбор файлов на тестовом компьютере (на котором выполняются тесты) или на компьютере, выполняющем роль веб-сервера для приложения.
Адаптеру диагностических данных можно присвоить понятное имя, которое отображается при создании параметров тестирования в Test Manager или Visual Studio. Параметры тестирования позволяют указать роль компьютера, которая будет запускать в среде определенные адаптеры диагностических данных при выполнении тестов. Адаптеры диагностических данных также можно настроить при создании параметров тестирования. Например, можно создать адаптер диагностических данных, собирающий пользовательские журналы с веб-сервера. При создании параметров тестирования можно указать, чтобы этот адаптер диагностических данных запускался на одном или нескольких компьютерах, исполняющих роль веб-сервера, и изменить конфигурацию параметров тестирования для сбора лишь трех журналов, создававшихся последними. Дополнительные сведения о параметрах тестирования см. в разделе Настройка компьютеров и сбор диагностических данных с помощью параметров тестирования.
При выполнении тестов создаются события, чтобы адаптер диагностических данных мог выполнять задачи в этих точках теста.
Важно!
Эти события могут возникать на различных потоках (в особенности при выполнении тестов на нескольких компьютерах).Таким образом, необходимо знать о вероятности возникновения проблем в связи с потоками, чтобы случайно не повредить внутренние данные настраиваемого адаптера.Убедитесь в потокобезопасности адаптера диагностических данных.
Далее перечислены некоторые ключевые события, которые можно использовать при создании адаптера диагностических данных. Полный список событий адаптера диагностических данных см. в абстрактном классе DataCollectionEvents.
Событие |
Описание |
---|---|
Начало тестового запуска |
|
Завершение тестового запуска |
|
Начало каждого теста в тестовом запуске |
|
Завершение каждого теста в тестовом запуске |
|
Начало каждого шага теста |
|
Окончание каждого шага теста |
Примечание
При завершении ручного теста прекращается отправка событий сбора данных в адаптер диагностических данных.Повторно выполняемый тест получает новый идентификатор тестового случая.Если пользователь сбрасывает тест в ходе выполнения теста (что вызывает событие TestCaseReset) или изменяет результат шага теста, отправка событий сбора данных адаптеру диагностических данных не производится, но идентификатор тестового случая не изменяется.Чтобы определить, выполнялся ли сброс тестового случая, необходимо отследить идентификатор тестового случая в адаптере диагностических данных.
Чтобы создать адаптер диагностических данных, собирающий данные в файл на основе информации, заданной при создании параметров тестирования, выполните следующие действия.
Полный пример проекта адаптера диагностических данных, включая специализированный редактор конфигурации, см. в разделе Пример проекта для создания адаптера диагностических данных.
Создание и установка адаптера диагностических данных
Создание и установка адаптера диагностических данных
Создайте новую библиотеку классов.
В меню Файл последовательно выберите команды Создать и Создать проект.
В разделе Типы проектов выберите используемый язык.
В разделе Установленные шаблоны Visual Studio выберите Библиотека классов.
Введите имя адаптера диагностических данных.
Нажмите кнопку ОК.
Добавьте сборку Microsoft.VisualStudio.QualityTools.ExecutionCommon.
В обозревателе решений щелкните правой кнопкой мыши пункт Ссылки и выберите команду Добавить ссылку.
Выберите пункт .NET и найдите Microsoft.VisualStudio.QualityTools.ExecutionCommon.dll.
Нажмите кнопку ОК.
Добавьте сборку Microsoft.VisualStudio.QualityTools.Common.
В обозревателе решений щелкните правой кнопкой мыши папку Ссылки и выберите команду Добавить ссылку.
Выберите пункт /.NET и найдите Microsoft.VisualStudio.QualityTools.Common.dll.
Нажмите кнопку ОК.
Добавьте в класс файла следующие выражения с оператором using:
using Microsoft.VisualStudio.TestTools.Common; using Microsoft.VisualStudio.TestTools.Execution; using System.Linq; using System.Text; using System.Xml; using System;
Добавьте атрибут DataCollectorTypeUriAttribute в класс адаптера диагностических данных, чтобы он определялся как адаптер диагностических данных, заменив параметры Company, Product и Version соответствующими сведениями об этом адаптере диагностических данных:
[DataCollectorTypeUri("datacollector://Company/Product/Version")]
Добавьте в класс атрибут DataCollectorFriendlyNameAttribute, заменив параметры соответствующими сведениями об этом адаптере диагностических данных.
[DataCollectorFriendlyName("Collect Log Files", false)]
Это понятное имя будет отображаться в действии параметров тестирования.
Примечание
Можно также добавить атрибут DataCollectorConfigurationEditorAttribute, чтобы указать тип Type пользовательского редактора конфигураций для этого адаптера данных, а также при необходимости задать файл справки, используемый для редактора.
Кроме того, можно применить атрибут DataCollectorEnabledByDefaultAttribute, указав тем самым, что адаптер должен быть всегда включен.
Класс создаваемого адаптера диагностических данных должен быть унаследован от класса DataCollector следующим образом:
public class MyDiagnosticDataAdapter : DataCollector
Добавление локальных переменных производится следующим образом.
private DataCollectionEvents dataEvents; private DataCollectionLogger dataLogger; private DataCollectionSink dataSink; private XmlElement configurationSettings;
Добавьте метод 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); } }
Для получения файла журнала, созданного во время выполнения теста, используйте следующий код обработчика событий и закрытый метод:
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, эти файлы также добавляются к ошибке.
Если вы хотите использовать собственный редактор для сбора данных, используемых в параметрах тестирования, см. раздел Практическое руководство. Создание специализированного редактора данных для адаптера диагностических данных.
Для сбора файла журнала при завершении теста на основе пользовательской настройки параметров тестирования необходимо создать файл 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"> <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>
Примечание
Элемент конфигурации по умолчанию может содержать любые необходимые данные.Если пользователь не настраивает адаптер диагностических данных в параметрах тестирования, при выполнении адаптера диагностических данных ему будут передаваться данные по умолчанию.Поскольку XML-код, добавляемый в раздел <DefaultConfigurations>, скорее всего, не является частью объявленной схемы, можно пропустить все создаваемые им ошибки XML.
Другие примеры файлов конфигурации можно найти по следующему пути (в зависимости от каталога установки): Program Files\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\DataCollectors.
Дополнительные сведения о настройке параметров тестирования для использования среды при выполнении тестов см. в разделе Сбор дополнительных данных диагностики в ручных тестах или Создание параметров тестирования для автоматических системных тестов с помощью Microsoft Test Manager.
Дополнительные сведения об установке файла конфигурации см. в разделе Практическое руководство. Установка настраиваемого адаптера диагностических данных.
Выполните построение решения для создания сборки адаптера диагностических данных.
Дополнительные сведения об установке собственного редактора см. в разделе Практическое руководство. Установка настраиваемого адаптера диагностических данных.
Дополнительные сведения о настройке параметров тестирования для использования среды при выполнении тестов см. в разделе Сбор дополнительных данных диагностики в ручных тестах или Создание параметров тестирования для автоматических системных тестов с помощью Microsoft Test Manager.
Чтобы выбрать адаптер диагностических данных, необходимо выбрать существующие параметры тестирования или создать новый параметр с помощью Microsoft Test Manager или Visual Studio. Адаптер отображается на вкладке Данные и диагностика параметров тестирования; указывается понятное имя, присвоенное классу.
При выполнении тестов в Microsoft Test Manager эти параметры тестирования можно присвоить плану тестирования перед выполнением тестов или использовать команду "Запуск с параметрами" для присвоения или переопределения параметров тестирования. Дополнительные сведения о параметрах тестирования см. в разделе Настройка компьютеров и сбор диагностических данных с помощью параметров тестирования.
Если тесты выполняются из Visual Studio, необходимо сделать эти параметры тестирования активными. Дополнительные сведения о параметрах тестирования см. в разделе Указание параметров тестирования для тестов Visual Studio.
Выполните тесты с данными параметрами тестирования, выбрав свой адаптер диагностических данных.
Указанный файл данных присоединяется к результатам тестов.
См. также
DataCollectorConfigurationEditorAttribute
DataCollectionEvents
DataCollector
DataCollectionSink
DataCollectorTypeUriAttribute
DataCollectorFriendlyNameAttribute
DataCollectorEnabledByDefaultAttribute
Настройка компьютеров и сбор диагностических данных с помощью параметров тестирования
Указание параметров тестирования для тестов Visual Studio
Создание параметров тестирования для автоматических системных тестов с помощью Microsoft Test Manager
Сбор дополнительных данных диагностики в ручных тестах
Практическое руководство. Создание специализированного редактора данных для адаптера диагностических данных