Selenium GRID 2 + NUnit 3 опции для параллельного запуска тестов

Я решил переключиться с текущего решения (использующего измененный NUnit нашей командой несколько лет назад NDistribUnit, который запускает тесты на VirtualMachines и затем собирает результаты на хаб-сервере) на Selenium Grid 2.

Опция с ParallelizableAttribute была опробована. К сожалению, я заметил, что IWebDriver был сохранен в глобальной переменной (puhh). Это заставило тесты запускать несколько экземпляров браузера, но в тестах использовался один IWebDriver -> выполнение тестов происходило в одном браузере -> тесты выполнялись в рамках одного процесса, но с несколькими "рабочими" потоками. Было опробовано использование 2 виртуальных машин в качестве "узлов" и локального ПК в качестве концентратора.

Я знаю, что лучшее решение - это изменить неверную идею для сохранения драйвера в глобальной переменной, но это займет слишком много времени: необходимо обновить 3k+ тяжелые тесты пользовательского интерфейса; ожидается, что многие статические методы будут иметь драйвер как глобальный var

Кроме того, NUnit 3.0 предоставляет возможность запуска нескольких сборок параллельно. Хорошо запустить несколько тестовых проектов, но в настоящее время у нас есть 1 сборка на одно приложение. Было бы неплохо запустить тесты для одного приложения (одной сборки) параллельно.

Есть ли другие способы использовать GRID + NUnit 3 здесь, чтобы заставить его работать?


Наконец, существующее решение было подвергнуто рефакторингу: теперь каждый тест во время выполнения имеет собственный драйвер. Из-за этого изменения большая часть кода была переписана (кажется, что слишком много методов ожидали иметь IwebDriver в качестве глобальной переменной)

1 ответ

На самом деле, есть 2 варианта сделать это:

  1. Рефакторинг - это делается для одного тестового проекта. Наряду с удалением статических переменных (первоначальная цель рефакторинга) был изменен и другой код. Отличный минус - требовались значительные усилия.
  2. Использование агентов TeamCity для параллельного запуска. Я забыл упомянуть, наконец, тесты выполняются в TeamCity, но одним агентом. Для оставленных "старых" тестов (где экземпляр Driver хранился в статической переменной) несколько агентов TC были настроены для запуска только нескольких классов из решения для испытаний. Эта опция очень быстрая и не требует больших изменений кода.
Другие вопросы по тегам