Советы по написанию MTLM Diagnostic Data Adapter

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

В MSDN хорошо описано, как это сделать. Тем не менее, я хочу поделиться несколькими советами, которые помогут потратить меньше времени на разработку и отладку.


Коллекторы и редакторы настроек

Это не очень следут из документации, но Вы можете написать несколько коллекторов для данных и использовать общий редактор настроек. Разумеется, это имеет смысл, если коллекторы используют общие настройки.

Настройки

Инфраструктура предоставляет хранить настройки коллектора в виде XML. В примере на MSDN используется прямой разбор XML для чтения параметров. Согласитесь, это не совсем правильно, как минимум – с точки зрения правильной декомпозиции. Вы же не хотите повторять этот код и коллекторе, который читает настройки, и в редакторе, который их ещё и пишет. Для того, чтобы код легко читался и поддерживался, я вынес настройки в отдельный класс, и использовал XML сериализацию для конвертации в XML. Получился вот такой код для загрузки:

public static LogsCollectorSettings CreateFromXmlNode(IXPathNavigable node)

{

    if (node == null)

    {

        throw new ArgumentNullException("node");

    }

 

    LogsCollectorSettings settings;

    var serializer = new XmlSerializer(typeof(LogsCollectorSettings));

    var stringReader = new StringReader(node.CreateNavigator().InnerXml);

 

    using (stringReader)

    {

        var xmlReader = XmlReader.Create(stringReader, new XmlReaderSettings {ConformanceLevel = ConformanceLevel.Fragment, CloseInput = false});

 

        using (xmlReader)

        {

            settings = (LogsCollectorSettings)serializer.Deserialize(xmlReader);

        }

    }

 

    return settings;

}

и сохранения:

public void SaveToXmlNode(IXPathNavigable node)

{

    if (node == null)

    {

        throw new ArgumentNullException("node");

    }

 

    var serializer = new XmlSerializer(typeof(LogsCollectorSettings));

    var stringWriter = new StringWriter(CultureInfo.InvariantCulture);

 

    using (stringWriter)

    {

        XmlWriter xmlWriter = XmlWriter.Create(stringWriter, new XmlWriterSettings {OmitXmlDeclaration = true, CloseOutput = false});

 

        using (xmlWriter)

        {

            serializer.Serialize(xmlWriter, this);

        }

 

        node.CreateNavigator().InnerXml = stringWriter.ToString();

    }

}

в качестве node в обоих случаях может передаваться:

DataCollectorSettings.Configuration

или

DataCollectorSettings.DefaultConfiguration

Ну, разумеется, конфигурацию “по-умолчанию” надо только читать в коде редактора, в методе, который их выставляет. Кстати, настройки “по-умолчанию”, которые задаются в app.config-е, должны выглядеть так:

<?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="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">

    <DataCollector typeUri="datacollector://QuestSoftware/LogFilesCollector/1.0">

      <DefaultConfiguration>

        <LogsCollectorSettings xmlns="http://quest.com/schemas/ORAD/LogsCollectorSettings/1.0">

          <WhenClean>CleanOnTestStart</WhenClean>

          <CompressData>true</CompressData>

        </LogsCollectorSettings>

      </DefaultConfiguration>

    </DataCollector>

    <DataCollector typeUri="datacollector://QuestSoftware/LogBlobsCollector/1.0">

      <DefaultConfiguration>

        <LogsCollectorSettings xmlns="http://quest.com/schemas/ORAD/LogsCollectorSettings/1.0">

          <WhenClean>CleanOnTestStart</WhenClean>

          <CompressData>true</CompressData>

        </LogsCollectorSettings>

      </DefaultConfiguration>

    </DataCollector>

  </DataCollectorConfiguration>

</configuration>

Отладка коллектора и редактора настроек

Для отладки написанного кода, необходимо воспользоваться инструкцией по установке коллектора и редактора настроек. Помните о том, что инфраструктура для тестирования испльзуется как и Microsoft Visual Studio 2010 IDE, так и Microsot Test Manager 2010. Для того чтобы они “увидели” новое расширение, скомпилированные файлы нужно копировать в

“%Program Files%\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\DataCollectors”

до запуска этих программ. Очевидно, что сборки будут заблокированы, и Вы не сможете их обновить до тех пор, пока использующие их программы не будут закрыты. Для удобства я придерживался следующих правил:

  1. Проект открывается в IDE в тот момент, когда мои сборки удалены из директории, указанной выше. В противном случае, IDE придётся закрывать перед отладкой.
  2. Для отладки используется Test Manager, который запускается только после того, как скомпилированные сборки помещены в директорию с коллекторами.
  3. После окончания отладки, сборки удаляются из директории.

К сожалению, в Test Manager глотаются все ошибки при инициализации редактора, т.е. Вы не узнаете о том, что инициализация прошла неуспешно. Это ещё один повод вынести максимум логики в отдельный класс и отлаживать его отдельно — например, запуская модульные тесты.

Тем не менее, отладка может понадобиться. Её легко произвести, если после запуска Test Manager-а, присоединиться к нему отладчиком (процесс “mtm.exe”) и поставить точки останова на всех интересующих Вас методах коллектора или редактора.

Установка готового адаптера

Несмотря на то, что установка заключается в копировании сборок в директорию, Ваши тестировщики будут очень признательны за простейший инсталлятор, которй это сделает. Ведь им надо будет распространять адаптер на большое количество машин. Написать простой инсталлятор можно используя Windows Installer XML, а распространять его на виртуалки следуя ALM Rangers Lab Management Guide.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: