c# - 如何将 secret 从 VSTS 传递到测试执行上下文

标签 c# azure-devops vstest

需要传递到测试的测试执行上下文中的值通常通过 VSTS 中的“变量”传递。这些通常显示为环境变量。

这些值可能需要保密(来自服务主体的客户端 secret 、密码等)。但是,如果您在 VSTS 变量窗口中单击给定变量的“锁定”按钮,它不会作为环境变量(与非 secret 变量不同)导出到测试执行上下文中,by design .

如何在测试中传递 secret 变量并检索它们?

最佳答案

secret 变量需要作为“测试运行参数”作为参数传递给vstest.exe进程。这些将在测试执行期间替换为 .runsettings 文件中的值。

高级步骤是:

  1. 将 .runsettings 文件添加到您的 Visual Studio 项目
  2. 在您的 C# 代码中获取 secret 值
  3. 为您的 secret 创建一个 VSTS 构建变量
  4. 将您的 VSTS 测试任务设置为使用您创建的 .runsettings 文件
  5. 使用与 .runsettings 文件的 key 相同的名称显式传入构建变量

添加 .runsettings 文件

  1. 创建一个扩展名为“runsettings”(*.runsettings) 的 XML 文件并将其添加到您的项目
  2. 将以下 XML 添加到文件中。请注意,将“值”设置为什么并不重要。它无论如何都会被 VSTS 测试任务覆盖。将其设置为虚拟值或将导致测试在本地成功的值。

    <?xml version="1.0" encoding="utf-8"?>
    <RunSettings>
        <TestRunParameters>
            <Parameter name="CLIENT_SECRET" value="secret" />
        </TestRunParameters>
    </RunSettings>
    

从您的测试代码中获取 secret 值

  1. 将“TestContext”公共(public)属性添加到您的测试类。该值将由测试运行器在运行时设置。 请注意,此属性必须命名为 TestContext。

    public TestContext TestContext { get; set; }
    
  2. 从 TestContext 变量中检索您的 secret

    string clientSecret = TestContext.Properties["CLIENT_SECRET"].ToString();
    

为您的 secret 创建一个 VSTS 构建变量

  1. 导航到您的构建定义
  2. 点击“编辑构建定义”
  3. 点击“变量”
  4. 点击“添加”
  5. 命名你的变量并设置它的值
  6. 单击“值”字段末尾的锁图标将值设置为 secret

将您的 VSTS 测试任务设置为使用您创建的 .runsettings 文件

  1. 导航到您的构建定义
  2. 点击“编辑构建定义”
  3. 点击“任务”按钮
  4. 选择您的“测试”任务(如果没有则添加一个)
  5. 将“设置文件”设置为您的 .runsettings 文件

    $/project/unitTest.runsettings
    

使用与 .runsettings 文件的键相同的名称显式传入构建变量

  1. 导航到您的构建定义
  2. 点击“编辑构建定义”
  3. 点击“任务”按钮
  4. 选择您的“测试”任务
  5. 在“覆盖测试运行参数”对话框中,添加以下内容(匹配您在 .runsettings 文件中为参数名称输入的键的拼写/大小写以及您添加的测试变量的拼写/大小写到值的构建定义):

    -CLIENT_SECRET $(CLIENT_SECRET)
    

关于c# - 如何将 secret 从 VSTS 传递到测试执行上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50299066/

相关文章:

azure - 配置 Azure Build Pipeline 以运行 .net core 与数据库的自动化集成测试

azure - NUnit azuredevops 管道

MsTest 的 SonarQube 测试覆盖率

c# - 文件校验和在 HTTPS 站点中有用吗?

c# - DirectoryNotFoundException C# 将 XML 文件加载到控制台应用程序时出错

c# - 如何使用 AutoFac 解析正确的记录器类型?

c# - 在单元测试中验证 Autofac 注册

c# - 我如何在 unity3d 中使用 minijson 打印键和值

azure - 用于从 Azure DevOps 获取团队总容量的 Rest API

vstest - 如何使用 VSTest.Console 指定运行超时?