Azure DevOps VSTest многоагентная параллель

#unit-testing #azure-devops #continuous-integration #jobs #multi-agent

#модульное тестирование #azure-devops #azure-конвейеры #Вакансии #многоагентный

Вопрос:

Я использую Azure DevOps Server 2020 с самостоятельными агентами и создал конвейер CI, который выполняет все тесты параллельно на одном агенте. Для завершения ~ 5000 тестов (без тестов пользовательского интерфейса) требуется около 7 минут. Это слишком медленно для наших нужд, поэтому, чтобы ускорить процесс, я добавил 3 агента, поместил задачу VSTest в другое задание в том же конвейере с parallel: 4. Все 4 агента сначала загружают артефакты сборки и запускают фрагмент тестов. К сожалению, это на самом деле ухудшило ситуацию. Теперь для выполнения теста требуется около 8 минут для каждого агента.

Мой vstest yaml для 1 агента

 - task: VSTest@2
  displayName: 'Run tests'
  inputs:
      testSelector: 'testAssemblies'
      testAssemblyVer2:
            ***test*.dll
            !***TestAdapter.dll
            !***TestFramework.dll
            !**obj**
      searchFolder: '$(System.ArtifactsDirectory)'
      runInParallel: true
      codeCoverageEnabled: false
      rerunFailedTests: false
  

Мой vstest yaml для 4 агентов

 - task: VSTest@2
  displayName: 'Run tests'
  inputs:
      testSelector: 'testAssemblies'
      testAssemblyVer2:
            ***test*.dll
            !***TestAdapter.dll
            !***TestFramework.dll
            !**obj**
      searchFolder: '$(System.ArtifactsDirectory)'
      runInParallel: true
      codeCoverageEnabled: false
      distributionBatchType: 'basedOnExecutionTime'
      rerunFailedTests: false
  

Я даже пробовал пакетную сборку по сборке и, исходя из количества тестов количества агентов, время выполнения теста по-прежнему составляет ~ 8 минут.

Сравнивая это с нашим старым конвейером CI на основе пользовательского интерфейса, с мультиконфигурацией и множителем для переменной с 4 TestCategories, который запускает еще больше тестов ~ 10000 (включая 5000 нового конвейера), но они распределяются по TestCategory на тех же 4 агентах (Cat1 на agent1, Cat2 на agent2 и так далеепри включении) агенты работают в среднем ~ 5 минут каждый.

Yaml для пользовательского интерфейса выглядит следующим образом:

 steps:
- task: VSTest@2
  displayName: 'Run tests'
  inputs:
    searchFolder: '$(Build.BinariesDirectory)'
    testFiltercriteria: 'TestCategory=$(Tests)'
    runInParallel: true
    codeCoverageEnabled: false
  

Я думаю, что мне не хватает чего-то очевидного.

Заранее спасибо!

Правка 1:

Я подключился к своим агентам с помощью RDP, и внутри диспетчера задач запущено несколько экземпляров testhost.x86, до 8 одновременно, но не постоянно. Если я запускаю свои тесты локально, более 8 экземпляров testhost.x86 работают почти все время и редко исчезают вообще. Если это поможет.

Комментарии:

1. У меня нет решения для вас, но просто сообщаю, что у меня была такая же проблема в предыдущей версии. Я пытался найти сообщество разработчиков, я зарегистрировался об этом, но, возможно, был удален. В то время я предполагал, что при запуске single используются все ядра; при запуске на параллельных машинах используется только одно ядро. Таким образом, вы на самом деле мало что выигрываете и теряете из-за обнаружения и разделения тестов. Я думаю, что в итоге мы просто увеличили количество ядер на этих нескольких машинах 🙂

2. Привет, «приятно» слышать, я не одинок в этом. Эти 4 агента представляют собой i7 с 16 ГБ оперативной памяти и твердотельными накопителями емкостью 250 ГБ. Было бы неудобно увеличивать количество процессоров на этих хаха