Просмотров: 39108
Дата последнего изменения: 17.01.2024
Сложность урока:
4 уровень - сложно, требуется сосредоточиться, внимание деталям и точному следованию инструкции.
5
Зачем нужно тестирование
Нагрузочное тестирование – определение или сбор показателей производительности и времени отклика программно-технической системы или устройства в ответ на внешний запрос с целью установления соответствия требованиям, предъявляемым к данной системе (устройству). (Википедия)
Зачем производится нагрузочное тестирование:
- Проверка и оптимизация конфигурации оборудования, виртуальных машин, серверного программного обеспечения;
- Оценка максимальной производительности, которую способен выдерживать проект с типовыми сценариями нагрузки на доступных ресурсах;
- Влияние модулей проекта на производительность, сценарии обработки пиковой нагрузки;
- Оценка стабильности при максимальных нагрузках при проведении 24-часовых тестов с учетом внешних факторов (импорты, резервное копирование и т.п.);
- Выявление ограничений конфигурации, определение методов дальнейшего масштабирования и оптимизации.
Вообще, существует огромное количество инструментов для нагрузочного тестирования, как opensource, так и коммерческих. Остановимся на наиболее часто используемых и расскажем об их основных возможностях.
Apache HTTP server benchmarking tool
Бесплатный
Официальный сайт
Самый часто используемый, т.к входит в состав Apache.
ab [options] [http[s]://]hostname[:port]/path
где основные необходимые options
:
-c
concurrency - количество одновременных запросов к серверу (по умолчанию 1);
-n
requests - общее количество запросов (по умолчанию 1).
В результате команды получаем такой отчет:
Concurrency Level: 10
Time taken for tests: 0.984 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Total transferred: 3725507 bytes
HTML transferred: 3664100 bytes
Requests per second: 101.60 [#/sec] (mean)
Time per request: 98.424 [ms] (mean)
Time per request: 9.842 [ms] (mean, across all concurrent requests)
Transfer rate: 3696.43 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 1 2 3.6 1 23
Processing: 63 94 21.5 90 173
Waiting: 57 89 21.6 84 166
Total: 64 96 21.5 92 174
Плюсы:
- Есть везде, где есть Apache;
- Не требует никакой дополнительной настройки;
- Очень простой инструмент.
Минусы:
- Очень простой инструмент;
- Тестирует только производительность веб-сервера: опрашивает только один URL, не поддерживает сценарии нагрузки, невозможно имитировать пользовательскую нагрузку и оценить работоспособность проекта со всех сторон - как с точки зрения инфраструктуры, так и с точки зрения разработки.
Joe Dog Siege
Бесплатный
Официальный сайт.
Немного сложнее ab и необходимые задачи выполняет гораздо лучше.
В файле-сценарии задаются URL-ы и запросы тестирования. Если сценарий большой по объему, то можно вынести все запросы в отдельный файл и в команде указать этот файл при тестировании:
# cat urls.txt
# URLS file for siege
# --
http://www.bitrix24.ru/
http://www.bitrix24.ru/support/forum/forum1/topic3469/?PAGEN_1=2
http://www.bitrix24.ru/register/reg.php POST domain=test&login=login
http://www.bitrix24.ru/search/ POST < /home/www/siege_post_data
# siege -f urls.txt -c 10 -r 10 -d 3
В команде указывается количество пользователей -с
, количество повторений -r
и задержку между хитами -d
.
Результат можно выводить в log-файл или сразу в консоль в режиме реального времени:
HTTP/1.1 200 0.44 secs: 12090 bytes ==> GET /
HTTP/1.1 200 0.85 secs: 29316 bytes ==> GET /support/forum/forum1/
HTTP/1.1 200 0.85 secs: 29635 bytes ==> GET /support/forum/forum1/
HTTP/1.1 200 0.34 secs: 12087 bytes ==> GET /
[...]
done.
Transactions: 100 hits
Availability: 100.00 %
Elapsed time: 12.66 secs
Data transferred: 1.99 MB
Response time: 0.64 secs
Transaction rate: 7.90 trans/sec
Throughput: 0.16 MB/sec
Concurrency: 5.02
Successful transactions: 100
Failed transactions: 0
Longest transaction: 1.06
Shortest transaction: 0.31
Также можно взять из access-log веб-сервера URL-ы, по которым ходили реальные пользователи и эмулировать нагрузку реальных пользователей.
Плюсы:
- Многопоточный;
- Можно задавать как количество запросов, так и продолжительность (время) тестирования - т.е можно эмулировать пользовательскую нагрузку;
- Поддерживает простейшие сценарии
Минусы:
- Ресурсоемкий;
- Мало статистических данных и не очень хорошо эмулирует такие пользовательские сценарии, как ограничение скорости запросов пользователя;
- Не подходит для серьезного и масштабного тестирования в сотни и тысячи потоков, т.к он сам по себе ресурсоемкий, а на большом количестве запросов и потоков очень сильно нагружает систему.
Примечание: Существует похожий инструмент
httperf, но автор потерял доступ к исходному коду инструмента.
Apache JMeter
Бесплатный
Официальный сайт
Основные возможности:
- Написан на Java;
- HTTP, HTTPS, SOAP, Database via JDBC, LDAP, SMTP(S), POP3(S), IMAP(S);
- Консоль и GUI;
- Распределенное тестирование;
- План тестирования – XML-файл;
- Может обрабатывать лог веб-сервера как план тестирования;
- Визуализация результатов в GUI.
Результаты выводятся в графическом виде:
Плюсы:
- Кроссплатформенный, т.к написан на Java;
- Очень гибкий, используется много протоколов, не только веб-сервер, но и базы;
- Управляется через консоль и gui интерфейс;
- Использование напрямую логов веб-сервера Apache и Nginx в качестве сценария c возможностью варьирования нагрузки по этим профилям;
- Достаточно удобный и мощный инструмент.
Минусы:
- Ресурсоемкий;
- На длительных и тяжелых тестах часто падает по разным причинам;
- Стабильная работа зависит от окружения и конфигурации сервера.
Tsung
Бесплатный
Официальный сайт
Основные возможности:
- Написан на Erlang;
- HTTP, WebDAV, SOAP, PostgreSQL, MySQL, LDAP, Jabber/XMPP;
- Консоль (GUI через сторонний плагин);
- Распределенное тестирование (миллионы пользователей);
- Фазы тестирования;
- План тестирования – XML;
- Запись плана с помощью Tsung recorder’а;
- Мониторинг тестируемых серверов (Erlang, munin, SNMP);
- Инструменты для генерации статистики и графиков из логов работы.
С помощью собственных скриптов, которые обрабатывают логи работы, можно выводить различные отчеты по тестированию:
- tsung_stats.pl
- tsung_stats.pl + Gnuplot:
Плюсы:
- Т.к на писан на Erlang, то хорошо масштабируется, зависит от выделяемых ресурсов;
- Может выполнять роль распределенной системы, на большом количестве машин;
- Большое количество тестируемых систем - не только веб-серверы и БД, но и, к примеру, XMPP-сервер: может отправлять сообщения, тесты с авторизацией;
- Управление через консоль, но, благодаря поддержке плагинов, можно управлять и с помощью стороннего плагина с gui-интерфейсом;
- Наличие в комплекте инструмента Tsung Recorder - своего рода, proxy-сервер, через который можно ходить по тестируемому сайту и записывать сразу как профиль нагрузки;
- Генерация различных графиков тестирования с помощью скриптов.
Минусы:
- Нет gui-интерфейса;
- Только *nix системы.
WAPT
Платный
Официальный сайт
Основные возможности:
- Windows
- Платный (есть триал на 30 дней / 20 виртуальных пользователей);
- Запись плана тестирования из десктопных и мобильных браузеров;
- Зависимости в планах тестирования (последующий URL в зависимости от ответа сервера);
- Имитации реальных пользователей (задержки между соединениями, ограничение скорости соединений).
Отчет можно вывести как таблицей, так и графиком:
Плюсы:
- Очень гибкий, большое количество настроек и тестов;
- Эмуляция медленных каналов соединений пользователей;
- Подключение модулей;
- Запись сценариев тестирования прямо из браузера, как с десктопного, так и с мобильного;
- Генерация различных графиков тестирования с помощью скриптов.
Минусы:
- Доступен только для Windows;
- Платный.
Инструменты тестирования в продуктах «1С-Битрикс»
Входит в лицензию продукта
Официальный сайт
Основные возможности:
- Простой и понятный функционал, доступен сразу из административного интерфейса продукта «1С-Битрикс»;
- Задается количество потоков, можно изменять количество потоков в процессе теста;
- Удобен для быстрых сценариев по проверке текущей конфигурации сервера.
Отчет о тестировании выводится в виде таблицы и графиков:
Примечание: Подробнее о работе встроенного в продукт инструмента тестирования см. в уроке
Тест производительности.