0

我们在项目中使用 TFS。我在阶段设置中设置了 Parallelism -> Multi Agent。要运行的命令本身(.NET Core)是:

dotnet test --filter TestCategory="Mobile" --logger trx -m:1. 

我是否正确理解这些设置不会在两个代理之间拆分测试,而是在两个代理上运行上面的命令?

4

1 回答 1

1

Visual Studio Test ( - task: VSTest@2) 具有内置的魔力,可以根据可配置的标准分发测试:

在此处输入图像描述

您可以改为使用该vstest任务;运行你的测试来获得这个“魔法”。

直接从命令行调用 dotnet的dotnet core任务没有这种魔力。

有一个 github 存储库显示了如何利用代理在并行运行时设置的默认隐藏变量

#!/bin/bash

filterProperty="Name"

tests=$1
testCount=${#tests[@]}
totalAgents=$SYSTEM_TOTALJOBSINPHASE
agentNumber=$SYSTEM_JOBPOSITIONINPHASE

if [ $totalAgents -eq 0 ]; then totalAgents=1; fi
if [ -z "$agentNumber" ]; then agentNumber=1; fi

echo "Total agents: $totalAgents"
echo "Agent number: $agentNumber"
echo "Total tests: $testCount"

echo "Target tests:"
for ((i=$agentNumber; i <= $testCount;i=$((i+$totalAgents)))); do
targetTestName=${tests[$i -1]}
echo "$targetTestName"
filter+="|${filterProperty}=${targetTestName}"
done
filter=${filter#"|"}

echo "##vso[task.setvariable variable=targetTestsFilter]$filter"

通过这种方式,您可以对管道中的任务进行切片:

  - bash: |
      tests=($(dotnet test . --no-build --list-tests | grep Test_))
      . 'create_slicing_filter_condition.sh' $tests
    displayName: 'Create slicing filter condition'
  
  - bash: |
      echo "Slicing filter condition: $(targetTestsFilter)"
    displayName: 'Echo slicing filter condition'
  - task: DotNetCoreCLI@2
    displayName: Test
    inputs:
      command: test
      projects: '**/*Tests/*Tests.csproj'
      arguments: '--no-build --filter "$(targetTestsFilter)"'

我不确定这是否会支持 100.000 的测试。在这种情况下,您可能必须将列表分成多个批次并连续多次调用 dotnet test。我找不到对 vstest 播放列表的支持。

于 2022-01-31T14:41:34.447 回答