Выполняете стресс-тест в веб-приложении? - PullRequest
237 голосов
/ 11 августа 2008

В прошлом я использовал Stress Tool для Microsoft Web Application и Pylot для стресс-тестирования веб-приложений. Я написал простую домашнюю страницу, сценарий входа и пошаговое руководство сайта (на сайте электронной коммерции добавление нескольких товаров в корзину и оформление заказа).

Простое попадание на домашнюю страницу с помощью горстки разработчиков почти всегда обнаружит серьезную проблему. Больше проблем с масштабируемостью возникнет на втором этапе, а еще больше - после запуска.

URL-адресами инструментов, которые я использовал, были Microsoft Homer (он же Инструмент веб-приложений для Microsoft ) и Pylot .

Отчеты, генерируемые этими инструментами, никогда не имели для меня особого смысла, и я потратил много часов, пытаясь выяснить, какую параллельную нагрузку сможет поддерживать сайт. Это всегда стоило того, потому что всегда возникали самые глупые ошибки и узкие места (например, неправильная конфигурация веб-сервера).

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

Ответы [ 30 ]

109 голосов
/ 18 сентября 2008

Вот еще один голос за JMeter .

JMeter - это инструмент нагрузочного тестирования с открытым исходным кодом, написанный на Java. Он способен тестировать несколько различных типов серверов (например, веб, веб-сервисы, базы данных, практически все, что в основном использует запросы).

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

Плюсы:

  • Открытый исходный код / ​​бесплатный инструмент из проекта Apache (помогает с бай-ином)
  • Легко начать и легко использовать, как только вы поймете основные понятия. (Т.е. как создать запрос, как создать утверждение, как работать с переменными и т. Д.).
  • Очень масштабируемый. Я провел тесты с 11 машинами, генерирующими нагрузку на сервер, на уровне почти миллиона обращений в час. Это было намного проще в настройке, чем я ожидал.
  • Имеет активное сообщество и хорошие ресурсы, которые помогут вам начать работу. Сначала прочитайте руководства и поиграйте с ними некоторое время.

Минусы:

  • Пользовательский интерфейс написан на Swing. (Тьфу!)
  • JMeter работает путем анализа текста ответа, возвращаемого сервером. Поэтому, если вы хотите проверить какие-либо варианты поведения JavaScript, вам не повезло.
  • Кривая обучения крутая для непрограммистов. Если вы знакомы с регулярными выражениями, вы уже впереди игры.
  • На форуме поддержки есть большое количество ( insert expletive ) идиотов, задающих глупые вопросы, которые можно легко решить, если они дадут документацию даже беглый взгляд. («Как использовать JMeter для стресс-тестирования моего Windows GUI» появляется довольно часто).
  • Отчетность «из коробки» оставляет желать лучшего, особенно для более крупных тестов. В упомянутом выше тесте мне пришлось написать быстрое консольное приложение, чтобы выполнить некоторые преобразования «xml-logfile» в «html». Это было несколько лет назад, поэтому, вероятно, это больше не потребуется.
36 голосов
/ 11 августа 2008

Я использовал Мельница . Это открытый исходный код, довольно простой в использовании и очень настраиваемый. Он основан на Java и использует Jython для сценариев. Мы работали с веб-приложением .NET, поэтому не думайте, что это инструмент, предназначенный только для Java (по своей природе, любой инструмент для веб-стресса не должен привязываться к используемой платформе).

Мы сделали с ней несколько полезных вещей ... мы были веб-приложением для связи, поэтому я выбрал классное использование для имитации набора номера через наше веб-приложение, а затем использовал инструмент автоответчика, который у нас был (который был в основном учебное приложение от Microsoft для подключения к их RTC LCS серверу ... к которому подключается Microsoft Office Communicator в локальной сети ... затем измененное, чтобы просто принимать вызовы автоматически). Это позволило нам использовать это вместо дорогостоящего телефонного инструмента под названием The Hammer (или что-то в этом роде).

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

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

23 голосов
/ 17 февраля 2009

Немного опоздал на эту вечеринку. Я согласен с тем, что Pylot - лучший инструмент с открытым исходным кодом. Он прост в использовании и активно работает над отличным парнем ( Кори Голдберг ). Как основатель OpenQA , я также счастлив, что Pylot теперь указан на нашей домашней странице и использует некоторую часть нашей инфраструктуры (а именно форумы).

Тем не менее, я также недавно решил, что вся концепция нагрузочного тестирования была ошибочной: эмуляция HTTP-трафика, с приложениями, какими бы сложными они ни стали, - трудная задача. Вот почему я создал коммерческий инструмент BrowserMob. Это служба внешнего нагрузочного тестирования , использующая Selenium для управления реальными веб-браузерами при воспроизведении нагрузки.

Подход, очевидно, требует на тонну больше оборудования, чем обычные методы нагрузочного тестирования, но на самом деле аппаратное обеспечение довольно дешево, когда вы используете облачные вычисления. И хорошим побочным эффектом этого является то, что сценарии на намного проще, чем обычное нагрузочное тестирование. Вам не нужно выполнять какие-либо расширенные сопоставления с регулярными выражениями (как того требует JMeter), чтобы извлечь файлы cookie, состояние сеанса .NET, параметры запроса Ajax и т. Д. Поскольку вы используете реальные браузеры, они просто делают то, что должны.

Извините за откровенное продвижение коммерческого продукта, но, надеюсь, эта концепция будет интересна некоторым людям и, по крайней мере, заставит их задуматься о новых способах работы с нагрузочным тестированием, когда у вас есть доступ к куче дополнительного оборудования!

15 голосов
/ 11 августа 2008

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

12 голосов
/ 19 апреля 2011
9 голосов
/ 03 января 2013

Для веб-службы, проверьте loader.io .

Резюме:

loader.io - это бесплатная служба нагрузочного тестирования, которая позволяет вам стресс-тестировать ваши web-приложения / apis с тысячами одновременных подключений.

У них также есть API .

9 голосов
/ 29 марта 2013

Поскольку этот вопрос все еще открыт, я мог бы также взвесить.

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

Вот мои мысли: -

Jmeter против Grinder

Jmeter определяется спецификацией стиля XML, созданной с помощью графического интерфейса пользователя.

Grinder использует Jython-скриптинг в многопоточной среде Java, поэтому больше ориентирован на программистов.

Оба инструмента будут работать с HTTP и HTTPS и иметь прокси-рекордер для начала работы. Оба инструмента используют модель контроллера для управления несколькими агентами тестирования, поэтому масштабируемость не является проблемой (при доступе к облаку).

Что лучше: -

Сложный вызов, поскольку кривая обучения крутая с обоими инструментами, поскольку вы попадаете в более сложные требования сценариев для перезаписи URL-адресов, корреляции, предоставления уникальных данных для каждого виртуального пользователя и имитации в первый раз или возвращения пользователей (путем манипулирования заголовками HTTP) .

Тем не менее, я бы начал с Jmeter, поскольку у этого инструмента огромное количество поклонников, и в Интернете есть много примеров и учебных пособий по использованию этого инструмента. Если и когда вы придете к «дорожному блоку», это то, что вы не можете «легко» сделать с помощью Jmeter, тогда взгляните на Grinder. Хорошей новостью является то, что оба эти инструмента имеют одинаковые требования к Java, и решение «смешать и сопоставить» не исключено.

Что-то новое для добавления - безголовые браузеры с несколькими экземплярами Selenium WebDriver.

Это относительно новый подход, поскольку он основан на доступности ресурсов, которые теперь можно предоставлять из облака. При таком подходе сценарий Selenium (WebDriver) берется и запускается в автономном браузере (т. Е. WebDriver = New HtmlUnitDriver ()) в нескольких потоках.

Исходя из опыта, около 25 экземпляров "безголовых браузеров" могут быть выполнены из Amazon M1 Small Instance.

Это означает, что все корреляции, проблемы с переписыванием URL-адресов исчезают, когда вы меняете сценарии функционального тестирования на сценарии тестирования производительности.

Масштабируемость нарушена, так как для управления нагрузкой потребуется больше виртуальных машин по сравнению с драйвером HTTP, таким как Grinder или Jmeter. Тем не менее, если вы хотите управлять 500 виртуальными пользователями, то с 20 малыми инстансами Amazon (по 6 центов в час) по цене всего $ 1,20 в час вы получаете нагрузку, очень близкую к опыту реальных пользователей.

9 голосов
/ 23 августа 2010

Для простоты использования я предпочитаю ab (тест Apache) и осаду, позже понадобится, так как ab не поддерживает cookie и создаст бесконечные сессии с динамического сайта.

оба просты для запуска:

ab -c n -t 30 url

siege -b -c n -t 30s url

Осада может работать с большим количеством URL.

последняя версия осады, включите многословие в siegerc, что раздражает. Вы можете отключить его только путем редактирования этого файла (/usr/local/etc/siegerc).

7 голосов
/ 08 мая 2013

Кроме того, существует замечательный распределенный и масштабируемый locust фреймворк с открытым исходным кодом на чистом Python, который использует greenlets . Отлично подходит для симуляции огромного количества одновременных пользователей.

7 голосов
/ 23 ноября 2015

Мы недавно начали использовать 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

...