как эмулировать параллельное многопользовательское тестирование удобства использования с помощью django и selenium/grid?

Я могу заставить мои тесты Selenium нормально работать для одного пользователя/последовательно на Django 1.4, используя LiveServerTestCase, но я хотел бы эмулировать параллельное многопользовательское тестирование. Я не думаю, что мне нужно настоящее нагрузочное тестирование, поскольку мои приложения в основном представляют собой веб-сайты с умеренным/низким трафиком и внутренние веб-приложения, поэтому я бы предпочел избегать дополнительных инструментов, таких как JMeter.

Я начал настраивать Selenium Grid, но не знаю, как сделать тесты независимыми и при этом работать несколько тестов с несколькими пользователями. Я предполагаю, что тестовые случаи должны выполняться для разных пользователей в одной и той же БД одновременно, но каждый тест удаляется и создает новую БД, поэтому я не понимаю, как это возможно.

И я не хочу подписываться на такой сервис, как BrowserMob.


person Tony    schedule 24.04.2012    source источник


Ответы (2)


В любом случае я бы предложил использовать такой инструмент, как JMeter, по нескольким причинам:

  1. Если вы хотите проверить отсутствие ошибок при одновременном обращении нескольких пользователей к сервису, вам не будет гарантировано одновременное выполнение двух или более автоматических тестов селена, так как это может занять довольно много времени. выполнять любые действия до фактической отправки запроса на сервер. У вас гораздо больше шансов столкнуться с такими ошибками при использовании такого инструмента, как jmeter, который может отправлять несколько запросов одновременно с минимальной задержкой между запросами. Вы также можете легко выполнять гораздо больше потоков jmeter одновременно, чем Selenium.
  2. Если вы действительно хотите проверить производительность своего сайта или его поведение при нагрузке, превышающей нормальную, вам будет проще сделать это с помощью таких инструментов, как jmeter.

С учетом сказанного, если вы действительно хотите использовать Selenium для этого, я знаю, что это довольно просто с Selenium2/Webdriver, однако я недостаточно знаком с Selenium Grid, чтобы дать рекомендации о том, что там потребуется.

person Sam Woods    schedule 24.04.2012
comment
Я использую Selenium2/Webdriver, но не могу понять, как использовать его для нескольких пользователей в одной базе данных. Я думал, для этого и нужен Selenium Grid, но я тоже не могу этого понять. Если это просто, знаете ли вы какой-либо пример кода или учебные пособия - особенно. с Django 1.4, так как я хотел бы использовать новую интеграцию Selenium/LiveServerTestCase. - person Tony; 25.04.2012
comment
Я не использовал Selenium Grid, но вы можете использовать что-то вроде nunit или что-то еще, чтобы создать несколько процессов Selenium/Webdriver, которые работают параллельно. - person Sam Woods; 25.04.2012
comment
К вашему сведению, кажется, что я могу получать довольно надежные одновременные запросы в одно и то же время. Я попробовал это с 10 тестами селена и смог просмотреть перекрывающееся поведение пользователей в браузерах. - person Tony; 28.04.2012

Я думаю, что понял это, но приветствую более (потенциально более элегантные) решения.

Я запускаю как «чистые», так и «грязные» тесты. «Чистые» тесты — это обычные тесты Selenium, которые настраивают и разрушают БД после каждого теста. «Грязные» тесты запускаются путем передачи параметров моему подклассу DjangoTestSuiteRunner, которые сообщают ему, следует ли настраивать или отключать БД, а также передают идентификатор пользователя, например:

python manage.py test myapp --testrunner=testrunner.MySeleniumTestRunner \ 
    --no_setup_db --no_teardown_db --user=1234 --liveserver=localhost:8081

Затем я объединяю около 10 из этих команд в сценарий оболочки и записываю вывод.

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

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

person Tony    schedule 28.04.2012