- PVSM.RU - https://www.pvsm.ru -
Это — подборка утилит, составленная на основе рекомендаций резидентов Hacker News и GitHub. В список вошли: Locust, Vegeta, Slow_cooker, k6 и Siege. Ими пользуются инженеры из DICE, EA и Buoyant, а также разработчики Kubernetes и Load Impact. Расскажем об этих инструментах.
[1]
Фото — Victor Freitas [2] — Unsplash
Инструмент для нагрузочного тестирования сайтов. Все сценарии пишутся на Python. Специальный веб-интерфейс, построенный на Flask [4], позволяет мониторить результаты в реальном времени. Авторы Locust — швейцарские инженеры, среди которых числятся сотрудники компаний DICE и EA, занимающихся разработкой и изданием компьютерных игр.
В основу инструмента заложена интересная концепция: Locust («саранча») эмулирует поведение целого роя насекомых (виртуальных пользователей), «атакующих» сайт во время теста. Запросы формируют с помощью сетевой библиотеки для организации параллельных вычислений — gevent [5]. Вот пример простого теста, который приведен на официальном сайте проекта:
from locust import HttpLocust, TaskSet, task
class WebsiteTasks(TaskSet):
def on_start(self):
self.client.post("/login", {
"username": "test_user",
"password": ""
})
@task
def index(self):
self.client.get("/")
@task
def about(self):
self.client.get("/about/")
class WebsiteUser(HttpLocust):
task_set = WebsiteTasks
min_wait = 5000
max_wait = 15000
Locust задействует библиотеку requests. Эта надстройка над стандартными средствами Python упрощает работу с HTTP и SSL и делает код более наглядным. К слову, документацию [6] requests можно использовать в качестве шпаргалки для отладки тестов на Locust.
Этот инструмент для нагрузочного тестирования существует уже более семи лет. За это время вокруг него сформировалось обширное комьюнити — на GitHub более 10 тыс. звезд [7]. Locust использовали при оценке работоспособности сети Battlelog для серии игр Battlefield. Об инструменте положительно отозвался [8] Армин Ронахер (Armin Ronacher), автор фреймворка Flask.
Среди недостатков Locust выделяют [9] довольно низкую производительность и периодические ошибки при оценке времени ответа сайтов. Также инструмент не умеет строить графики, но проблема решается выгрузкой результатов в виде CSV [10]-файлов и отрисовкой графиков в редакторе таблиц.
Если вы хотите поближе познакомиться с Locust, то стоит обратить внимание на документацию [11] инструмента. Также можно рекомендовать выступление [12] Алексея Романова из Wargaming на Python Meetup. Он рассказывает, как писать сценарии, эмулирующие поведение пользователей.
Утилита командной строки для тестирования HTTP-сервисов, написанная на Go. Её можно подключить как библиотеку для создания своих инструментов нагрузочного тестирования. Разработчиком Vegeta выступил один из авторов отрытой платформы Sourcegraph [14] — это движок для рецензирования и навигации по исходному коду, который используют в Lyft, Uber и Yelp.
Vegeta оценивает возможности сетевых ресурсов, «бомбардируя» их запросами с установленной частотой. Например, для проверки localhost достаточно прописать следующую команду:
echo "GET http://localhost/" | vegeta attack -duration=5s | tee results.bin | vegeta report
По умолчанию Vegeta работает со стандартным потоком чтения команд (stdin), поэтому ресурс для тестирования передается через echo. Параметр duration указывает продолжительность теста. Репорт будет сгенерирован в файл results.bin. Отчеты Vegeta генерирует в текстовом формате, но при этом умеет рисовать графики [15]. Сгенерировать их можно следующей командой:
vegeta plot -title=Results results.bin > results-plot.html
Вокруг Vegeta сформировалось крупное сообщество — 12 тыс. звезд на GitHub [16]. Инструмент даже использовали [17] разработчики Kubernetes для оценки производительности своей платформы — тогда Vegeta генерировала около 10 млн запросов в секунду к кластеру из тысячи узлов.
Документация с описанием всех функций и флагов для тестов Vegeta есть в репозитории на GitHub [13]. Там же можно найти [18] предварительно скомпилированные исполняемые файлы.
Это — инструмент для нагрузочного тестирования серверов, написанный на Go. Его разработали инженеры из компании Buoyant, которая создает сервисную сеть для Kubernetes — Linkerd. Она является частью Cloud Native Computing Foundation и считается [20] конкурентом Google Istio [21].

Фото — Joshua Aragon [22] — Unsplash
Обычно утилиты для нагрузочного тестирования проверяют возможности сервера, направляя ему как можно больше запросов за короткое время. Авторы slow_cooker говорят, что их инструмент позволяет оценить работу железа под предсказуемой нагрузкой в течение длительного времени.
Специалисты из Buoyant используют свою разработку для тестирования Linkerd и других сервисов, например nginx. Инструмент довольно молодой — ему около трех — поэтому пока он не обзавелся большим комьюнити. Но в будущем ситуация может измениться, например, его репозиторий уже форкнули [23] в Skysсanner, международном сервисе для поиска авиабилетов.
Исходный код вы можете найти на GitHub [24].
Инструмент для нагрузочного и регрессионного тестирования микросервисов, контейнеров и сайтов, размещенных в облаке. Он написан на Go и JavaScript разработчиками из Load Impact — это приложение для тестирования «стойкости» сайтов.
Работа с k6 строится по модели everything as code, когда логика тестов и все настройки пишутся на JavaScript. В скриптах отдельные шаги можно объединять в группы (group), что может быть удобно для тех, кто привык следовать принципам BDD. Вот пример такой группы:
import { group } from "k6";
export default function() {
group("user flow: returning user", function() {
group("visit homepage", function() {
// load homepage resources
});
group("login", function() {
// perform login
});
});
};
Также инструмент дает возможность записывать скрипты [26] и строить графики [27] — последняя функция реализована на InfluxDB и Grafana. И у него есть интеграции с CI-системами вроде Jenkins, Circle CI, Team City и GitLab.
Пользователи говорят, что k6 не требователен [28] к ресурсам, и у него удобный API. Но есть и несколько недостатков, в частности, k6 не поддерживает [29] websocket и не умеет [30] проводить тесты на распределенных системах. Хотя разработчики k6 в тематическом треде на Hacker News рассказали [31], что эти функции появятся в будущем.
Если вы хотите познакомиться с возможностями k6 самостоятельно, резиденты HN рекомендуют начать с технической документации [32] — она подробная и с примерами. Если будут возникать какие-либо вопросы, можно обратиться на официальный форум [33].
Siege позволяет провести нагрузочное тестирование веб-серверов. Утилиту создал инженер Джефф Фалмер (Jeff Fulmer), чтобы разработчики могли проверить ресурсоемкость своего кода в условиях, приближенных к боевым. Siege эмулирует непрерывный поток обращений к сайту от множества пользователей, как бы удерживая сервер «под осадой» — отсюда и название инструмента.
После теста утилита показывает: время проверки, число транзакций за секунду, пропускную способность, количество удачных и неудачных запросов, а также их число с ответным кодом 200. Вот пример [35] отчета, генерируемого Siege.
Siege получил довольно широкое распространение в ИТ-сообществе. Например, нагрузочному тестированию с его помощью посвящен целый раздел в книге «NGINX High Performance [36]». Также его используют [37] некоторые облачные провайдеры.
Из недостатков Siege можно выделить нестандартный синтаксис и неочевидные методы подсчета параметров тестирования — например, редиректы считаются [38] успешными транзакциями, поэтому их количество может превышать общее число запросов. Если вы хотите опробовать Siege на практике, изучите онлайн-руководство [39] — там разобраны некоторые «странности» системы.
Дополнительное чтение в блоге 1cloud.ru:
Что нового в Linux kernel 5.3 — графические драйверы, виртуализация и другие обновления [40]
Почему разработчики мейнстрим-браузера снова отказались от отображения поддомена [41]
Почему Apple изменила требования к разработчикам приложений [42]
Автор: 1cloud
Источник [43]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/linux/335459
Ссылки в тексте:
[1] Image: https://habr.com/ru/company/1cloud/blog/474474/
[2] Victor Freitas: https://unsplash.com/photos/vjkM-0m34KU
[3] Locust.io: http://Locust.io
[4] Flask: https://palletsprojects.com/p/flask/
[5] gevent: http://www.gevent.org/
[6] документацию: https://2.python-requests.org/en/latest/
[7] более 10 тыс. звезд: https://github.com/locustio/locust/stargazers
[8] отозвался: https://twitter.com/mitsuhiko/status/457145862947635200
[9] выделяют: https://news.ycombinator.com/item?id=15733943
[10] CSV: https://ru.wikipedia.org/wiki/CSV
[11] документацию: https://docs.locust.io/en/stable/
[12] выступление: https://youtu.be/65Xa__DMhAw
[13] Vegeta: https://github.com/tsenart/vegeta
[14] Sourcegraph: https://about.sourcegraph.com/
[15] рисовать графики: https://sun9-3.userapi.com/c846120/v846120228/1a06ff/76A-H0NCNrY.jpg
[16] 12 тыс. звезд на GitHub: https://github.com/tsenart/vegeta/stargazers
[17] использовали: https://news.ycombinator.com/item?id=11445695
[18] можно найти: https://github.com/tsenart/vegeta/releases
[19] Slow_cooker: https://github.com/BuoyantIO/slow_cooker
[20] считается: https://siliconangle.com/2019/03/14/service-mesh-company-bouyant-lands-10m-take-googles-istio/
[21] Google Istio: https://www.opennet.ru/opennews/art.shtml?num=46598
[22] Joshua Aragon: https://unsplash.com/photos/EaB4Ml7C7fE
[23] форкнули: https://github.com/BuoyantIO/slow_cooker/network/members
[24] на GitHub: https://github.com/buoyantio/slow_cooker
[25] k6: https://k6.io/
[26] записывать скрипты: https://docs.k6.io/docs/session-recording-har-support
[27] строить графики: https://docs.k6.io/docs/influxdb-grafana
[28] не требователен: https://blog.maddevs.io/k6-4e8768723c41
[29] не поддерживает: https://news.ycombinator.com/item?id=14281488
[30] не умеет: https://github.com/loadimpact/k6/issues/140
[31] рассказали: https://news.ycombinator.com/item?id=14279389
[32] технической документации: https://docs.k6.io/docs
[33] на официальный форум: https://community.k6.io/
[34] Siege: https://github.com/JoeDog/siege
[35] пример: https://en.wikipedia.org/wiki/Siege_(software)
[36] NGINX High Performance: https://www.amazon.com/Nginx-High-Performance-Rahul-Sharma/dp/1785281836
[37] используют: https://www.linode.com/docs/tools-reference/tools/load-testing-with-siege/
[38] считаются: https://blog.loadimpact.com/open-source-load-testing-tool-review
[39] онлайн-руководство: https://www.joedog.org/siege-manual/
[40] Что нового в Linux kernel 5.3 — графические драйверы, виртуализация и другие обновления: https://1cloud.ru/blog/chto-novogo-v-linux-kernel-5-3?utm_source=habrahabr&utm_medium=cpm&utm_campaign=benchnew&utm_content=blog
[41] Почему разработчики мейнстрим-браузера снова отказались от отображения поддомена: https://1cloud.ru/blog/chrome-otkazalis-ot-otobragenia-www?utm_source=habrahabr&utm_medium=cpm&utm_campaign=benchnew&utm_content=blog
[42] Почему Apple изменила требования к разработчикам приложений: https://1cloud.ru/blog/apple-izmenila-trebovania-k-razrabotchikam-prilogenii?utm_source=habrahabr&utm_medium=cpm&utm_campaign=benchnew&utm_content=blog
[43] Источник: https://habr.com/ru/post/474474/?utm_campaign=474474&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.