我在.Net核心项目中使用runsettings文件进行了一组单元测试。我试图设置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;
}
在选择运行设置文件的情况下运行测试时,它将获得TestContext,并且看到ApiUrl条目已成功检索。
现在,我想从命令行设置此参数。我正在使用类似这样的命令:
dotnet test <myproject.csproj> --configuration Release -- ApiUrl=https://newurl
我收到一条错误消息,指出字典不包含键“ ApiUrl”,该键指示未处理设置。通过阅读文档,我认为也许我需要使用TestRunParameters.ApiUrl完全指定设置的名称。这给了我一个XML错误。
从我已阅读的所有内容中,我认为我做对了,无法弄清楚哪里出了问题。我正在使用工具的2.1.503版本。
有人可以给我指导如何进行这项工作吗?
答案 0 :(得分:2)
您可以通过 inject environment variables from your pipeline 克服 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"
}
答案 1 :(得分:1)
目前尚无法实现。在github上检查那些已关闭的问题:
这里唯一的选择是使用新值创建另一个运行设置文件,并使用dotnet test
标志将其传递到--settings
。
答案 2 :(得分:1)
您可以使用以下参数语法来做到这一点:
{{1}}
来源:https://github.com/Microsoft/vstest-docs/blob/master/docs/RunSettingsArguments.md
答案 3 :(得分:0)
使用TestRunParameters
任务或DotNetCoreCLI@2
命令时,不能从命令行替换dotnet test
,但是可以创建一个临时的.runsettings
文件在Azure Pipelines中包含有效参数值作为构建管道的一部分:
- 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文件和示例测试项目。