这是一个关于如何使用静态值进行在 Azure DevOps Pipeline 上运行的 VSTest 单元测试的问题。
当我开发依赖于 Web API 的单元测试时,我将本地开发计算机上托管的 Web API 的 URL 放入 appsettings.json 中,效果非常好。但是,当单元测试在 Azure 管道上运行时,它当然无法访问我的计算机上托管的 Web API,并且失败。我可以更改 appsettings.json 文件以指向 Azure 上的 Web API,但我希望有一种方法可以在管道上运行单元测试时始终指向 Azure 上的 WebAPI,从而覆盖 appsettings.json 中的设置。有这样的办法吗?
对于 Azure 管道版本,我知道我可以使用 Azure 应用服务设置任务 ( https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/azure-app-service-settings?view=azure-devops ) 设置应用服务的变量。不确定 VSTests 是否可以使用类似的功能。
最佳答案
您可以使用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了解更多信息。
关于Azure DevOps VSTest 任务 - appconfig 设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62375500/