Я бы хотел запустить мои существующие тесты Selenium параллельно, но у меня возникают проблемы с выбором лучшего подхода из-за того, как написаны мои текущие тесты.
Первый шаг в большинствеиз моих тестов - привести БД в чистое состояние, а затем заполнить ее данными, необходимыми для оставшейся части теста.Хотя это прекрасно для того, чтобы изолировать тесты друг от друга, если я начну запускать те же самые тесты Selenium параллельно на одном и том же SUT, они в конечном итоге будут удалять данные других тестов.
После долгих копаний у меня нетЯ не смог найти каких-либо руководств или рекомендаций о том, как справиться с этой ситуацией.Я подумал о нескольких идеях, но ни одна из них не показалась мне особенно удивительной:
Перепишите тесты, чтобы не перезаписывать данные других тестов, т.е. только добавлять тестовые данные, а не стирать -- Я мог видеть, что это может привести к непредвиденным сбоям из-за изменчивости базы данных при запуске каждого теста.Все, что угодно - от другого порядка тестов до неудачной неудачи - может отбросить другие тесты.Это просто кажется неправильным.
Не предварительно заполняйте базу данных - вместо этого создайте все необходимые данные через сам Selenium.Это будет максимально повторять использование в реальных условиях, но также займет значительно больше времени, чем загрузка данных непосредственно в базу данных.Это, вероятно, сведет на нет любые преимущества распараллеливания в зависимости от того, сколько тестовых данных требуется каждому тестовому примеру.
Пусть каждый узел Selenium тестирует разные копии SUT - таким образом, каждый тест будетбудьте свободны делать с базой данных все, что пожелаете, поскольку мы предполагаем, что никакой другой тест не затрагивает ее одновременно.Недостатком является то, что мне нужно настроить несколько баз данных и в начале каждого тестового примера выяснить, как координировать какую базу данных инициализировать и как сигнализировать узлу и SUT, что этот конкретный тестовый пример должен использовать этотконкретная база данных.Не ужасно, но не то, что я хотел бы сделать, если есть лучший способ.
Пусть каждый узел Selenium тестирует свою копию SUT, но разбивает тесты на отдельные наборы,по одному набору на узел до времени выполнения - также жизнеспособно, но не настолько гибко, так как со временем вы захотите продолжать возвращаться и даже увеличивать длину каждого набора.
В общем, ни один из них не выглядит явным победителем.Вариант 3 кажется наиболее разумным, но у меня также есть сомнения относительно того, является ли это даже осуществимым подходом.После небольшого исследования мне кажется, что мне нужно написать собственный тестовый прогон, чтобы в любом случае облегчить параллельное выполнение тестов, но части, касающиеся исходных тестовых данных, все еще заставляют меня искать лучший путь.
У кого-нибудь есть лучшие способы обработки инициализации базы данных при параллельном запуске тестов Selenium?
FWIW, набор приложений и тестов находится в PHP / PHPUnit.
Обновление
Поскольку, похоже, ответ, который я ищу, очень зависит от проекта, япо крайней мере, я попытаюсь найти собственное решение и доложить о своих выводах.