Azure DevOps:运行 对具有不同 运行 设置的代理池中的代理进行并行测试
Azure DevOps: Run tests parallely on agents in agentpool with different run settings
我们设置了一个代理池,其中标记了 3 个代理,用于 运行 并行测试。我们想使用 .runsettings
文件的各种输入值来覆盖测试 运行 参数(overrideTest运行Parameters)并将我们的测试 运行 分布在各种代理上。例如,
假设代理池 P1 具有关联的代理 A1、A2、A3。
我们需要代理 A1 配置一个测试 运行 参数 executeTests = Functionality1,代理 A2 配置一个测试 运行 参数 executeTests = Functionality2 等等,
请告诉我们是否可以使用带有选项 Multiagent 或 Multi Configuration 的 executionPlan 来实现它。
不支持使用不同的运行设置甚至覆盖设置。测试任务期望它在所有代理中保持一致。它将使用为第一个配置的任何一个来启动测试任务。例如,如果您要传递覆盖变量 $(Agent.Name),它将使用第一个代理名称,而不管哪个代理选择了它。
我们发现管理它的唯一方法是在我们的测试框架代码中处理它。我们不是从 runsettings 加载,而是在测试任务之前的一个步骤中在代理上设置环境变量。然后我们的测试框架将从环境变量加载。
所以如果我没理解错的话,你要的是运行多配置成多代理的测试?
如果是,我建议您可以在管道中申请 matrix
以实现您想要的。
*注意:Matrix
是新特性,只支持YAML管道。如果你想在你身边使用 matrix,你必须使用 YAML 来配置你的管道。*
关于如何在这种情况下应用矩阵,您可以参考下面的简单示例:
strategy:
matrix:
execTest1:
agentname: "Agent-V1"
executeTests: "Functionality1"
execTest2:
agentname: "Agent-V2"
executeTests: "Functionality2"
execTest3:
agentname: "Agent-V3"
executeTests: "Functionality3"
maxParallel: 3
pool:
name: '{pool name}'
demand:
- agent-name -equals $(agentname)
...
...
有了这样的 YAML 定义,它可以 运行 同时进行不同配置的作业。此外,不同的配置 运行 到指定的代理上。
注意:请确保您的项目支持并行消费。
有关详细信息,请参阅 this。
我可以通过以下操作找到适合我的案例的解决方案
- 在名为
executeTests
的管道中添加一个变量组,并为各个变量组分配名称、值 Functionality1, Functionality2
等,
- 在同一个管道中添加了多个代理作业,并在代理 A1、A2、A3
中为 Override test run parameters
分配了 -(test.runsetting 变量) $(Functionality1) 等
以上根据每个代理作业的可用设置运行 进行并行测试
我们设置了一个代理池,其中标记了 3 个代理,用于 运行 并行测试。我们想使用 .runsettings
文件的各种输入值来覆盖测试 运行 参数(overrideTest运行Parameters)并将我们的测试 运行 分布在各种代理上。例如,
假设代理池 P1 具有关联的代理 A1、A2、A3。 我们需要代理 A1 配置一个测试 运行 参数 executeTests = Functionality1,代理 A2 配置一个测试 运行 参数 executeTests = Functionality2 等等,
请告诉我们是否可以使用带有选项 Multiagent 或 Multi Configuration 的 executionPlan 来实现它。
不支持使用不同的运行设置甚至覆盖设置。测试任务期望它在所有代理中保持一致。它将使用为第一个配置的任何一个来启动测试任务。例如,如果您要传递覆盖变量 $(Agent.Name),它将使用第一个代理名称,而不管哪个代理选择了它。
我们发现管理它的唯一方法是在我们的测试框架代码中处理它。我们不是从 runsettings 加载,而是在测试任务之前的一个步骤中在代理上设置环境变量。然后我们的测试框架将从环境变量加载。
所以如果我没理解错的话,你要的是运行多配置成多代理的测试?
如果是,我建议您可以在管道中申请 matrix
以实现您想要的。
*注意:Matrix
是新特性,只支持YAML管道。如果你想在你身边使用 matrix,你必须使用 YAML 来配置你的管道。*
关于如何在这种情况下应用矩阵,您可以参考下面的简单示例:
strategy:
matrix:
execTest1:
agentname: "Agent-V1"
executeTests: "Functionality1"
execTest2:
agentname: "Agent-V2"
executeTests: "Functionality2"
execTest3:
agentname: "Agent-V3"
executeTests: "Functionality3"
maxParallel: 3
pool:
name: '{pool name}'
demand:
- agent-name -equals $(agentname)
...
...
有了这样的 YAML 定义,它可以 运行 同时进行不同配置的作业。此外,不同的配置 运行 到指定的代理上。
注意:请确保您的项目支持并行消费。
有关详细信息,请参阅 this。
我可以通过以下操作找到适合我的案例的解决方案
- 在名为
executeTests
的管道中添加一个变量组,并为各个变量组分配名称、值Functionality1, Functionality2
等, - 在同一个管道中添加了多个代理作业,并在代理 A1、A2、A3 中为
Override test run parameters
分配了 -(test.runsetting 变量) $(Functionality1) 等
以上根据每个代理作业的可用设置运行 进行并行测试