在 TFS 上并行执行测试
Parallel execution of tests on TFS
我们在项目中使用 TFS。我在阶段设置中设置了 Parallelism -> Multi Agent。 运行 (.NET Core) 的命令本身是:
dotnet test --filter TestCategory="Mobile" --logger trx -m:1.
我是否理解正确,这些设置不会在两个代理之间拆分测试,但是运行上面的命令在两个代理上?
Visual Studio 测试 (- task: VSTest@2
) 具有 built-in 魔力,可以根据可配置的标准分发测试:
您可以改为使用 vstest
任务; 运行 你的测试得到这个“魔法”。
dotnet core
任务或直接从命令行调用 dotnet 没有这种魔力。
有一个 github 回购 shows how to take advantage of the default of the hidden variables that are set by the agent when running in parallel:
#!/bin/bash
filterProperty="Name"
tests=
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 播放列表的支持。
我们在项目中使用 TFS。我在阶段设置中设置了 Parallelism -> Multi Agent。 运行 (.NET Core) 的命令本身是:
dotnet test --filter TestCategory="Mobile" --logger trx -m:1.
我是否理解正确,这些设置不会在两个代理之间拆分测试,但是运行上面的命令在两个代理上?
Visual Studio 测试 (- task: VSTest@2
) 具有 built-in 魔力,可以根据可配置的标准分发测试:
您可以改为使用 vstest
任务; 运行 你的测试得到这个“魔法”。
dotnet core
任务或直接从命令行调用 dotnet 没有这种魔力。
有一个 github 回购 shows how to take advantage of the default of the hidden variables that are set by the agent when running in parallel:
#!/bin/bash
filterProperty="Name"
tests=
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 播放列表的支持。