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