Нагрузочное тестирование ещё никогда не было так важно — и чаще всего команды берут один из двух инструментов: k6 или JMeter. Оба проверены в бою, широко распространены и бесплатны. Но подходы у них принципиально разные.
Кратко
| k6 | JMeter | |
|---|---|---|
| Язык | JavaScript/TypeScript | XML (GUI или код) |
| Протоколы | HTTP, WebSocket, gRPC, браузер | HTTP, JMS, JDBC и многие другие |
| Интеграция с CI/CD | Отличная | Требует дополнительной настройки |
| Распределённое выполнение | Встроенное (k6 Cloud) | Вручную или кластер k6 OSS |
| Порог входа | Низкий (для JS-разработчиков) | Средний–высокий |
| Вывод результатов | JSON, StatsD, InfluxDB... | XML, CSV, listeners |
Опыт написания скриптов
Скрипты k6 — это обычные JavaScript-модули: вы пишете функцию default, которая вызывается на каждой итерации виртуального пользователя:
import http from 'k6/http';
import { check, sleep } from 'k6';
export const options = { vus: 50, duration: '1m' };
export default function () {
const res = http.get('https://api.example.com/health');
check(res, { 'status 200': (r) => r.status === 200 });
sleep(1);
}
JMeter строит тест-планы через GUI и сохраняет их в XML. GUI снижает барьер для не-разработчиков, но превращает контроль версий в кашу, а code review делает почти невозможным.
Интеграция с CI/CD
k6 — один бинарник без зависимости от JVM. Добавить его в GitHub Actions — три строки:
- uses: grafana/setup-k6-action@v1
- run: k6 run --vus 10 --duration 30s ./tests/smoke.js
JMeter требует Java, отдельный бинарник и обычно Docker-образ или Dockerfile для воспроизводимости в CI. Это работает, но требует усилий.
Вердикт на 2025 год
Выбирайте k6, если ваша команда пишет на JavaScript, ценит Git-совместимые скрипты и нуждается в чистой интеграции с CI/CD.
Выбирайте JMeter, если вам нужны не-HTTP протоколы (JMS, JDBC), у вас есть готовые тест-планы или команда предпочитает GUI-подход.
В Perfscale мы поддерживаем оба инструмента — вы можете запускать любой из них на собственной инфраструктуре, не выбирая чью-то сторону.