Как передать параметры команде dotnet test при использовании NUnit или XUnit

Я разрабатываю несколько сквозных тестов с использованием C # с .NET Core, Selenium и NUnit. Теперь я хочу написать тестовый сценарий входа в систему. Мои тесты запускаются с консоли, просто используя команду dotnet test.

Я просто хочу передать этой команде имя пользователя и пароль и использовать их в своих тестах. Я не могу использовать NUnit-Console, поскольку в настоящий момент он не поддерживает .NET Core.

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


person Tobias von Falkenhayn    schedule 06.01.2019    source источник


Ответы (3)


Если вы хотите избежать использования файла runsettings, вы можете использовать этот обходной путь. Один из рекомендуемых способов передачи параметров - через переменные среды. Итак, в вашем файле C # nunit (или xunit) вы можете сделать что-то вроде:

// in mytest.cs
var user = Environment.GetEnvironmentVariable("TestUser");
var password = Environment.GetEnvironmentVariable("TestPassword");
var url = Environment.GetEnvironmentVariable("TestUrl");

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

#launchtests.cmd
SETLOCAL
SET TestUser='pete001'
SET TestPassword='secret'
SET TestUrl='http://testserver.local/login'
DOTNET TEST mytest.csproj

А теперь самое интересное. Вы можете параметризовать каждый аспект этого. Таким образом, вы можете изменить его на:

#run wity launchtests.cmd pete001 secret 'http://testserver.local/login'
SETLOCAL
SET TestUser=%1
SET TestPassword=%2
SET TestUrl=%3
DOTNET TEST mytest.csproj

Или, если вы хотите запустить тест из конвейера Azure DevOps (fka VSTS или TFS), вы можете просто использовать нотацию $ (...) для встроенных переменных, даже если они помечены как секретные и / или поступают из Azure KeyVault. .

#In Azure DevOps, variables not marked as secret are already added to the environment
SET TestPassword=$(TestPassword)
dotnet test $(Build.SourcesDirectory)\MyCompany.MyProduct.UITests\MyTest.csproj --configuration $(BuildConfiguration) --collect "Code Coverage" --logger trx --results-directory $(Agent.TempDirectory)

запустить командную задачу Azure DevOps

person realbart    schedule 24.08.2019

К сожалению, единственный способ передать настройки из dotnet test в NUnit - это использовать .runsettings файл. У NUnit нет возможности создавать собственные аргументы командной строки для инструмента dotnet test - хотя мы бы хотели, чтобы это было!

Взгляните на образец .runsettings файла, здесь. . Конкретный бит, который вам понадобится:

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
  <!-- Parameters used by tests at runtime -->
  <TestRunParameters>
    <Parameter name="webAppUrl" value="http://localhost" />
    <Parameter name="webAppUserName" value="Admin" />
    <Parameter name="webAppPassword" value="Password" />
  </TestRunParameters>
</RunSettings>

Вы можете просто передать этот файл в dotnet test с флагом -s.

dotnet test myProj.csproj -s mySettings.runsettings
person Chris    schedule 06.01.2019

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

https://github.com/Microsoft/vstest-docs/blob/master/docs/RunSettingsArguments.md

dotnet test -- MSTest.MapInconclusiveToFailed=True MSTest.DeploymentEnabled=False

Обратите внимание на пробел после -- .

Изменить 1

Для меня сработала комбинация добавления файла runsettings, а затем переопределения параметра, который я хотел, используя этот синтаксис:

dotnet test -- TestRunParameters.Parameter(name=\"myParam\", value=\"value\")

person Space Monkey    schedule 18.12.2020