如何在命令行上将运行时参数传递给 dotnet 测试?



我在.NET Core项目中有一组单元测试,并使用运行设置文件。我正在尝试设置 Azure DevOps 以对我的部署进行自动化测试。作为此过程的一部分,我需要覆盖命令行上运行设置中的参数。

我有一个包含以下部分的运行设置文件:

<TestRunParameters>
<Parameter name="ApiUrl" value="https://myurl..." />
</TestRunParameters>

我有一个静态构造函数,可以像这样保存测试上下文:

[ClassInitialize]
public static void TestClassInitialize(TestContext context)
{
TestContext = context;
}

我使用以下方法从测试上下文中检索设置:

protected string GetStringSetting(string settingName)
{
return TestContext.Properties[settingName] as string;
}

当我在选择运行设置文件的情况下运行测试时,它会获取测试上下文,并看到 ApiUrl 条目已成功检索。

现在,我想从命令行设置此参数。我正在使用如下命令:

dotnet test <myproject.csproj> --configuration Release -- ApiUrl=https://newurl

我收到一个错误,说字典不包含键"ApiUrl",这表明未处理该设置。通过阅读文档,我认为也许我需要使用 TestRunParameters.ApiURL 完全指定设置的名称。这给了我一个XML错误。

从我读到的所有内容来看,我认为我这样做是对的,无法弄清楚哪里错了。我正在使用工具的 2.1.503 版。

有人可以给我有关如何完成这项工作的指导吗?

您可以使用以下参数语法来执行此操作:

dotnet test <myproject.csproj> --configuration Release -- TestRunParameters.Parameter(name="ApiUrl", value="https://newurl")

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

您可以从管道注入环境变量以克服dotnet test命令的限制。这样,您无需处理临时 *.runsettings 文件即可获取测试参数。可以从 CI 管道设置环境变量,然后在运行时在测试中检索它们。

您的 YAML 文件可以设置环境变量:

run_tests:
# Set environment variables as you need
variables:
FOO: "bar"

测试可以检索环境变量:

[Test]
public void Test()
{
var foo = Environment.GetEnvironmentVariable("FOO"); //set to "bar"
}

这目前是不可能实现的。检查 github 上那些已关闭的问题:

  • 命令行 (--) 中的运行设置无法传递 测试运行参数
  • 定义了测试运行参数的 dotnet test 应将参数传递给测试运行程序

您在此处的唯一选择是使用新值创建另一个运行设置文件,并将其传递给带有--settings标志的dotnet test

使用DotNetCoreCLI@2任务或dotnet test命令时,无法从命令行替换TestRunParameters,但可以在 Azure 管道中创建包含有效参数值的临时.runsettings文件,作为生成管道的一部分:

- powershell: |
[xml]$doc = Get-Content Tests/Settings.runsettings
$doc.RunSettings.TestRunParameters.ChildNodes.Item(0).value = 'https://newurl'
$doc.Save("$(Build.SourcesDirectory)/Tests/UpdatedSettings.runsettings")
displayName: 'Override TestRunParameters'
- task: DotNetCoreCLI@2
displayName: 'Run Tests'
inputs:
command: test
projects: 'Tests/Tests.csproj'
arguments: '-s $(Build.SourcesDirectory)/Tests/UpdatedSettings.runsettings'
- powershell: |
Remove-Item $(Build.SourcesDirectory)/Tests/UpdatedSettings.runsettings
displayName: Remove temporary .runsettings file

您可以在 GitHub 上找到完整的 YAML 文件和示例测试项目。

相关内容

  • 没有找到相关文章

最新更新