Вопрос или проблема
Я разрабатываю API, который может работать по протоколу HTTP/2 Cleartext (когда развернут на месте), а также по протоколам HTTP/1.1 и обычному HTTP/2.
Некоторые ответы приходят в нескольких частях, так как не вся информация доступна сразу.
Поэтому я хочу найти инструмент для нагрузочного тестирования, который может:
- поддерживать все эти протоколы;
- ожидать указанную часть (приемлемо, если нужно указать номер, но лучше по содержимому).
Он должен работать на Linux (и под WSL), не ограничиваясь графическим интерфейсом или веб-интерфейсом; в идеале, чтобы его можно было запускать в CI.
k6 и Gatling не поддерживают h2c (хотя ссылка на Gatling из 2020 года, я не смог найти более свежую информацию).
h2load и Vegeta поддерживают h2c, но, похоже, не могут выполнить второе.
Может быть, Apache JMeter?
Он не поддерживает HTTP2 из коробки, но есть HTTP2 плагин для JMeter, который можно установить с помощью JMeter Plugins Manager.
Вы можете “ожидать” конкретный фрейм, используя либо While Controller, либо JSR223 PostProcessor.
Ответ или решение
Скриптируемые инструменты нагрузочного тестирования с поддержкой HTTP/2 Cleartext
Разработка API с поддержкой нескольких протоколов сети может стать серьезной задачей, особенно если необходимо учитывать специфические особенности, такие как HTTP/2 Cleartext (h2c). В вашем случае важно выбрать инструмент для нагрузочного тестирования, который будет поддерживать все необходимые протоколы и обеспечивать функционал для обработки ответов с разбиением на части. Рассмотрим возможные решения, которые соответствуют вашим требованиям.
1. Apache JMeter
JMeter – это мощный инструмент для нагрузочного тестирования, который изначально не поддерживает HTTP/2, но существует плагин HTTP2 Plugin for JMeter, позволяющий ему работать с этой технологией. Вы сможете установить плагин через JMeter Plugins Manager.
Преимущества:
- Поддерживает все необходимые протоколы: HTTP/1.1, HTTP/2 и HTTP/2 Cleartext.
- Гибкость в настройках и возможность использования скриптовых контроллеров, таких как While Controller и JSR223 PostProcessor, что позволяет ожидать определенные чанки ответа.
- Поддержка выполнения в различных окружениях, включая CI/CD.
Недостатки:
- Необходимость дополнительной настройки для работы с HTTP/2.
- Требует хорошего понимания работы JMeter и его архитектуры.
2. h2load
Инструмент h2load может быть использован для нагрузки вашего API и поддерживает h2c. Однако h2load не обладает функциональностью ожидания определенных чанков ответов, что, возможно, не соответствует вашим требованиям.
Преимущества:
- Легкий в использовании и подходит для базового нагрузочного тестирования.
- Поддержка HTTP/2 Cleartext.
Недостатки:
- Нет возможности ждать определенные чанки ответа.
3. Vegeta
Vegeta – еще один инструмент, который поддерживает h2c, но, как и h2load, не предоставляет функционал для ожидания специфического контента в ответах.
Преимущества:
- Простота в использовании.
- Хорошо подходит для простых нагрузочных тестов.
Недостатки:
- Ограниченная функциональность по ожиданию ответов с разбиением на части.
Рекомендации
На основе вышеизложенных инструментов, Apache JMeter представляется оптимальным выбором для ваших потребностей. Его возможность использовать плагин для HTTP/2 и мощные инструменты для управления потоком тестов сделают его лучшим выбором для нагрузочного тестирования вашего API, функционирующего как на HTTP/1.1, так и на HTTP/2 Cleartext.
Заключение
Выбор инструмента для нагрузочного тестирования API — это не просто вопрос предпочтений, а стратегический шаг, который может повлиять на производительность и стабильность вашего приложения. Учитывая вашу задачу, мы рекомендуем внимательно рассмотреть возможности Apache JMeter в сочетании с поддержкой его расширений. Это поможет вам обеспечить не только функциональность, но и высокую эффективность тестирования вашего API.