Выполняете стресс-тест в веб-приложении?
В прошлом я использовал стресс-инструмент Microsoft Web Application и Pylot для стресс-тестирования веб-приложений. Я написал простую домашнюю страницу, сценарий входа и пошаговое руководство сайта (на сайте электронной коммерции добавление нескольких товаров в корзину и оформление заказа).
Простое попадание на домашнюю страницу с несколькими разработчиками почти всегда обнаруживает серьезную проблему. Больше проблем с масштабируемостью возникнет на втором этапе, а еще больше - после запуска.
URL-адресами инструментов, которые я использовал, были Microsoft Homer ( инструмент для стресса веб-приложений Microsoft) и Pylot.
Отчеты, генерируемые этими инструментами, никогда не имели для меня особого смысла, и я потратил много часов, пытаясь выяснить, какую параллельную нагрузку сможет поддерживать сайт. Это всегда стоило того, потому что всегда возникали самые глупые ошибки и узкие места (например, неправильная конфигурация веб-сервера).
Что вы сделали, какие инструменты вы использовали, и какой успех вы достигли с вашим подходом? Для меня наиболее интересной является разработка какой-то осмысленной формулы для расчета количества одновременно работающих пользователей, которое приложение может поддерживать по числам, сообщаемым приложением для стресс-теста.
30 ответов
Вот еще один голос за JMeter.
JMeter - это инструмент нагрузочного тестирования с открытым исходным кодом, написанный на Java. Он способен тестировать несколько различных типов серверов (например, веб, веб-сервисы, базы данных, практически все, что в основном использует запросы).
Однако, как только вы начинаете проходить сложные тесты, у него есть крутая кривая обучения, но оно того стоит. Вы можете начать работу очень быстро, и в зависимости от того, какое стресс-тестирование вы хотите провести, это может быть хорошо.
Плюсы:
- Открытый исходный / бесплатный инструмент от проекта Apache (помогает с бай-ином)
- Легко начать, и легко использовать, как только вы поймете основные понятия. (То есть, как создать запрос, как создать утверждение, как работать с переменными и т. Д.).
- Очень масштабируемый Я провел тесты с 11 машинами, генерирующими нагрузку на сервер, на уровне почти миллиона обращений в час. Это было намного проще в настройке, чем я ожидал.
- Имеет активное сообщество и хорошие ресурсы, которые помогут вам начать работу. Сначала прочитайте руководства и поиграйте с ними некоторое время.
Минусы:
- Пользовательский интерфейс написан на Swing. (Тьфу!)
- JMeter работает путем анализа текста ответа, возвращаемого сервером. Поэтому, если вы хотите проверить какие-либо виды поведения JavaScript, вам не повезло.
- Кривая обучения крутая для непрограммистов. Если вы знакомы с регулярными выражениями, вы уже впереди игры.
- На форуме поддержки есть большое количество (вставьте ругательных) идиотов, задающих глупые вопросы, которые можно легко решить, если бы они взглянули на документацию даже беглым взглядом. ("Как использовать JMeter для стресс-тестирования моего Windows GUI" появляется довольно часто).
- Отчетность "из коробки" оставляет желать лучшего, особенно для более крупных тестов. В тесте, о котором я упоминал выше, мне пришлось написать быстрое консольное приложение, чтобы выполнить некоторые преобразования "xml-logfile" в "html". Это было несколько лет назад, поэтому, вероятно, это больше не потребуется.
Я использовал The Grinder. Это открытый исходный код, довольно простой в использовании и очень настраиваемый. Он основан на Java и использует Jython для сценариев. Мы работали с веб-приложением.NET, поэтому не думайте, что это инструмент только для Java (по своей природе, любой инструмент для веб-стресса не должен быть привязан к платформе, которую он использует).
Мы сделали с ней несколько полезных вещей... мы были веб-приложением для телекоммуникаций, поэтому я выбрал классное использование, чтобы имитировать набор номера через наше веб-приложение, а затем использовал наш инструмент автоответчика (который был в основном учебным пособием). приложение от Microsoft для подключения к их серверу RTC LCS... к которому подключается Microsoft Office Communicator в локальной сети... затем измененное для автоматического приема вызовов). Это позволило нам использовать это вместо дорогого инструмента телефонии под названием The Hammer (или что-то в этом роде).
В любом случае, мы также использовали инструмент, чтобы увидеть, как наше приложение выдерживает высокие нагрузки, и это было очень эффективно при поиске узких мест. Инструмент имеет встроенную систему отчетов, чтобы показать, сколько времени занимает запрос, но мы никогда не использовали его. Журналы могут также хранить все ответы и еще много чего, или настраиваемое ведение журнала.
Я очень рекомендую этот инструмент, очень полезный по цене... но ожидайте, что с ним будут сделаны некоторые пользовательские настройки (у него есть встроенный прокси для записи сценария, но может потребоваться настройка для захвата чего-то вроде сеансов... Я знаю Мне пришлось настроить его, чтобы использовать уникальный сеанс для каждого потока).
Немного опоздал на эту вечеринку. Я согласен с тем, что Pylot - это лучший новый инструмент с открытым исходным кодом. Он прост в использовании и активно работает над отличным парнем ( Кори Голдберг). Как основатель OpenQA, я также рад, что Pylot теперь указан на нашей домашней странице и использует некоторую часть нашей инфраструктуры (а именно форумы).
Тем не менее, я также недавно решил, что вся концепция нагрузочного тестирования была ошибочной: эмуляция HTTP-трафика, с приложениями, какими бы сложными они ни стали, - это боль в заднице. Вот почему я создал коммерческий инструмент BrowserMob. Это служба внешнего нагрузочного тестирования, которая использует Selenium для управления реальными веб-браузерами при воспроизведении нагрузки.
Подход, очевидно, требует гораздо больше аппаратного обеспечения, чем обычные методы нагрузочного тестирования, но на самом деле аппаратное обеспечение довольно дешево, когда вы используете облачные вычисления. И хорошим побочным эффектом этого является то, что сценарии намного проще, чем обычное нагрузочное тестирование. Вам не нужно выполнять какие-либо расширенные сопоставления с регулярными выражениями (как того требует JMeter), чтобы извлечь файлы cookie, состояние сеанса.NET, параметры запроса Ajax и т. Д. Поскольку вы используете настоящие браузеры, они просто делают то, что должны делать.
Извините, что предоставил коммерческий продукт, но надеюсь, что эта концепция интересна для некоторых людей и, по крайней мере, заставляет их задуматься о новых способах работы с нагрузочным тестированием, когда у вас есть доступ к куче дополнительного оборудования!
Я использовал JMeter. Помимо тестирования веб-сервера вы также можете протестировать свою базу данных, службы обмена сообщениями и почтовые серверы.
Для веб-службы, проверить http://loader.io/.
Резюме:
loader.io - это бесплатная служба нагрузочного тестирования, которая позволяет вам стресс-тестировать ваши web-приложения /apis с тысячами одновременных подключений.
У них также есть API.
Поскольку этот вопрос все еще открыт, я мог бы также взвесить.
Хорошая новость заключается в том, что за последние 5 или около того лет инструменты с открытым исходным кодом действительно повзрослели и взлетели в космос, а плохие новости - их так много.
Вот мои мысли:
Jmeter против Grinder
Jmeter основан на спецификации стиля XML, созданной с помощью графического интерфейса.
Grinder использует Jython-скриптинг в многопоточной среде Java, поэтому больше ориентирован на программистов.
Оба инструмента будут обрабатывать HTTP и HTTPS и иметь прокси-рекордер для начала работы. Оба инструмента используют модель контроллера для управления несколькими агентами тестирования, поэтому масштабируемость не является проблемой (при наличии доступа к облаку).
Что лучше:-
Сложный вызов, поскольку кривая обучения сложна с обоими инструментами, поскольку вы попадаете в более сложные требования сценариев для переписывания URL-адресов, корреляции, предоставления уникальных данных для каждого виртуального пользователя и имитации первого или возвращающихся пользователей (путем манипулирования заголовками HTTP).
Тем не менее, я бы начал с Jmeter, так как у этого инструмента огромное количество поклонников, и в Интернете есть много примеров и учебных пособий по использованию этого инструмента. Если и когда вы придете к "дорожному блоку", это то, что вы не можете "легко" сделать с помощью Jmeter, тогда взгляните на Grinder. Хорошей новостью является то, что оба эти инструмента имеют одинаковые требования к Java, и решение "смешать и сопоставить" не исключено.
Что-то новое, что можно добавить - браузеры без головы с несколькими экземплярами Selenium WebDriver.
Это относительно новый подход, поскольку он основан на доступности ресурсов, которые теперь могут быть предоставлены из облака. При таком подходе сценарий Selenium (WebDriver) берется и запускается в автономном браузере (т. Е. WebDriver = New HtmlUnitDriver()) в нескольких потоках.
Исходя из опыта, в Amazon M1 Small Instance может быть выполнено около 25 экземпляров "безголовых браузеров".
Это означает, что все корреляции, проблемы с переписыванием URL-адресов исчезают, когда вы меняете сценарии функционального тестирования на сценарии тестирования производительности.
Масштабируемость нарушена, так как для управления нагрузкой потребуется больше виртуальных машин по сравнению с HTTP-драйвером, таким как Grinder или Jmeter. Тем не менее, если вы хотите управлять 500 виртуальными пользователями, то с 20 малыми инстансами Amazon (6 центов в час) по цене всего $1,20 в час вы получаете нагрузку, очень близкую к реальной работе пользователя.
Для простого использования я предпочитаю ab(apache benchmark) и осаду, позже понадобится одна, так как ab не поддерживает cookie и создаст бесконечные сессии с динамического сайта.
оба просты для начала:
ab -c n -t 30 url
siege -b -c n -t 30s url
Осада может работать с большим количеством URL.
последняя версия осады включила многословный в siegerc, который раздражает. Вы можете отключить его только путем редактирования этого файла (/usr/local/etc/siegerc
).
Кроме того, есть замечательная распределенная и масштабируемая платформа с открытым исходным кодом на чистом python, которая использует greenlets. Это здорово в симуляции огромного количества одновременных пользователей.
Недавно мы начали использовать Gatling для нагрузочного тестирования. Я очень рекомендую опробовать этот инструмент для нагрузочного тестирования. Мы использовали SOASTA и JMETER в прошлом. Наша главная причина рассмотреть Гатлинг заключается в следующем:
- Рекордер для записи сценария
- Использование Akka и Netty, которое дает лучшую производительность по сравнению с моделью Jmeter Threading
- DSL Scala, который очень удобен в обслуживании по сравнению с Jmeter XML
- Легко писать тесты, не пугайтесь, если это скала.
- Составление отчетов
Позвольте привести простой пример написания кода с использованием кода Гатлинга:
// your code starts here
val scn = scenario("Scenario")
.exec(http("Page")
.get("http://example.com"))
// injecting 100 user enter code here's on above scenario.
setUp(scn.inject(atOnceUsers(100)))
Однако вы можете сделать это как можно более сложным. Одной из особенностей, которая выделяется для Гатлинга, является отчетность, которая очень детальна.
Вот несколько ссылок:
Гатлинга
Учебник по Гатлингу
Я недавно выступил с докладом об этом, вы можете прочитать здесь:
https://docs.google.com/viewer?url=http%3A%2F%2Ffiles.meetup.com%2F3872152%2FExploring-Load-Testing-with-Gatling.pdf
Это старый вопрос, но я думаю, что новые решения заслуживают упоминания. Оформить заказ LoadImpact: http://www.loadimpact.com/.
Я попробовал WebLoad, это довольно аккуратный инструмент. Он поставляется с тестовой средой IDE, которая позволяет записывать действия пользователя на веб-сайте. Он также рисует график во время стресс-теста на вашем веб-сервере. Попробуйте, я очень рекомендую это.
Blaze meter имеет расширение Chrome для записи сессий и их экспорта в JMeter (в настоящее время требуется вход в систему). У вас также есть возможность заплатить им деньги за запуск их на их кластере серверов JMeter (их цена кажется намного лучше, чем у LoadImpact, который я только что прекратил использовать):
У меня нет с ними никакой связи, мне просто нравится внешний вид их сервиса, хотя я еще не использовал платную версию.
Пробуя все упомянутое здесь, я нашел curl-loader как лучший для моих целей. Очень простой интерфейс, мониторинг в реальном времени, полезная статистика, из которой я строю графики производительности. Все функции libcurl включены.
Вы задали этот вопрос почти год назад, и я не знаю, ищите ли вы еще один способ сравнительного анализа вашего сайта. Однако, поскольку этот вопрос все еще не помечен как решенный, я хотел бы предложить бесплатный веб-сервис LoadImpact (кстати, не аффилированный). Просто получил эту ссылку через твиттер и хотел бы поделиться этой находкой. Они создают неплохой обзор, и за несколько баксов вы получаете "полный эффект". Это, наверное, звучит странно, но удачи в работе и торможении:)
Взгляните на LoadBooster ( https://www.loadbooster.com/). Для тестирования веб-сайтов используется безголовый скрипт-браузер PhantomJS/CasperJs. Phantomjs проанализирует и отобразит каждую страницу, выполнит скрипт на стороне клиента. Безголовый браузерный подход облегчает написание тестовых сценариев для поддержки сложного тяжелого приложения AJAX Web 2.0: навигация по браузеру, щелчок мышью и нажатие клавиш в браузере или ожидание появления элемента в DOM. LoadBooster также поддерживает HTML-скрипт Selen.
Отказ от ответственности: я работаю на LoadBooster.
Я использовал openSTA.
Это позволяет записывать сеанс с веб-сайтом, а затем воспроизводить его на относительно простом языке сценариев.
Вы можете легко протестировать веб-сервисы и написать свои собственные сценарии.
Это позволяет вам объединять скрипты в тесте любым удобным для вас способом и настраивать количество итераций, количество пользователей в каждой итерации, время нарастания каждого нового пользователя и задержку между каждой итерацией. Тесты также могут быть запланированы в будущем.
Это с открытым исходным кодом и бесплатно.
Он создает ряд отчетов, которые можно сохранить в электронную таблицу. Затем мы используем сводную таблицу, чтобы легко проанализировать и построить график результатов.
Мы разработали процесс, который рассматривает измерение нагрузки и производительности как первостепенную проблему - как вы говорите, оставляя его до конца проекта, это может привести к разочарованию...
Итак, во время разработки мы включаем очень простое многопользовательское тестирование (с использованием селена), которое проверяет основные сумасшествия, такие как нарушение управления сеансами, очевидные проблемы параллелизма и очевидные проблемы нехватки ресурсов. Нетривиальные проекты включают это в процесс непрерывной интеграции, поэтому мы получаем очень регулярную обратную связь.
Для проектов, которые не предъявляют экстремальных требований к производительности, мы включаем базовое тестирование производительности в наше тестирование; обычно мы пишем тесты с помощью BadBoy и импортируем их в JMeter, заменяя данные для входа и другие специфичные для потока вещи. Затем мы увеличиваем их до уровня, когда сервер обрабатывает 100 запросов в секунду; если время отклика меньше 1 секунды, этого обычно достаточно. Мы запускаем и движемся дальше по жизни.
Для проектов с экстремальными требованиями к производительности мы по-прежнему используем BadBoy и JMeter, но прилагаем много усилий для понимания узких мест на серверах нашего тестового стенда (обычно веб-серверы и серверы баз данных). Есть хороший инструмент для анализа журналов событий Microsoft, который очень помогает в этом. Обычно мы находим неожиданные узкие места, которые мы оптимизируем, если это возможно; это дает нам приложение, которое работает так же быстро, как и на "1 веб-сервере, 1 сервере базы данных". Затем мы обычно развертываем в нашей целевой инфраструктуре и используем один из сервисов "Jmeter in the cloud" для повторного запуска тестов в масштабе.
Опять же, отчеты PAL помогают анализировать то, что произошло во время тестов - вы часто видите очень узкие места в производственных средах.
Главное - убедиться, что вы не только запускаете стресс-тесты, но и собираете информацию, необходимую для понимания производительности вашего приложения.
Попробуйте ZebraTester, который намного проще в использовании, чем jMeter. Я использовал jMeter в течение долгого времени, но общее время установки для нагрузочного теста всегда было проблемой. Хотя ZebraTester не является открытым исходным кодом, время, которое я сэкономил за последние шесть месяцев, компенсирует это. У них также есть портал SaaS, который можно использовать для быстрого запуска тестов с использованием их генераторов нагрузки.
Есть много хороших инструментов, упомянутых здесь. Интересно, являются ли инструменты ответом на вопрос: "Как вы проводите стресс-тестирование веб-приложения?" Инструменты на самом деле не обеспечивают способ подчеркнуть веб-приложение. Вот что я знаю:
Стресс-тестирование показывает, как веб-приложение дает сбой при обслуживании ответов для растущего числа пользователей. Стресс-тестирование показывает, как веб-приложение работает, когда оно не работает. Большинство современных веб-приложений, особенно социальные и мобильные веб-приложения, представляют собой интеграцию сервисов. Например, когда в мае 2011 года произошел сбой Facebook, вы не могли войти в веб-приложение Pepsi.com. Приложение не полностью вышло из строя, просто большая часть его нормальной функции стала недоступной для пользователей.
Тестирование производительности показывает способность веб-приложения поддерживать время отклика независимо от того, сколько пользователей одновременно используют приложение. Например, приложение, которое обрабатывает 10 транзакций в секунду с 10 одновременными пользователями, должно обрабатывать 20 транзакций в секунду для 20 пользователей. Если приложение обрабатывает менее 20 транзакций в секунду, время отклика увеличивается, и приложение не может достичь линейной масштабируемости.
Кроме того, в приведенном выше примере количество транзакций в секунду должно соответствовать только успешным операциям тестового сценария использования / рабочего процесса. Сбои обычно происходят в более короткие промежутки времени и делают измерения TPS чрезмерно оптимистичными. Сбои важны для нагрузочного теста и теста производительности, поскольку они также создают нагрузку на приложение.
Я описал методологию PushToTest в Руководстве пользователя TestMaker по адресу http://www.pushtotest.com/pushtotest-testmaker-6-methodology. TestMaker поставляется в двух вариантах: версия с открытым исходным кодом (GPL) для сообщества и TestMaker Enterprise (коммерческая версия с отличной профессиональной поддержкой).
-Frank
Мы используем упомянутый инструмент Microsoft - инструмент для стресса веб-приложений Microsoft. Это самый простой инструмент, который я использовал. Он ограничен во многих отношениях, включая возможность подключения к порту 80 только в тестах, созданных вручную. Но его простота использования означает, что он действительно привыкнет.
Мы дополняем нагрузку этого инструмента другими инструментами, включая OpenSTA и пауков проверки ссылок.
JMeter выглядит хорошо с моей первоначальной оценки, я надеюсь включить ее в нашу непрерывную интеграцию в будущем. Но JMeter сложен и нетривиален для развертывания.
Я бы посоветовал открыть еще один вопрос, касающийся интерпретации результатов стресс-теста MS.
Visual Studio Test Edition 2010 (2008 тоже хорошо). Это действительно простой и мощный инструмент для создания веб / нагрузочных тестов.
Преимущество этого инструмента при использовании против серверов Windows заключается в том, что вы получаете интегрированный доступ ко всей статистике сервера perfmon в своем отчете. Действительно полезно.
Другой бонус заключается в том, что с проектом Visual Studio вы можете интегрировать "Performance Session", который будет профилировать выполнение кода вашего сайта.
Если вы обслуживаете веб-страницы с сервера Windows, это лучший инструмент.
Существует отдельная и дорогая лицензия, необходимая для использования нескольких машин для тестирования приложения.
Я нашел IBM Page Detailer также интересным инструментом для работы.
Я играл с JMeter. Одна мысль, которую это не могло не проверить, была ASP.NET Webforms. Состояния разбили мои тесты. Я не уверен почему, но есть пара инструментов, которые не обрабатывают viewstate правильно. Мой текущий проект - ASP.NET MVC, и JMeter хорошо с ним работает.
У меня были хорошие результаты с FunkLoad:
- легко сценарий взаимодействия с пользователем
- отчеты понятны
- может контролировать нагрузку на сервер
Я второе предложение opensta. Я бы просто добавил, что он позволяет вам выполнять мониторинг сервера, который вы тестируете, используя SMTP. Мы отслеживаем загрузку процессора, используемую память, отправленные байты и т. Д. Единственным недостатком является то, что если вы находите что-то недоработанное и хотите исправить, то оно опирается на несколько библиотек с открытым исходным кодом, которые больше не поддерживаются, поэтому получим компиляцию Версия источника более хитрая, чем с большинством OSS.
Я тоже голосую за jMeter и хочу добавить несколько цитат в ответ @PeterBernier.
Главный вопрос, на который отвечают нагрузочные тесты, - сколько одновременно работающих пользователей может поддерживать мое веб-приложение? Чтобы получить правильный ответ, нагрузочное тестирование должно представлять реальное использование приложения, насколько это возможно.
Имейте в виду, что у jMeter есть много строительных блоков: логические контроллеры, элементы конфигурации, предварительные процессоры, прослушиватели..., которые могут вам в этом помочь.
Вы можете имитировать реальную ситуацию в мире с помощью jMeter, например, вы можете:
- Настройте jMeter для работы в качестве реального браузера, настроив (
concurrent resource download
,browser cache
,http headers
,setting request time out
,cookie management
,https support
,encoding
,ajax support
...) - Сконфигурируйте jMeter для генерации пользовательских запросов (определяя
number of users per second
,ramp-up time
,scheduling
,...) - Сконфигурируйте множество клиентов с jMeter для них, чтобы выполнить тест распределенной нагрузки.
- Обработайте ответ, чтобы определить, правильно ли сервер отвечает во время теста. (Например
assert
ответ найти текст в нем)
Пожалуйста примите к сведению:
- Начать настоящий тест веб-приложений с помощью jMeter легко за считанные минуты. JMeter имеет очень простой инструмент, который записывает ваш тестовый сценарий (известный как
HTTP(S) Test Script Recorder
). - У jMeter есть много плагинов на http://jmeter-plugins.org/.
- Пользовательский интерфейс jMeter основан на колебаниях и внес хорошие изменения в jMeter 3.2. С другой стороны, учтите, что графический интерфейс JMeter следует использовать только для тестирования и отладки. Не рекомендуется использовать его в режиме GUI для реального теста. https://www.blazemeter.com/blog/5-ways-launch-jmeter-test-without-using-jmeter-gui. Настройте и протестируйте свой сценарий и запустите его в режиме без графического интерфейса.
- Есть много отчетов, показывающих инструменты в jMeter (известный как
listeners
) но не должны быть включены во время теста. Вы должны запустить свой тест и генерировать отчеты (.jtl
файлы). Затем вы должны использовать эти инструменты для анализа результата. Пожалуйста, посмотрите https://www.blazemeter.com/blog/jmeter-listeners-part-1-basic-display-formats или https://www.tutorialspoint.com/jmeter/jmeter_listeners.htm.
https://www.blazemeter.com/jmeter содержит очень полезную и практическую информацию, которая поможет вам настроить вашу тестовую среду.
Еще одно замечание, касающееся нашего веб-приложения: я обнаружил, что у нас были огромные проблемы с производительностью из-за разногласий между потоками из-за блокировок... поэтому морально было тщательно продумать схему блокировки. В результате мы получили рабочие потоки, которые могли бы задушить слишком много запросов с помощью асинхронного обработчика http, в противном случае приложение просто перегружалось бы и зависало. Это означало, что огромное отставание может накапливаться, но, по крайней мере, сайт останется.
Рискуя быть обвиненным в бесстыдной саморекламе, я хотел бы отметить, что в своем стремлении к бесплатному инструменту для нагрузочного тестирования я пошел в эту статью: http://www.devcurry.com/2010/07/10-free-tools-to-loadstress-test-your.html
Либо я не мог получить желаемую пропускную способность, либо не мог добиться желаемой гибкости. И я хотел легко объединить результаты нескольких хостов генерации нагрузочных тестов в пост-тестовом анализе.
Я опробовал каждый инструмент в списке и, к своему разочарованию, обнаружил, что ни один из них не сделал то, что я хотел сделать. Итак, я построил один и делюсь им.
Вот оно: http://sourceforge.net/projects/loadmonger
PS: Никаких глупых комментариев к имени от людей, которые знакомы с городским сленгом. Я не был, но теперь немного более мирским.