Как провести стресс-тест, имитирующий большую нагрузку, с помощью Selenium

У меня есть система для тестирования, которая представляет собой технологию распространения видеорекламы. Мне нужно загружать каждое видео, например, 1-2 минуты, чтобы показывать рекламу. Видео воспроизводится во Flash-клиенте и транслируется в виде FLV-потоков, как на YouTube.

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

Я использовал Selenium, WatiN, Automation Anywhere и многие другие инструменты автоматизации. Однако, когда я пытаюсь запустить около 10000 браузеров на своей машине (32 ГБ ОЗУ, 16-ядерный процессор), ни один из них не может выполнить эту работу.

С Selenium я пока могу запустить максимальное количество экземпляров FireFox, но этого все еще слишком мало: половина экземпляров не запускает тест.

Любые предложения, чтобы сделать с Selenium?


person Sumit Ghosh    schedule 26.03.2012    source источник
comment
Если вам нужно смоделировать нагрузку, вы можете использовать инструмент с открытым исходным кодом под названием pylot (pylot.org). соединений, и вы можете предоставить тестовый сценарий, написанный на XML (читайте начало работы на сайте). Инструмент не использует настоящие браузеры.   -  person alonp    schedule 26.03.2012


Ответы (5)


Вы не собираетесь запускать 10 000 браузеров на своем компьютере. Это дало бы 3,2 МБ физической памяти на экземпляр браузера, и я почти уверен, что FireFox это не понравится.

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

person digitaljoel    schedule 26.03.2012
comment
10000 было гипотетическим числом. Для текущей конфигурации сервера было бы достаточно даже 1000-5000. Jmeter бесполезен в моем случае, так как у меня есть мультимедийное приложение, которое должно выполняться в течение минуты, чтобы тест прошел успешно. - person Sumit Ghosh; 26.03.2012
comment
3,2 МБ или 32 МБ оперативной памяти, я подозреваю, что Firefox одинаково хорошо задохнется. Возможно, вы тестируете сервер, если хотите запустить на него 1000 потоков, так что кого волнует, что делает клиент? Является ли клиент полноценным Firefox, использующим мультимедиа и что-то с ним делающим, или просто curl или wget для соответствующих URL-адресов с тем же временем, что и мультимедийное приложение, не должно иметь значения для сервера, не так ли? - person digitaljoel; 26.03.2012
comment
Тестирование больше связано с тем, как мультимедийное приложение ведет себя под нагрузкой, а не только с сервером под нагрузкой. Я пытаюсь проверить возможный ближайший пользовательский сценарий реального мира здесь. Запрос curl не будет выполнять мультимедийное клиентское приложение, поэтому он не будет настоящим тестом всего приложения. - person Sumit Ghosh; 27.03.2012
comment
Если вы хотите протестировать клиентское приложение, то как насчет создания виртуальной машины с очень низким энергопотреблением и запуска на ней нескольких экземпляров? Вы все еще можете поразить сервер с помощью сценария jmeter, чтобы получить там нагрузку, а затем вы можете запустить свой сценарий selenium на слабом vm. - person digitaljoel; 27.03.2012

Selenium на самом деле не оптимизирован для нагрузочного/стресс-тестирования, особенно если вы запускаете свои браузеры локально. Запуск более 1000 браузеров задушит даже самый мощный сервер. Хотя ОЗУ является очевидным узким местом, у вас также ограничены ресурсы ЦП и пропускная способность. Последнее является основной проблемой, если вы загружаете видео.

Не говоря уже о том, что вы будете тестировать с одного IP-адреса с 10 тысячами браузеров, поэтому балансировка нагрузки может не срабатывать должным образом, а также фактическое распространение видеорекламы для конкретных виртуальных пользователей.

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

Другой рекомендацией может быть фактический инструмент тестирования производительности. Я бы рекомендовал Soasta CloudTest. У них есть бесплатная версия, рассчитанная на 100 пользователей, чтобы вы могли понять, подойдет ли она вам. Я обнаружил, что создание сценариев для CloudTest относительно просто.

Отказ от ответственности: мой опыт работы с обеими компаниями был платным клиентом, и я никогда не работал ни на одну из них.

person kenki    schedule 28.03.2012

Если вы используете компьютер с Windows, то, по моему опыту, существует ограничение на количество открываемых экземпляров окна браузера. Согласно моему последнему тесту, он ограничивает 100-150 окон браузера.

Я бы порекомендовал вам использовать безголового робота, который не требует открытия окна браузера. Я думаю, что последняя версия Selenium имеет такую ​​возможность. Но это больше похоже на нагрузочный тест, поскольку вы пытаетесь смоделировать более 10 000 пользовательских экземпляров, я бы рекомендовал вам использовать инструмент нагрузочного тестирования, такой как JMeter или LoadRunner.

person Sandip Dhummad    schedule 26.03.2012
comment
Я могу запустить более 500 экземпляров Firefox с селеном, но проблема в том, что половина из них не загружает записанный тестовый скрипт, они просто показывают пустой браузер. Этот тест невозможен без настоящего браузера, я обновлю свой исходный пост некоторыми подробностями о тестовом сценарии. - person Sumit Ghosh; 27.03.2012
comment
Sumit, если вы должны запустить тест с активным окном браузера, теперь у вас есть следующие варианты: - person Sandip Dhummad; 27.03.2012
comment
Sumit, если вам нужно запустить тест с активным окном браузера, и вы уже потратили много времени и денег на написание сценариев Selenium, я бы предложил следующие варианты: 1) Использовать несколько экземпляров в Amazon EC2. Вы можете настроить Selenium Grid на своем экземпляре EC2. Подробнее см. на странице selenium-grid.seleniumhq.org/. 2) Если из-за безопасности данных или по какой-либо другой причине вы не можете использовать облако, вы можете настроить селеновую сетку, используя несколько тестовых машин в своей лаборатории. Лично я бы предпочел использовать EC2 как быстрый, простой и дешевый вариант. - person Sandip Dhummad; 27.03.2012
comment
Привет, Сандип, у меня нет проблем с этим, но прямо сейчас я даже не могу использовать едва ли 30% оперативной памяти и процессора вместе взятых на моем тестовом сервере-монстре. Если бы я пересек там 80%, я бы подумал о горизонтальном масштабировании. Проблема не в масштабировании снаружи, а в эффективности запуска 1000 экземпляров Firefox и их автоматической работы, управляемой скриптом селена. - person Sumit Ghosh; 27.03.2012
comment
Сумит, есть ли у вас надлежащее время разгона при запуске окон браузера. У нас было около 10 миллисекунд сна между запуском двух окон браузера. Мы видели, что установка правильного времени сна увеличила количество экземпляров браузера. 10 мс секунд могут не работать, как в вашем случае, но вы можете начать с этого числа. Я знаю, что это усложняет ваши требования к тестовым данным, так как теперь вам придется заставить каждого пользователя запускать свой тестовый сценарий несколько раз, чтобы достичь окончательного сценария, в котором все пользователи работают. Нам пришлось настроить несколько тестовых данных для одного и того же тестового скрипта. - person Sandip Dhummad; 28.03.2012

Мне кажется, вы пытаетесь проверить, что увидит клиент, основываясь на большом трафике, не так ли?

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

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

person Nate I    schedule 26.03.2012

Ваш пост пахнет какой-то формой мошенничества на основе рекламы, но в любом случае: вы рассматривали возможность использования других веб-браузеров, помимо Firefox? PhantomJS – это безголовый браузер на основе WebKit, совместимый с Selenium. Он поддерживает все основные функции браузера, такие как обработка DOM, селекторы CSS, Javascript и Canvas. Я не знаю, поддерживает ли он Flash.

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

Кроме того, если каждый экземпляр браузера создает подключаемый модуль Flash, не пренебрегайте возможностью того, что проблема может быть связана с Flash, а не с Firefox. В качестве альтернативы, зачем создавать несколько разных процессов Firefox? Можете ли вы добиться желаемого с помощью вкладок?

person Ponkadoodle    schedule 20.01.2014