需要传递到测试的测试执行上下文中的值通常通过 VSTS 中的“变量”传递。这些通常显示为环境变量。
这些值可能需要保密(来自服务主体的客户端 secret 、密码等)。但是,如果您在 VSTS 变量窗口中单击给定变量的“锁定”按钮,它不会作为环境变量(与非 secret 变量不同)导出到测试执行上下文中,by design .
如何在测试中传递 secret 变量并检索它们?
最佳答案
secret 变量需要作为“测试运行参数”作为参数传递给vstest.exe进程。这些将在测试执行期间替换为 .runsettings 文件中的值。
高级步骤是:
- 将 .runsettings 文件添加到您的 Visual Studio 项目
- 在您的 C# 代码中获取 secret 值
- 为您的 secret 创建一个 VSTS 构建变量
- 将您的 VSTS 测试任务设置为使用您创建的 .runsettings 文件
- 使用与 .runsettings 文件的 key 相同的名称显式传入构建变量
添加 .runsettings 文件
- 创建一个扩展名为“runsettings”(*.runsettings) 的 XML 文件并将其添加到您的项目
将以下 XML 添加到文件中。请注意,将“值”设置为什么并不重要。它无论如何都会被 VSTS 测试任务覆盖。将其设置为虚拟值或将导致测试在本地成功的值。
<?xml version="1.0" encoding="utf-8"?> <RunSettings> <TestRunParameters> <Parameter name="CLIENT_SECRET" value="secret" /> </TestRunParameters> </RunSettings>
从您的测试代码中获取 secret 值
将“TestContext”公共(public)属性添加到您的测试类。该值将由测试运行器在运行时设置。 请注意,此属性必须命名为 TestContext。
public TestContext TestContext { get; set; }
从 TestContext 变量中检索您的 secret
string clientSecret = TestContext.Properties["CLIENT_SECRET"].ToString();
为您的 secret 创建一个 VSTS 构建变量
- 导航到您的构建定义
- 点击“编辑构建定义”
- 点击“变量”
- 点击“添加”
- 命名你的变量并设置它的值
- 单击“值”字段末尾的锁图标将值设置为 secret
将您的 VSTS 测试任务设置为使用您创建的 .runsettings 文件
- 导航到您的构建定义
- 点击“编辑构建定义”
- 点击“任务”按钮
- 选择您的“测试”任务(如果没有则添加一个)
将“设置文件”设置为您的 .runsettings 文件
$/project/unitTest.runsettings
使用与 .runsettings 文件的键相同的名称显式传入构建变量
- 导航到您的构建定义
- 点击“编辑构建定义”
- 点击“任务”按钮
- 选择您的“测试”任务
在“覆盖测试运行参数”对话框中,添加以下内容(匹配您在 .runsettings 文件中为参数名称输入的键的拼写/大小写以及您添加的测试变量的拼写/大小写到值的构建定义):
-CLIENT_SECRET $(CLIENT_SECRET)
关于c# - 如何将 secret 从 VSTS 传递到测试执行上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50299066/