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

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

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

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

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

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


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


person Alex    schedule 18.12.2015    source источник
comment
Не могли бы вы лучше объяснить, какая у вас проблема и с чем она связана? Как вы храните свой IWebDriver? Приведите примеры.   -  person Denis Koreyba    schedule 29.12.2015
comment
Привет, Денис! Основная цель - выяснить, какие варианты доступны сейчас (с NUnit 3.0) для параллельного запуска тестов. На данный момент я могу назвать 2: 1. Использовать ParallelizableAttribute для каждого класса с тестами - работает, но не для меня, потому что в текущем решении IWebDriver определен как: public static IWebDriver _browser; 2. Используйте NUnit 3.0 - ProcessModel.Parallel, чтобы запускать каждую сборку в другой процесс.   -  person Alex    schedule 05.01.2016


Ответы (1)


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

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