如何在使用 NUnit 或 XUnit 时将参数传递给 dotnet test 命令

问题描述 投票:0回答:5

我正在使用 C# 和 .NET Core、Selenium 和 NUnit 开发一些端到端测试。 现在我想写一个登录测试用例。我的测试只需使用

dotnet test
命令即可从控制台启动。

我只想将用户名和密码传递给此命令并在我的测试中获取它们。 我无法使用 NUnit-Console,因为它目前不支持 .NET Core

解决这个问题的建议方法是什么?我不想将设置存储在文件中,而是直接将它们输入到控制台中。

c# selenium testing nunit xunit
5个回答
24
投票

如果您想避免运行设置文件,可以使用此解决方法。传递参数的推荐方法之一是通过环境变量。因此,在您的 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密钥保管库。

#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)


11
投票

不幸的是,将设置从

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

9
投票

本文档建议现在应该可以在命令行上传递参数,而不是在运行设置文件中传递。

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

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

注意

-- 
后面的空格。

编辑1

对我有用的是添加运行设置文件,然后使用以下语法覆盖我想要的参数的组合:

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


0
投票

您还可以通过

dotnet test
/
-e
参数将环境变量传递给
--environment

dotnet test TestProject.csproj --environment USERNAME="Bob" --environment PASSWORD="password"

之后,您可以使用

Environment.GetEnvironmentVariable
检索这些值,就像其他答案中提到的那样。

var username = Environment.GetEnvironmentVariable("USERNAME");
var password = Environment.GetEnvironmentVariable("PASSWORD");

参考:https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-test#synopsis


-1
投票

我们可以直接传递环境变量 例如: param1=vale param2=值 dotnet test 在 C# 中获取值:

 var user = Environment.GetEnvironmentVariable("param1");
© www.soinside.com 2019 - 2024. All rights reserved.