6

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

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

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

我有一个像这样保存 TestContext 的静态构造函数:

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

我正在使用以下方法从 TestContext 中检索设置:

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

当我使用选择的 runsettings 文件运行测试时,它会获取 TestContext 并且我看到 ApiUrl 条目已成功检索。

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

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

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

从我读过的所有内容来看,我认为我这样做是正确的,并且无法弄清楚什么是错的。我正在使用 2.1.503 版的工具。

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

4

4 回答 4

4

您可以使用以下参数语法来做到这一点:

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

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

于 2020-12-28T19:01:11.593 回答
4

您可以从管道中注入环境变量以克服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"
}
于 2021-02-09T20:25:58.800 回答
1

这是目前无法实现的。在 github 上检查那些已关闭的问题:

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

于 2019-04-08T06:43:44.983 回答
1

使用任务或命令TestRunParameters时,不能从命令行替换,但可以创建一个包含有效参数值的临时文件,作为 Azure Pipelines 中构建管道的一部分:DotNetCoreCLI@2dotnet test.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 文件和示例测试项目。

于 2019-05-30T11:32:45.050 回答