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


Настройка модульных тестов с помощью файла .runsettings

Файл .runsettings можно использовать для настройки того, как выполняются модульные тесты. Например, его можно использовать для изменения версии .NET, в которой выполняются тесты, каталога для результатов теста или данных, собранных во время тестового выполнения. Обычно используется .runsettings-файл для настройки анализа покрытия кода.

Файлы Runsettings можно использовать для конфигурации тестов, запускаемых из командной строки , из интегрированной среды разработки или в рабочем процессе сборки с помощью Azure Test Plans или Azure DevOps Server (ранее известного как Team Foundation Server (TFS)).

Файлы runsettings являются необязательными. Если вам не требуется специальная конфигурация, вам не нужен файл .runsettings.

Создание файла параметров запуска и его настройка

  1. Добавьте файл параметров запуска в решение. В Обозревателе решенийв контекстном меню решения выберите Добавить>Новый элементи выберите XML-файл. Сохраните файл с именем, например test.runsettings.

    Если вы не видите все шаблоны элементов, выберите показать все шаблоны, а затем выберите шаблон элемента.

    Совет

    Имя файла не имеет значения, если вы используете расширение .runsettings.

  2. Добавьте содержимое из файла Example *.runsettings, а затем настройте его в соответствии с вашими потребностями, как описано в следующих разделах.

  3. Укажите файл *.runsettings, который вы хотите использовать, одним из следующих методов:

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

Если вы хотите включать или выключать настраиваемые параметры в интегрированной среде разработки, выберите или отмените выбор файла в меню Test.

Совет

Вы можете создать несколько .runsettings файла в решении и выбрать один из них в качестве файла параметров активного тестирования по мере необходимости.

Указание файла параметров выполнения в интегрированной среде разработки

Доступные методы зависят от версии Visual Studio.

Visual Studio 2019 версии 16.4 и более поздних версий

Существует три способа указания файла параметров запуска в Visual Studio 2019 версии 16.4 и более поздних версий.

Автоматическое определение файла параметров выполнения

Заметка

Это будет работать только для файла с именем .runsettings.

Чтобы автоматически определить файл параметров выполнения, поместите его в корневой каталог решения.

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

  • Выберите Средства>Опции>Тест>Автообнаружение файлов runsettings

    Параметр автоопределения файла настроек запусков в Visual Studio

  • Выберите Тест>Настроить настройки выполнения>Автоматическое обнаружение файлов runsettings

    меню файла runsettings автоматическое обнаружение в Visual Studio

Вручную выберите файл параметров выполнения

В интегрированной среде разработки выберите Test>Configure Run Settings>Select Solution Wide runsettings File, а затем выберите файл .runsettings.

  • Этот файл замещает файл .runsettings в корне решения, при его наличии, и применяется ко всем выполняемым тестам.
  • Этот выбор файла сохраняется только локально.

Выберите в Visual Studio в меню файл параметров запуска теста на уровне решения

Установите свойство сборки

Добавьте свойство сборки в проект с помощью файла проекта или файла Directory.Build.props. Файл параметров запуска для проекта указывается свойством RunSettingsFilePath.

  • Параметры запуска на уровне проекта в настоящее время поддерживаются в проектах C#, VB, C++и F#.
  • Файл, указанный для проекта, переопределяет любой другой файл параметров запуска, указанный в решении.
  • Эти свойства MSBuild можно использовать для указания пути к файлу runsettings.

Пример указания файла .runsettings для проекта:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <RunSettingsFilePath>$(MSBuildProjectDirectory)\example.runsettings</RunSettingsFilePath>
  </PropertyGroup>
  ...
</Project>

Visual Studio 2019 версии 16.3 и более ранних версий

Чтобы указать файл параметров выполнения в интегрированной среде разработки, выберите Test>Выбрать файл настроек. Перейдите к файлу .runsettings и выберите его.

Выберите пункт меню

Файл отображается в меню "Тест", и его можно выбрать или отменить. Когда выбран, файл настроек выполнения применяется всякий раз, когда вы выбираете анализировать покрытие кода.

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

Чтобы выполнить тесты из командной строки, используйте vstest.console.exeи укажите файл параметров с помощью параметра /Settings.

  1. Откройте командную строку разработчика для Visual Studio.

  2. Введите команду, аналогичную следующей:

    vstest.console.exe MyTestAssembly.dll /EnableCodeCoverage /Settings:CodeCoverage.runsettings
    

    или

    vstest.console.exe --settings:test.runsettings test.dll
    

Дополнительные сведения см. в VSTest.Console.exe параметрах командной строки.

Файл *.runsettings

Файл *.runsettings — это XML-файл, содержащий различные элементы конфигурации в элементе RunSettings. В следующих разделах подробно описаны различные элементы. Полный пример см. в примере файла *.runsettings.

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
  <!-- configuration elements -->
</RunSettings>

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

Элемент RunConfiguration

<RunConfiguration>
    <MaxCpuCount>1</MaxCpuCount>
    <ResultsDirectory>.\TestResults</ResultsDirectory>
    <TargetPlatform>x86</TargetPlatform>
    <TargetFrameworkVersion>net6.0</TargetFrameworkVersion>
    <TestAdaptersPaths>%SystemDrive%\Temp\foo;%SystemDrive%\Temp\bar</TestAdaptersPaths>
    <TestCaseFilter>(TestCategory != Integration) &amp; (TestCategory != UnfinishedFeature)</TestCaseFilter>
    <TestSessionTimeout>10000</TestSessionTimeout>
    <TreatNoTestsAsError>true</TreatNoTestsAsError>
</RunConfiguration>

Элемент RunConfiguration может включать следующие элементы:

Узел По умолчанию Значения
MaxCpuCount 1 Имя параметра чувствительно к регистру, и его легко неправильно написать как MaxCPUCount.

Этот параметр определяет уровень параллелизма на уровне процесса. Используйте 0, чтобы включить максимальный параллелизм на уровне процесса.

Этот параметр определяет максимальное количество тестовых библиотек DLL или других тестовых контейнеров, которые могут выполняться параллельно. Каждая библиотека DLL выполняется в собственном процессе testhost и изолирована на уровне процесса от тестов в других тестовых библиотеках DLL. Этот параметр не заставляет тесты в каждой тестовой библиотеке DLL выполняться параллельно. Управление параллельным выполнением в библиотеке DLL (на уровне потока) возлагается на тестовую платформу, такую как MSTest, XUnit или NUnit.

Значение по умолчанию — 1, что означает, что одновременно выполняется только один testhost. Специальное значение 0 позволяет использовать столько тестовых узлов, сколько логических процессоров (например, 6, для компьютера с 6 физическими ядрами без многопоточности, или 12, для компьютера с шестью физическими ядрами с поддержкой многопоточности).

Количество различных библиотек DLL в процессе выполнения определяет фактическое количество запущенных тестхостов.
КаталогРезультатов Каталог, в котором помещаются результаты теста. Путь относится к каталогу, содержаму файл .runsettings.
TargetFrameworkVersion net40 или netcoreapp1.0 пропустите весь этот тег для автоматического определения.

Этот параметр определяет версию платформы или семейство платформ для выполнения тестов.

Допустимые значения — это любой моникер платформы, например net48, net472,net6.0, net5.0, netcoreapp3.1, uap10.0 или любое допустимое полное имя платформы, например.NETFramework,Version=v4.7.2 или .NETCoreApp,Version=v6.0.0. Для обратной совместимости принимаются Framework35, Framework40, Framework45, FrameworkCore10, FrameworkUap10, соответственно означающиеnet35, net40, net45, netcoreapp1.0 и uap10.0. Все значения регистронезависимые.

Предоставленное значение используется для определения используемого поставщика среды выполнения тестирования. Каждый поставщик среды выполнения тестирования должен уважать используемое семейство платформ, но может не учитывать точную версию платформы:

Для .NET Framework 4.5.1 — 4.8 используется тест-хост, созданный с указанной точной версией. Для значений, выходящих за пределы этого диапазона значений, используется .NET Framework 4.5.1 testhost.

Для .NET <TargetFramework> тестового проекта (или более точно runtimeconfig.json) определяет фактическую версию.

Для UWP приложение тестового проекта само по себе является testhost и определяет фактическую версию UWP, которая используется.

Опустите элемент TargetFrameworkVersion из файла .runsettings, чтобы автоматически определить версию платформы из встроенных двоичных файлов.

При автоматическом определении все целевые платформы объединяются в одну общую платформу. При обнаружении другой версии из одного семейства целевой платформы выбирается более новая версия (например, net452, net472, net48 = net48).

Для запускающей программы .NET Framework (в Visual Studio или в командной строке для разработчика vstest.console.exe) целевой платформой обычно является net40. Для runner .NET (dotnet test + DLL) общая целевая платформа имеет значение netcoreapp1.0.
ТаргетПлатформ x86 исключить этот тег целиком для автоматического определения.

Этот параметр определяет архитектуру, используемую для выполнения тестов. Возможные значения: x86, x64, ARM, ARM64, S390x.

При автоматическом определении архитектура библиотек DLL "AnyCPU" может различаться в зависимости от запускающего средства. Для runner .NET Framework (в Visual Studio или vstest.console.exe в командной строке разработчика) по умолчанию используется x86. Для runner .NET (dotnet test) по умолчанию используется текущая архитектура процесса.

ОбрабатыватьОшибыАдаптераТестовКакПредупреждения неверный ложь, истина
TestAdaptersPaths Один или несколько путей к каталогу, в котором находятся TestAdapters
TestCaseFilter Выражение фильтра в формате><свойство <оператор><значение>[|&<выражение>]. Логический оператор & должен быть представлен сущностью HTML &. Выражения могут быть заключены в скобки. Подробный синтаксис структуры выражений см. в разделе vstest/docs/filter.md.
TestSessionTimeout Позволяет пользователям завершать тестовый сеанс при превышении заданного времени ожидания, указанного в миллисекундах. Установка времени ожидания гарантирует, что ресурсы хорошо используются и тестовые сеансы ограничены заданным временем. Этот параметр доступен в Visual Studio 2017 версии 15.5 и более поздних версий.
DotnetHostPath Укажите пользовательский путь к узлу dotnet, который используется для запуска testhost. Это полезно, когда вы создаете свою собственную Dotnet, например, в случае создания репозитория dotnet/runtime. Указание этого параметра пропускает поиск testhost.exeи вынуждает использовать testhost.dll.
Считать отсутствие тестов ошибкой ложный истина или ложь
Укажите логическое значение, которое определяет код выхода при отсутствии тестов. Если значение true, а тесты не обнаружены, возвращается ненулевой код выхода. В противном случае возвращается ноль.

Элемент DataCollectors (диагностические адаптеры данных)

Элемент DataCollectors указывает параметры адаптеров диагностических данных. Адаптеры диагностических данных собирают дополнительные сведения о среде и тестируемом приложении. Каждый адаптер имеет параметры по умолчанию, и необходимо предоставить только параметры, если вы не хотите использовать значения по умолчанию.

<DataCollectionRunSettings>
  <DataCollectors>
    <!-- data collectors -->
  </DataCollectors>
</DataCollectionRunSettings>

Сборщик данных CodeCoverage

Сборщик данных покрытия кода создает журнал, в котором указано, какие части кода приложения были протестированы. Подробные сведения о настройке параметров покрытия кода см. в разделе Настройка анализа покрытия кода.

<DataCollector friendlyName="Code Coverage" uri="datacollector://Microsoft/CodeCoverage/2.0" assemblyQualifiedName="Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector, Microsoft.VisualStudio.TraceCollector, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  <Configuration>
    <CodeCoverage>
      <ModulePaths>
        <Exclude>
          <ModulePath>.*CPPUnitTestFramework.*</ModulePath>
        </Exclude>
      </ModulePaths>

      <UseVerifiableInstrumentation>True</UseVerifiableInstrumentation>
      <AllowLowIntegrityProcesses>True</AllowLowIntegrityProcesses>
      <CollectFromChildProcesses>True</CollectFromChildProcesses>
      <CollectAspDotNet>False</CollectAspDotNet>
    </CodeCoverage>
  </Configuration>
</DataCollector>

Сборщик данных VideoRecorder

Сборщик видеоданных записывает запись экрана при выполнении тестов. Эта запись полезна для отладки тестов интерфейса пользователя. Сборщик видеоданных доступен в Visual Studio 2017 версии 15.5 и более поздних версий. Для примера настройки этого сборщика данных см. файл *.runsettings.

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

Обвинить сборщика данных

Этот параметр поможет изолировать проблемный тест, который приводит к сбою узла тестирования. При запуске сборщика создается выходной файл (Sequence.xml) в TestResults, который фиксирует порядок выполнения теста до сбоя.

Вы можете запускать blame в трех разных режимах:

  • Режим файла последовательности: создание файла, содержащего список тестов до момента зависания.
  • Режим аварийного дампа: создание дампа при сбое testhost
  • Режим создания дампа: создание дампа, если тест не завершается до заданного тайм-аута

Конфигурация XML должна быть помещена непосредственно в узел <RunSettings>:

<RunSettings>
  <RunConfiguration>
  </RunConfiguration>
  <LoggerRunSettings>
    <Loggers>
      <Logger friendlyName="blame" enabled="True" />
    </Loggers>
  </LoggerRunSettings>
  <DataCollectionRunSettings>
    <DataCollectors>
      <!-- Enables blame -->
      <DataCollector friendlyName="blame" enabled="True">
        <Configuration>
          <!-- Enables crash dump, with dump type "Full" or "Mini".
          Requires ProcDump in PATH for .NET Framework. -->
          <CollectDump DumpType="Full" />
          <!-- Enables hang dump or testhost and its child processes 
          when a test hangs for more than 10 minutes. 
          Dump type "Full", "Mini" or "None" (just kill the processes). -->
          <CollectDumpOnTestSessionHang TestTimeout="10min" HangDumpType="Full" />
        </Configuration>
      </DataCollector>
    </DataCollectors>
  </DataCollectionRunSettings>
</RunSettings>

ПараметрыТестовогоЗапуска

<TestRunParameters>
    <Parameter name="webAppUrl" value="http://localhost" />
    <Parameter name="docsUrl" value="https://learn.microsoft.com" />
</TestRunParameters>

Параметры тестового запуска предоставляют способ определения переменных и значений, доступных для тестов во время выполнения. Доступ к параметрам с помощью свойства MSTest TestContext.Properties (или NUnit TestContext):

public TestContext TestContext { get; set; }

[TestMethod] // [Test] for NUnit
public void HomePageTest()
{
    string appUrl = TestContext.Properties["webAppUrl"];
}

Чтобы использовать параметры тестового запуска, добавьте общедоступное свойство TestContext в тестовый класс.

Элемент LoggerRunSettings

В разделе LoggerRunSettings определяется один или несколько логгеров для тестового запуска. Наиболее распространенными средствами ведения журнала являются консоль, файл результатов тестирования Visual Studio (trx) и html.

<LoggerRunSettings>
    <Loggers>
      <Logger friendlyName="console" enabled="True">
        <Configuration>
            <Verbosity>quiet</Verbosity>
        </Configuration>
      </Logger>
      <Logger friendlyName="trx" enabled="True">
        <Configuration>
          <LogFileName>foo.trx</LogFileName>
        </Configuration>
      </Logger>
      <Logger friendlyName="html" enabled="True">
        <Configuration>
          <LogFileName>foo.html</LogFileName>
        </Configuration>
      </Logger>
    </Loggers>
  </LoggerRunSettings>

Элемент MSTest

Эти параметры относятся к адаптеру тестирования, который запускает методы тестирования с атрибутом TestMethodAttribute.

<MSTest>
    <MapInconclusiveToFailed>True</MapInconclusiveToFailed>
    <CaptureTraceOutput>false</CaptureTraceOutput>
    <DeleteDeploymentDirectoryAfterTestRunIsComplete>False</DeleteDeploymentDirectoryAfterTestRunIsComplete>
    <DeploymentEnabled>False</DeploymentEnabled>
    <ConsiderFixturesAsSpecialTests>False</ConsiderFixturesAsSpecialTests>
    <AssemblyResolution>
      <Directory path="D:\myfolder\bin\" includeSubDirectories="false"/>
    </AssemblyResolution>
</MSTest>
Конфигурация По умолчанию Значения
ПринудительныйРежимНаследия ложный В более ранних версиях Visual Studio адаптер MSTest оптимизирован для ускорения и повышения масштабируемости. Некоторые действия, такие как порядок выполнения тестов, может быть не так же, как в предыдущих выпусках Visual Studio. Задайте значение true, чтобы использовать старый тестовый адаптер.

Например, этот параметр можно использовать, если у вас есть app.config файл, указанный для модульного теста.

Рекомендуем рассмотреть возможность рефакторинга тестов, чтобы использовать более новый адаптер.
SettingsFile Вы можете указать файл параметров теста для использования с адаптером MSTest здесь. Вы также можете указать файл параметров теста в меню параметров.

Если указать это значение, необходимо также задать ForcedLegacyMode в true.

<ForcedLegacyMode>true</ForcedLegacyMode>
DeploymentEnabled истинный Если задать значение false, элементы развертывания, указанные в методе тестирования, не копируются в каталог развертывания.
CaptureTraceOutput истинный Перехват текстовых сообщений, поступающих из API Console.Write*, Trace.Write*, Debug.Write*, которые будут связаны с текущим тестом.
Включить методы тестирования базовых классов из других сборок истинный Значение, указывающее, следует ли включить обнаружение методов тестирования из базовых классов в другой сборке, отличной от наследующего тестового класса.
ЖизненныйЦиклОчисткиКласса EndOfClass Если вы хотите, чтобы очистка класса произошла в конце сборки, задайте для него значение EndOfAssembly. (Больше не поддерживается начиная с MSTest версии 4, поскольку EndOfClass — это поведение по умолчанию и единственное поведение класса Cleanup )
MapNotRunnableToFailed истинный Значение, указывающее, сопоставляется ли невыполняемый результат с провалившимся тестом.
Параллелизация Используется для задания параметров параллелизации:

Потоки/Рабочие: количество потоков или рабочих, используемых для параллелизации, по умолчанию установлено равным числу процессоров на текущем компьютере.

SCOPE: область параллелизации. Его можно задать для MethodLevel. По умолчанию это ClassLevel.

<Parallelize><Workers>32</Workers><Scope>MethodLevel</Scope></Parallelize>
TestTimeout 0 Возвращает глобальное время ожидания указанного тестового случая.
TreatDiscoveryWarningsAsErrors ложный Чтобы сообщать предупреждения об обнаружении тестов как ошибки, установите для этого значение true.
TreatClassAndAssemblyCleanupWarningsAsErrors ложный Чтобы воспринимать недостатки в очистке класса как ошибки, установите для этого параметра значение true.
DeployTestSourceDependencies истинный Значение, указывающее, следует ли развертывать ссылки на тестовые исходники.
DeleteDeploymentDirectoryAfterTestRunIsComplete истина Чтобы сохранить каталог развертывания после тестового запуска, задайте это значение false.
ОтобразитьНеопределенныеКакНеудачные ложный Если тест завершается с неоднозначным состоянием, он сопоставляется с пропущенным состоянием в обозревателе Test Explorer. Если вы хотите, чтобы неокончательные тесты отображались как неудачные, задайте значение true.
РассматривайтеФикстурыКакСпециальныеТесты неверный Чтобы отобразить AssemblyInitialize, AssemblyCleanup, ClassInitialize, ClassCleanup в виде отдельных записей в журнале Visual Studio и Visual Studio Code Test Explorer и .trx, установите для этого параметра значение true.
РезолюцияСобрания ложный При поиске и выполнении модульных тестов можно указать пути к дополнительным сборкам. Например, используйте эти пути для сборок зависимостей, которые не входят в тот же каталог, что и тестовая сборка. Чтобы указать путь, используйте элемент пути к каталогу. Пути могут включать переменные среды.

<AssemblyResolution> <Directory path="D:\myfolder\bin\" includeSubDirectories="false"/> </AssemblyResolution>

Обратите внимание, что эта функция применяется только при использовании целевого объекта .NET Framework.

Пример файла .runsettings

В следующем XML-файле показано содержимое типичного файла .runsettings. Скопируйте этот код и измените его в соответствии с вашими потребностями.

Каждый элемент файла является необязательным, так как он имеет значение по умолчанию.

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
  <!-- Configurations that affect the Test Framework -->
  <RunConfiguration>
    <!-- Use 0 for maximum process-level parallelization. This does not force parallelization within the test DLL (on the thread-level). You can also change it from the Test menu; choose "Run tests in parallel". Unchecked = 1 (only 1), checked = 0 (max). -->
    <MaxCpuCount>1</MaxCpuCount>
    <!-- Path relative to directory that contains .runsettings file-->
    <ResultsDirectory>.\TestResults</ResultsDirectory>

    <!-- Omit the whole tag for auto-detection. -->
    <!-- [x86] or x64, ARM, ARM64, s390x  -->
    <!-- You can also change it from the Test menu; choose "Processor Architecture for AnyCPU Projects" -->
    <TargetPlatform>x86</TargetPlatform>

    <!-- Any TargetFramework moniker or omit the whole tag for auto-detection. -->
    <!-- net48, [net40], net6.0, net5.0, netcoreapp3.1, uap10.0 etc. -->
    <TargetFrameworkVersion>net40</TargetFrameworkVersion>

    <!-- Path to Test Adapters -->
    <TestAdaptersPaths>%SystemDrive%\Temp\foo;%SystemDrive%\Temp\bar</TestAdaptersPaths>

    <!-- TestCaseFilter expression -->
    <TestCaseFilter>(TestCategory != Integration) &amp; (TestCategory != UnfinishedFeature)</TestCaseFilter>

    <!-- TestSessionTimeout was introduced in Visual Studio 2017 version 15.5 -->
    <!-- Specify timeout in milliseconds. A valid value should be greater than 0 -->
    <TestSessionTimeout>10000</TestSessionTimeout>

    <!-- true or false -->
    <!-- Value that specifies the exit code when no tests are discovered -->
    <TreatNoTestsAsError>true</TreatNoTestsAsError>
  </RunConfiguration>

  <!-- Configurations for data collectors -->
  <DataCollectionRunSettings>
    <DataCollectors>
      <DataCollector friendlyName="Code Coverage" uri="datacollector://Microsoft/CodeCoverage/2.0" assemblyQualifiedName="Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector, Microsoft.VisualStudio.TraceCollector, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
        <Configuration>
          <CodeCoverage>
            <ModulePaths>
              <Exclude>
                <ModulePath>.*CPPUnitTestFramework.*</ModulePath>
              </Exclude>
            </ModulePaths>

            <!-- We recommend you do not change the following values: -->
            <UseVerifiableInstrumentation>True</UseVerifiableInstrumentation>
            <AllowLowIntegrityProcesses>True</AllowLowIntegrityProcesses>
            <CollectFromChildProcesses>True</CollectFromChildProcesses>
            <CollectAspDotNet>False</CollectAspDotNet>

          </CodeCoverage>
        </Configuration>
      </DataCollector>

      <DataCollector uri="datacollector://microsoft/VideoRecorder/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TestTools.DataCollection.VideoRecorder.VideoRecorderDataCollector, Microsoft.VisualStudio.TestTools.DataCollection.VideoRecorder, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="Screen and Voice Recorder">
        <!--Video data collector was introduced in Visual Studio 2017 version 15.5 -->
        <Configuration>
          <!-- Set "sendRecordedMediaForPassedTestCase" to "false" to add video attachments to failed tests only -->
          <MediaRecorder sendRecordedMediaForPassedTestCase="true"  xmlns="">           ​
            <ScreenCaptureVideo bitRate="512" frameRate="2" quality="20" />​
          </MediaRecorder>​
        </Configuration>
      </DataCollector>

      <!-- Configuration for blame data collector -->
      <DataCollector friendlyName="blame" enabled="True">
      </DataCollector>

    </DataCollectors>
  </DataCollectionRunSettings>

  <!-- Parameters used by tests at run time -->
  <TestRunParameters>
    <Parameter name="webAppUrl" value="http://localhost" />
    <Parameter name="webAppUserName" value="Admin" />
    <Parameter name="webAppPassword" value="Password" />
  </TestRunParameters>

  <!-- Configuration for loggers -->
  <LoggerRunSettings>
    <Loggers>
      <Logger friendlyName="console" enabled="True">
        <Configuration>
            <Verbosity>quiet</Verbosity>
        </Configuration>
      </Logger>
      <Logger friendlyName="trx" enabled="True">
        <Configuration>
          <LogFileName>foo.trx</LogFileName>
        </Configuration>
      </Logger>
      <Logger friendlyName="html" enabled="True">
        <Configuration>
          <LogFileName>foo.html</LogFileName>
        </Configuration>
      </Logger>
      <Logger friendlyName="blame" enabled="True" />
    </Loggers>
  </LoggerRunSettings>

  <!-- Adapter Specific sections -->

  <!-- MSTest adapter -->
  <MSTest>
    <MapInconclusiveToFailed>True</MapInconclusiveToFailed>
    <CaptureTraceOutput>false</CaptureTraceOutput>
    <DeleteDeploymentDirectoryAfterTestRunIsComplete>False</DeleteDeploymentDirectoryAfterTestRunIsComplete>
    <DeploymentEnabled>False</DeploymentEnabled>
    <AssemblyResolution>
      <Directory path="D:\myfolder\bin\" includeSubDirectories="false"/>
    </AssemblyResolution>
  </MSTest>

</RunSettings>

Укажите переменные среды в файле .runsettings

Переменные среды можно задать в файле .runsettings, который может напрямую взаимодействовать с узлом тестирования. Указание переменных среды в файле .runsettings необходимо для поддержки нетривиальных проектов, требующих установки переменных среды, таких как DOTNET_ROOT. Эти переменные задаются во время создания процесса тестового узла, и они доступны в узле.

Пример

Следующий код представляет собой пример файла .runsettings, который передает переменные среды:

<?xml version="1.0" encoding="utf-8"?>
<!-- File name extension must be .runsettings -->
<RunSettings>
  <RunConfiguration>
    <EnvironmentVariables>
      <!-- List of environment variables we want to set-->
      <DOTNET_ROOT>C:\ProgramFiles\dotnet</DOTNET_ROOT>
      <SDK_PATH>C:\Codebase\Sdk</SDK_PATH>
    </EnvironmentVariables>
  </RunConfiguration>
</RunSettings>

Узел runConfiguration должен содержать узел EnvironmentVariables. Переменная среды может быть указана как имя элемента и его значение.

Заметка

Так как эти переменные среды всегда должны быть заданы при запуске тестового узла, тесты всегда должны выполняться в отдельном процессе. Для этого флаг /InIsolation будет установлен, если есть переменные среды, чтобы узел тестирования всегда вызывался.