Как внедрить количество параллельных потоков в xunit для балансировки нагрузки? - PullRequest
0 голосов
/ 14 ноября 2018

Мы выполняем автоматические системные тесты для пользовательских интерфейсов для контроллеров ПЛК.Эти тесты написаны для платформы xUnit и используют API Selenium для платформы .NET Core.Они должны выполняться через консоль сервером непрерывной интеграции.Поскольку узким местом в этом сценарии являются контроллеры ПЛК, мы хотели бы использовать возможности распараллеливания xUnit для балансировки нагрузки.

Количество ПЛК является переменным.В идеале мы хотели бы назначить один ПЛК для каждого теста.Среда тестирования будет знать, сколько ПЛК доступно, и распределит их по доступным потокам.Это означает, что каждый тест xUnit должен будет выполнить следующие шаги:

  1. Фаза установки: выделить следующий свободный ПЛК (фактически это будет IP-адрес из списка настроенных IP-адресов)
  2. Фаза настройки: откройте драйвер Selenium, подключитесь к ПЛК
  3. Фаза настройки: Загрузите некоторый код конфигурации в ПЛК
  4. Фаза тестирования: Запустите тесты Selenium.Они будут проверять некоторые функциональные возможности пользовательского интерфейса, взаимодействующие с ПЛК.
  5. Фаза разрыва: закрыть соединение с ПЛК и драйвером селена
  6. Фаза разрыва: освободить заявленный IP-адрес, чтобы выполнить следующий тестможет использовать его

Таким образом, нам необходимо иметь возможность устанавливать количество параллельных выполнений на основе количества используемых ПЛК (IP-адресов).Мы проверили документы xunit при распараллеливании , но проблема в том, что xUnit позволяет устанавливать только фиксированное количество потоков:

[assembly: CollectionBehavior(MaxParallelThreads = 2)]

Другой вариант - передать это значение в качестве аргумента консоли.Runner, как описано здесь , но это, очевидно, не работает в .NET Core:

packages\xunit.runner.console.2.2.0\tools\xunit.console MyFirstUnitTests\bin\Debug\MyFirstUnitTests.dll -maxthreads 2

Третий вариант, который мы попробовали, - использовать CLI dotnet, но мы не нашли способпередать параметр для параллельных потоков:

dotnet test ... ?

В настоящее время мы получили параметр в xunit.runner.json

{
  "maxParallelThreads": 2
} 

Но это не гибко.Итак, как мы можем сделать число параллельных потоков динамическим?

Или кто-нибудь знает, будет ли и как это работать в другой среде dotnet или тестировании?

...