Azure DevOps VSTest任务-应用程序配置设置

时间:2020-06-14 16:48:07

标签: azure azure-devops azure-pipelines

这是一个有关如何在Azure DevOps管道上运行的VSTest单元测试中使用静态值的问题。

当我开发依赖于我的Web API的单元测试时,我将托管在本地开发机器上的Web API的URL放在appsettings.json中,效果很好。但是,当单元测试在Azure管道上运行时,它当然不能访问我的计算机上托管的Web API,并且会失败。我可以将appsettings.json文件更改为指向Azure上的Web API,但是我希望有一种方法可以在管道上运行单元测试时始终指向Azure上的WebAPI,从而覆盖appsettings.json中的设置。有这种方法吗?

对于Azure管道版本,我知道我可以使用Azure App Service设置任务(https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/azure-app-service-settings?view=azure-devops)设置应用程序服务的变量。不确定VSTest是否可以使用类似的功能。

2 个答案:

答案 0 :(得分:0)

您需要具有两个appsettings文件。一个用于开发(本地测试),另一个用于生产(AzureDevops管道)。

像这样,如果您需要进行一些更改以进行本地测试,则只需更改开发人员。

答案 1 :(得分:0)

您可以使用File Transform task用流水线变量替换appsettings.json文件中的变量。有关更多信息,请参见here

因此,您可以在构建任务之前添加文件转换任务。然后在管道变量中定义一个变量(例如TestData.Url)。 enter image description here

请参见下面的yaml示例。

- task: FileTransform@1
  displayName: 'File Transform: '
  inputs:
    folderPath: '$(system.defaultworkingdirectory)'
    enableXmlTransform: false
    fileType: json
    targetFiles: '**/appsettings.json'

还有其他任务可以完成相同的工作。您可以检出任务Set Json Property和任务Magic Chunks

还可以将Web API的URL放在runsettings文件的TestRunParameters部分或testsettings文件的Properties部分中。并修改测试代码以从testsettings / runsettings文件中获取URL。然后,您可以使用Vstest Task的overrideTestrunParameters属性覆盖URL。有关更多信息,请参见Vstest task document