Обработка тестовых данных при переходе от последовательных тестов Selenium к параллельным - PullRequest
1 голос
/ 28 марта 2012

Я бы хотел запустить мои существующие тесты Selenium параллельно, но у меня возникают проблемы с выбором лучшего подхода из-за того, как написаны мои текущие тесты.

Первый шаг в большинствеиз моих тестов - привести БД в чистое состояние, а затем заполнить ее данными, необходимыми для оставшейся части теста.Хотя это прекрасно для того, чтобы изолировать тесты друг от друга, если я начну запускать те же самые тесты Selenium параллельно на одном и том же SUT, они в конечном итоге будут удалять данные других тестов.

После долгих копаний у меня нетЯ не смог найти каких-либо руководств или рекомендаций о том, как справиться с этой ситуацией.Я подумал о нескольких идеях, но ни одна из них не показалась мне особенно удивительной:

  1. Перепишите тесты, чтобы не перезаписывать данные других тестов, т.е. только добавлять тестовые данные, а не стирать -- Я мог видеть, что это может привести к непредвиденным сбоям из-за изменчивости базы данных при запуске каждого теста.Все, что угодно - от другого порядка тестов до неудачной неудачи - может отбросить другие тесты.Это просто кажется неправильным.

  2. Не предварительно заполняйте базу данных - вместо этого создайте все необходимые данные через сам Selenium.Это будет максимально повторять использование в реальных условиях, но также займет значительно больше времени, чем загрузка данных непосредственно в базу данных.Это, вероятно, сведет на нет любые преимущества распараллеливания в зависимости от того, сколько тестовых данных требуется каждому тестовому примеру.

  3. Пусть каждый узел Selenium тестирует разные копии SUT - таким образом, каждый тест будетбудьте свободны делать с базой данных все, что пожелаете, поскольку мы предполагаем, что никакой другой тест не затрагивает ее одновременно.Недостатком является то, что мне нужно настроить несколько баз данных и в начале каждого тестового примера выяснить, как координировать какую базу данных инициализировать и как сигнализировать узлу и SUT, что этот конкретный тестовый пример должен использовать этотконкретная база данных.Не ужасно, но не то, что я хотел бы сделать, если есть лучший способ.

  4. Пусть каждый узел Selenium тестирует свою копию SUT, но разбивает тесты на отдельные наборы,по одному набору на узел до времени выполнения - также жизнеспособно, но не настолько гибко, так как со временем вы захотите продолжать возвращаться и даже увеличивать длину каждого набора.

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

У кого-нибудь есть лучшие способы обработки инициализации базы данных при параллельном запуске тестов Selenium?

FWIW, набор приложений и тестов находится в PHP / PHPUnit.

Обновление

Поскольку, похоже, ответ, который я ищу, очень зависит от проекта, япо крайней мере, я попытаюсь найти собственное решение и доложить о своих выводах.

1 Ответ

0 голосов
/ 28 марта 2012

Нет простого ответа, и, похоже, вы обдумали большую часть этого.Также стоит подумать о том, чтобы переписать тесты для использования отдельно разделенных данных - это может работать или не работать в зависимости от вашего домена (например, отдельный банковский счет на узел, если это банковское приложение).Ваше предварительное заполнение БД может быть ограничено статическими справочными данными, или вы можете предварительно заполнить данные для каждой отдельной «учетной записи».Опять же, зависит от того, насколько легко это сделать для ваших данных.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...