Почему стоит использовать тесты
Когда разработка веб-сайта заканчивается, и он переходит из среды разработки в публичный доступ, реальные посетители могут создать значительную нагрузку на сервер, вследствие чего производительность и поведение веб-сайта могут отличаться от ожидаемых. Чтобы спрогнозировать поведение веб-сайта под нагрузкой, необходимо смоделировать нагрузку на тестовом сервере.
Цели тестирования
К наиболее важным параметрам облачного сервера, влияющим на поведение вебсайта можно отнести:
- Латентность - время, которое проходит от запроса пользователя до первого ответа сервера;
- Общая производительность сервера - количество одновременных запросов, которые сервер может обработать. В случае отсутствия резерва мощностей запросы пользователей к сайту будут помещаться в очередь или даже вообще не будут обработаны;
- Стабильность работы - количество запросов, обработанных с приемлемым уровнем качества, так называемый перцентиль. Например, фраза "сайт отвечает за 20 миллисекунд с 90м перцентилем (отличное качество) означает, что 90% забросов обрабатывается за 20мс или менее.
Перед запуском тестов
Перед запуском собственно тестов стоит убедиться, что сервер в принципе имеет достаточное количество системных ресурсов для обработки всех запросов. Наиболее часто используемыми "метриками" являются доступная оперативная память и загрузка центрального процессора. Для проверки доступной оперативной памяти вы можете использовать системную утилиту free. Просто запустите команду:
free -m
В большинстве случаев свободными должны оставаться не менее 25% оперативной памяти, файл или раздел подкачки не должны использоваться вовсе.
Ситуацию с загруженностью процессора прояснит другая встроенная утилита — top. Иллюстрация проверки:
top
Отображаемый индекс загрузки процессора не должен превышать количество ядер вашего процессора. Например. если средняя загрузка 8-ядерного процессора превышает 8,00 - у вас проблемы.
Имитация загрузки
Для имитации наплыва реальных посетителей есть несколько инструментов:
Инструмент ab позволяет смоделировать множество одновременных подключений к веб-серверу. Использование достаточно простое:
ab -c <КОЛИЧЕСТВО_ОДНОВРЕМЕННЫХ_ЗАПРОСОВ> -n <ОБЩЕЕ_КОЛИЧЕСТВО_ЗАПРОСОВ> <АДРЕС_САЙТА>
Утилита siege очень похожа по смыслу на предыдущую. Устанавливается с помощью пакетного менеджера:
apt install siege
Использовать также просто, однострочная команда:
siege -t <ВРЕМЯ ТЕСТИРОВАНИЯ> -c <КОЛИЧЕСТВО_ОДНОВРЕМЕННЫХ_ЗАПРОСОВ> <АДРЕС_САЙТА>
Утилита locust имеет веб-интерфейс и работает на Python. Устанавливается так:
pip3 install locust
После установки утилиты скачайте предварительно подготовленный скрипт, замените в нем имя сайта на свое и запустите:
wget https://raw.githubusercontent.com/locustio/locust/master/examples/browse_docs_test.py
sed 's|https://docs.locust.io/en/latest|<ВАШ_САЙТ>|g' browse_docs_test.py
locust -f browse_docs_test.py
После этого можно открыть интерфейс теста в браузере. Адрес - http://<IP_ВАШЕГО_СЕРВЕРА>:8089
Итоги
В этой статье описано зачем тестировать веб-сайт перед публичным размещением, а также приведены примеры утилит, позволяющих провести такую проверку.