如何将机密从 VSTS 传递到测试执行上下文中

Jor*_*ean 5 c# vstest azure-devops

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

这些值可能需要保密(来自服务主体的客户端机密、密码等)。但是,如果您单击VSTS变量窗口中的“锁定”按钮,对于一个给定的变量,它不会得到导出到作为环境变量的测试执行上下文(不同于非秘密变量),通过设计

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

Jor*_*ean 9

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

高级步骤是:

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

添加 .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>
    
    Run Code Online (Sandbox Code Playgroud)

从您的测试代码中获取秘密值

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

    public TestContext TestContext { get; set; }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 从 TestContext 变量中检索您的秘密

    string clientSecret = TestContext.Properties["CLIENT_SECRET"].ToString();
    
    Run Code Online (Sandbox Code Playgroud)

为你的秘密创建一个 VSTS 构建变量

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

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

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

    $/project/unitTest.runsettings
    
    Run Code Online (Sandbox Code Playgroud)

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

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

    -CLIENT_SECRET $(CLIENT_SECRET)
    
    Run Code Online (Sandbox Code Playgroud)