这是一个有关如何在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是否可以使用类似的功能。
答案 0 :(得分:0)
您需要具有两个appsettings文件。一个用于开发(本地测试),另一个用于生产(AzureDevops管道)。
像这样,如果您需要进行一些更改以进行本地测试,则只需更改开发人员。
答案 1 :(得分:0)
您可以使用File Transform task用流水线变量替换appsettings.json文件中的变量。有关更多信息,请参见here
因此,您可以在构建任务之前添加文件转换任务。然后在管道变量中定义一个变量(例如TestData.Url)。
请参见下面的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。