×Закрыть

Нагрузочное тестирование, используя облачный сервис

Всем доброго дня!

Недавно для одного из заказчиков проводил нагрузочное тестирование веб портала. Результат оказался достаточно неожиданным, веб сайт лег раньше, чем предполагалось:) Посему в данной статье хочу поделится опытом проведения нагрузочных тестов, используя инструмент Visual Studio и облачный сервис Visual Studio Team Services (бывший Visual Studio Online).

Зачем проводить нагрузочные тесты

Но прежде, чем мы начнем погружаться в технические детали, немного теории. Зачем вообще проводить нагрузочные тесты? Вопрос достаточно важный, и в зависимости от того, как вы на него отвечаете, выбирается та или иная стратегия тестирования нагрузки.

Во многих случаях нагрузочные тесты проводят для того, чтоб определить максимальное количество пользователей, которые могут обслуживаться на выбранном сервере. Соответственно, нагрузочные тесты проводят перед запуском продукта на продуктиве. Казалось бы, вроде ничего криминального... Но подобный подход не дает вам ответа на вопрос: а можно ли на данном сервере обслужить большее количество пользователей? Возможно, нужно немного оптимизировать код, и сервер сможет корректно обслуживать большее количество запросов?

Конечно, можно перед запуском проекта покопаться в коде, найти слабые места, попробовать поправить, но все же не самый эффективный способ оптимизации, так как отсутствуют адекватные метрики. Откуда вы знаете, что улучшения, которые вы сделали, достаточны, чтобы сказать: лучше это приложение работать не будет. Что такое «лучше»? Где эталон? Насколько далеко мы от него ушли?

Задавая эти вопросы, мы плавно переходим во второй подход проведения нагрузочных тестов. Нагрузочные тесты нужно проводить регулярно во время работы над проектом (например, в конце спринта). Причем начинать нужно с момента, когда у вас готов каркас. Результат проведения нагрузочного теста на эталонном сервере, куда вы публикуете каркас вашего приложения, — это и есть эталон. Дальнейшие измерения вам покажут изменения относительно эталона. И если изменения драматические, это повод провести дополнительные работы для оптимизации кода. Проще искать проблемы с производительностью на ранних этапах, нежели пытаться перелопатить весь проект в конце.

Оборудование для генерации нагрузки

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

Попробуйте обосновать для службы закупок покупку сервера, который вы собираетесь использовать раз в 2 недели один-два часа. Очень часто в этом случае задействуют сервера, которые не используются (устаревшие), либо на время тушат какие-то приложения внутри организации, дабы задействовать высвободившиеся ресурсы под нагрузочные тесты (такой сценарий большая редкость, но на своем опыте видал и такое). В обеих вариантах есть свои недостатки. Наприем, не использующееся сервера могут либо списать, либо отключить для экономии электропитания, либо снять с поддержки и т.д. А процесс согласования прерывания работы какого-то приложения внутри организации — это ад для всех.

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

Тестирование с помощью Visual Studio Team Services

Я предлагаю для генерации нагрузки использовать Visual Studio Team Services (бывший Visual Studio Online). Итак, что нам надо:
— Аккаунт в Visual Studio Team Services. >Бесплатно его можно взять тут.
— Visual Studio Enterprise. Триальная версия тут.

Итак, приступим:

После того, как вы создали бесплатный аккаунт в Visual Studio Team Services, вам необходимо создать новый проект, указав название и систему контроля версий, которую вы будете использовать (для этой демонстрации не принципиально, какую выбирать):

После этого нам необходимо привязать созданный аккаунт к Visual Studio. Для этого в Team Explorer в Visual Studio нам нужно ввести параметры соединения к нашему проекту:


Также необходимо будет добавить нового пользователя в список аккаунтов Visual Studio и ввести пароль:

После соединения в окне «Connect to Team Foundation Server» отобразится список проектов. У нас он один, его и выбираем:

Далее создаем новый проект в Visual Studio. В разделе «Test» выбираем «Web performance and Load Test Project», задаем новое имя проекту:

После нажатия на кнопку «ОК» у нас появится новый проект веб теста. Собственно, сейчас наша задача записать этот веб тест. Для этого в нашем веб тесте жмем кнопку «Add recording»:

Откроется веб браузер. Все, что вы будете в нем делать, будет записано. Я просто зашел на главную страничку dou.ua, собственно ее и будем тестировать :)

Возвращаемся в Visual Studio и жмем Stop recording:

Если после нажатия «Stop recording» ничего не поменялось (в веб тесте не появился записанный url с набором атрибутов), нужно включить аддон в веб браузере «Microsoft Web Test Recorder Helper»:

В итоге картина должна быть примерно такая:

Поудаляем лишнее:

Все, веб тест записан, теперь его нужно запустить из под нужного количества виртуальных пользователей. Для этого в наш проект Visual Studio добавляем Load Test. Клин по проекту нашего веб теста в Solution Explorer -> Add -> Load Test:

У нас откроется wizard, который нужно пройти. На первом шаге выбираем «Cloud-based Load Test with Visual Studio Team Services»:

Далее выбираем локацию дата центра, откуда будет генерироваться нагрузка:

Далее устанавливаем длительность теста:

После доходим до «Load Pattern». Выбираем «Step Load». Смысл тут в том, что есть стабильная нагрузка. Это значит, что нагрузка будет генерировать от заданного количества пользователей на протяжении теста.

Мы же выбираем более интересный сценарий, в камках которого количество одновременных пользователей будет постепенно возрастать по заданному шаблону:

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

Далее в Test Mix добавляем наш веб тест:

После этого можем сконфигурировать микс браузеров, после чего жмем Finish. Запускаем нагрузочный тест:

Пройдет какое-то время, и мы начнем видеть графики зависимости времени ответа от количества одновременных пользователей:

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

Интересными являются 503-е ошибки:

Прелесть в том, что мы можем проанализировать каждую запись отдельно:

Подозреваю, что это сработала защита веб сервера, так как с одного IP повалило куча запросов. При этом во время проведения теста я периодически рефрешил страничку у себя в браузере, все было ОК (помним, что нагрузка генерилась из облака).

Детальные отчеты вы можете выгрузить в Excel и проанализировать там. А если у вас есть предыдущие измерения, то Visual Studio умеет анализировать, насколько изменилась производительность с прошлого раза.


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

LinkedIn

28 комментариев

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

Кто-то знает как поменять этот параметр?
“This load test will run using 1 internet protocol addresses”

Тыща пользователей это хорошо, но много :)
www.visualstudio.com/...ru/support/legal/mt171576


ОБЩИЕ УСЛОВИЯ. Вы можете использовать любое количество копий пробного выпуска программного обеспечения на своих устройствах. Вы можете использовать пробный выпуск программного обеспечения исключительно с целью внутренней оценки и только в течение пробного периода. Вы не должны развертывать какие-либо приложения, разработанные вами при помощи пробного выпуска, в рабочей среде. Вы можете выполнять нагрузочные тесты для не более чем 250 виртуальных пользователей в течение этого периода.

Ну и плюс, в статье не указано о маленьком бесплатном лимите:

www.visualstudio.com/...est/load-test-your-app-vs

Free load testing: Get 20,000 virtual user minutes every month to load test at no extra charge.

20000 virtual user, это для примера 1000 пользователей на 20 минут теста в месяц, что не сильно много.
И так же о том что необходимая редакция Enteprise студии так же триальна, а она стоит весьма неплохо так.

Для тестування свого сайту zrobyt.com.ua використовував сервіс loader.io. Це зробив в два кліки :-) Цікаво дивитись на загрузку проца і пам’яті під час тесту.

Спробував цей сервіс, але схоже, що він не розуміє, що тестує SPA-сайт. Результати такі як для завантаження головної HTML-сторінки (сайт «не помітив» цього сервіса, який емулює начебто 250 користувачів, які ходять по ньому і роблять по 5 запитів за секунду, одна сторінка видавалась за 109 мс).

UPD:
Спецом стравив сервісу URL для RSS підписки, де контент формується динамічно за допомогою PHP + MySQL (без кешування), то результати не набагато й гірші — 112 мс. Заліковно, так би мовити =). Причому мій VPS знаходиться на найдешевшому плані 512 RAM, CPU під час тестів підскочило аж до 2.5%

Мабуть в мене інакші налаштування самого тесту bit.ly/1PGviCp. Там емуляція 500-ста користувачів. За хвилину тесту сервер віддає 60мб даних, процесор навантажувався на 80-90%. Для мене дивно те, що результати однакові при прямому доступі до сайту і коли він за сервісом cloudflare.

Підвищив до 500 користувачів, але результат зовсім трохи інший — середній час завантаження сторінки 121 мс, використання CPU підскочило до 6%. Вище я писав про відсутність кешу, це малось на увазі що мої сторінки формуються динамічно, але використовується PHP opcache.

До речі, на вашому тесті показується, що у вас відбувається переадресація на іншу сторінку, можливо щось у цьому не так...

Думаю вся фішка в тому що ваша сторінка досить маленька тому й немає нагрузки на сервер. В мене головна 1.5 мб тому якщо 500 користувачів зайдуть одночасно їм тре віддати купу даних.

1.5 МБ головна сторінка — це жесть, особливо для мобільних.

Думаю ти помиляєшся, тільки що протестував пару сайтів — доу 1.1мб, аін 1.6мб, юду 2.6мб. Згідно статистики цього сайту gtmetrix.com/top1000.html середня об’єм сторінки 1.8мб.

Ауу! Друзья! Помогите научиться работать на Appium. Не могу найти структурированной информации. Я — работающий джун Тестировщик. Хочу отличиться в команде и автоматизировать некоторые процессы мануального тестирования (есть над чем работать). Пока тяжело понимаю все, что необходимо делать даже при конфигурации. Но, есть желание.
Добрый человек, отзовись!

Недавно надо было протестировать нагрузостойкость одного проекта и этот сервис оказался как нельзя кстати :-)
Очень удобный сервис Visual Studio Online. Прямо все в одном: ведение проекта, планирование, таск-трекер, баг-трекер, система контроля версий, билд-сервис, сервис нагрузочного тестирования, аналитика использования продукта, автоматическая публикация в облако.
Спасибо за статью! Будет хороший мануал новичкам в команде :-)

Недавно для одного из заказчиков проводил нагрузочное тестирование веб портала. Результат оказался достаточно неожиданным, веб сайт лег раньше, чем предполагалось:)

Неожиданный результат для нагрузочного тестирования — это работающий сайт =).

Ну якщо його тестувати в години чотири ночі, у вихідний день, то тих, мабуть, пару десятків чоловік особливої погоди не зроблять.

Собственно в триал версии отсутствует шаблон «Web performance and Load Test Project»
Поиск данного шаблона через студию тоже результата не дал..

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

Круто, спасибо!

О, а можна тестанути і мій сайт hub.org.ua ? До речі, це SPA, тому мабуть для нього треба якісь інші тести, ніж для ДОУ.

Візьміть Visual Studio Team Services і Visual Studio Enterprise як описано в статті і тестаніть.

От пасіба, а я то думав... але ж там говориться про якісь тріал аккаунти, про хмарний сервіс, про такий самий або сильніший сервак... у мене усього цього немає.

Чесне слово — залишав лінк на свій сайт лише щоб «може його тестанути?»... але юзери ДОУ такі любопитні, вже півсотні переходів =). Мабуть на даний момент це так діє магічне слово SPA.

Подписаться на комментарии