TL;DR
- k6 — современный, дружественный к разработчикам инструмент для нагрузочного тестирования — пишешь тесты на JavaScript
- Установка через brew/apt/docker, пишешь скрипты, запускаешь из CLI
- Определяй thresholds для критериев pass/fail: время ответа, процент ошибок
- Встроенные метрики: http_req_duration, http_reqs, iterations, vus
- Интеграция с CI/CD, Grafana Cloud, InfluxDB для дашбордов
Идеально для: Разработчиков, DevOps, команд, которые хотят performance-тесты как код Пропусти, если: Нужен GUI для дизайна тестов или экзотические протоколы (используй JMeter) Время чтения: 15 минут
Твоя команда хочет performance-тесты в CI/CD. XML-файлы JMeter сложно ревьюить в PR. Тесты должны запускаться headless в контейнерах.
k6 решает эту проблему. Тесты — это JavaScript-код — читаемый, версионируемый, ревьюируемый. Запускается из CLI, интегрируется со всем, отчёты в реальном времени.
Что такое k6?
k6 — это open-source инструмент для нагрузочного тестирования, созданный для современных рабочих процессов разработки. Тесты на JavaScript, выполнение на Go (быстро), результаты интегрируются с инструментами наблюдаемости.
Почему k6:
- JavaScript-тесты — используй настоящий язык, не XML
- Developer experience — отличный CLI, понятный вывод
- Высокая производительность — одна машина обрабатывает тысячи VUs
- Нативная CI/CD интеграция — запускается в контейнерах
- Расширяемый — JavaScript APIs, расширения, протоколы
Установка
# macOS
brew install k6
# Ubuntu/Debian
sudo apt update && sudo apt install k6
# Docker
docker run --rm -i grafana/k6 run - <script.js
# Windows
choco install k6
Твой первый k6-тест
Создай script.js:
import http from 'k6/http';
import { check, sleep } from 'k6';
export const options = {
vus: 10, // 10 виртуальных пользователей
duration: '30s', // запуск на 30 секунд
};
export default function () {
const res = http.get('https://test.k6.io');
check(res, {
'status is 200': (r) => r.status === 200,
'response time < 500ms': (r) => r.timings.duration < 500,
});
sleep(1);
}
Запуск:
k6 run script.js
Концепции k6
Virtual Users (VUs)
VUs — это параллельные исполнители, запускающие твою тестовую функцию.
export const options = {
vus: 100, // одновременные пользователи
duration: '5m', // продолжительность теста
};
Stages (Ramp-up/down)
Постепенное увеличение и уменьшение нагрузки.
export const options = {
stages: [
{ duration: '2m', target: 100 }, // ramp до 100 пользователей
{ duration: '5m', target: 100 }, // держим 100
{ duration: '2m', target: 200 }, // ramp до 200
{ duration: '5m', target: 200 }, // держим 200
{ duration: '2m', target: 0 }, // ramp down
],
};
Thresholds
Определяй критерии pass/fail.
export const options = {
thresholds: {
http_req_duration: ['p(95)<500'], // 95% запросов < 500ms
http_req_failed: ['rate<0.01'], // процент ошибок < 1%
checks: ['rate>0.99'], // 99% проверок проходят
http_reqs: ['rate>100'], // минимум 100 RPS
},
};
HTTP-запросы
GET-запрос
import http from 'k6/http';
export default function () {
// Простой GET
const res = http.get('https://api.example.com/users');
// GET с headers
const res2 = http.get('https://api.example.com/users', {
headers: {
'Authorization': 'Bearer token123',
'Accept': 'application/json',
},
});
}
POST-запрос
import http from 'k6/http';
export default function () {
const payload = JSON.stringify({
name: 'John Doe',
email: 'john@example.com',
});
const params = {
headers: {
'Content-Type': 'application/json',
},
};
const res = http.post('https://api.example.com/users', payload, params);
}
Интеграция с CI/CD
GitHub Actions
name: Load Test
on:
push:
branches: [main]
jobs:
k6-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run k6 test
uses: grafana/k6-action@v0.3.1
with:
filename: tests/load-test.js
k6 с помощью ИИ
ИИ-инструменты могут помочь писать и оптимизировать k6-тесты.
Что ИИ делает хорошо:
- Генерация тестовых скриптов из API-спецификаций
- Создание реалистичных тестовых данных
- Предложение значений thresholds
- Объяснение метрик и результатов
Что всё ещё требует людей:
- Понимание архитектуры системы
- Установка реалистичных целей нагрузки
- Интерпретация результатов в контексте
FAQ
Что такое k6?
k6 — это современный open-source инструмент для нагрузочного тестирования, созданный для разработчиков. Ты пишешь тесты на JavaScript, запускаешь их из командной строки и получаешь детальные метрики производительности. Созданный Grafana Labs, k6 фокусируется на developer experience, интеграции с CI/CD и высокой производительности.
k6 бесплатный?
Да, k6 open-source (k6 OSS) полностью бесплатен. Grafana Cloud k6 предлагает облачное выполнение тестов, облачное хранилище и дополнительные функции с бесплатным и платными тарифами. Для большинства случаев open-source версия предоставляет всё необходимое.
k6 или JMeter — что лучше?
k6 лучше для разработчиков и CI/CD — тесты как код (JavaScript), быстрое выполнение, хорошая интеграция с современными инструментами. JMeter лучше для GUI-дизайна тестов и поддерживает больше протоколов из коробки. k6 обычно легче изучить и поддерживать командам, знакомым с JavaScript.
Может ли k6 тестировать браузерные взаимодействия?
Да, у k6 есть экспериментальный browser module, который позволяет тестировать в реальном браузере с Chromium. Однако сила k6 — в протокольном тестировании (HTTP, WebSocket, gRPC), которое намного эффективнее для нагрузочного тестирования.
Официальные ресурсы
Смотрите также
- JMeter Tutorial - Традиционное GUI-based нагрузочное тестирование
- Gatling Tutorial - Высокопроизводительное тестирование на Scala
- API Testing Guide - Основы API-тестирования
