Найти в Дзене

Всем привет

! 👋 В прошлый раз мы разобрали отчёт k6 и научились понимать, что такое avg / p(95) / vus / iterations. Но дальше у всех закономерный вопрос: Ок… я получил какие-то циферки, а это “норм” или “плохо”? И вот тут начинается классическая боль: смотришь на данные и пытаешься “на глаз” решить, выдержала система нагрузку или нет. =)) ✅ Решение = Thresholds (пороги). Это правила, которые говорят k6: “Если метрики вышли за рамки - тест считается проваленным.” То есть прогон становится автоматически зелёным или красным, а не “мне кажется норм”. 🎯 Что такое Thresholds простыми словами Thresholds = SLO/ожидания к системе, записанные прямо в сценарии k6. Примеры понятных требований: 🚫ошибок должно быть меньше 1% 🚫 95% запросов должны быть быстрее X ms 🚫проверки (checks) должны проходить почти всегда ✅ Добавляем thresholds в k6 (минимальный пример) import http from "k6/http"; import { check, sleep } from "k6"; const BASE_URL = "https://quickpizza.grafana.com"; export const options = {

Всем привет! 👋

В прошлый раз мы разобрали отчёт k6 и научились понимать, что такое avg / p(95) / vus / iterations.

Но дальше у всех закономерный вопрос:

Ок… я получил какие-то циферки, а это “норм” или “плохо”?

И вот тут начинается классическая боль: смотришь на данные и пытаешься “на глаз” решить, выдержала система нагрузку или нет. =))

✅ Решение = Thresholds (пороги).

Это правила, которые говорят k6:

“Если метрики вышли за рамки - тест считается проваленным.”

То есть прогон становится автоматически зелёным или красным, а не “мне кажется норм”.

🎯 Что такое Thresholds простыми словами

Thresholds = SLO/ожидания к системе, записанные прямо в сценарии k6.

Примеры понятных требований:

🚫ошибок должно быть меньше 1%

🚫 95% запросов должны быть быстрее X ms

🚫проверки (checks) должны проходить почти всегда

✅ Добавляем thresholds в k6 (минимальный пример)

import http from "k6/http";

import { check, sleep } from "k6";

const BASE_URL = "https://quickpizza.grafana.com";

export const options = {

vus: 5,

duration: "5s",

thresholds: {

http_req_failed: ["rate<0.01"], // ошибок меньше 1%

http_req_duration: ["p(95)<800"], // 95% запросов быстрее 800ms

checks: ["rate>0.99"], // 99% checks успешны

},

};

export default function () {

const restrictions = {

maxCaloriesPerSlice: 500,

mustBeVegetarian: false,

excludedIngredients: ["pepperoni"],

excludedTools: ["knife"],

maxNumberOfToppings: 6,

minNumberOfToppings: 2,

};

let res = http.post(

`${BASE_URL}/api/pizza`,

JSON.stringify(restrictions),

{

headers: {

"Content-Type": "application/json",

"Authorization": "token abcdef0123456789",

},

}

);

let ok = check(res, {

"status is 200": (r) => r.status === 200,

});

if (ok) {

let body = res.json();

console.log(`${body.pizza.name} (${body.pizza.ingredients.length} ingredients)`);

} else {

console.log(`Request failed. Status=${res.status}`);

}

sleep(1);

}

🔥 Разбираем смысл

1) http_req_failed: rate<0.01

Это доля неудачных запросов.

0.01 = 1%.

То есть: из 1000 запросов максимум 10 могут “упасть” (таймауты/сеть/5xx и т.п.)

2) http_req_duration: p(95)<800

Тот самый p95, только теперь он не “для красоты”, а как критерий качества.

95% всех запросов должны уложиться в 800ms

(уложились → ✅, нет → ❌)

3) checks: rate>0.99

Если у тебя есть проверки (например status=200), можно требовать:

не меньше 99% успешных checks

Это удобно, если checks несколько и нужен общий критерий.

🟢🟥 Что будет в результате

После запуска k6 в конце покажет:

→ какие thresholds PASS

→ какие FAIL

И ты сразу видишь: система выдержала или нет, без гадания на кофейной гуще.

⚠️ Важно: значения для thresholds мы берем не “с потолка”

800ms / 1% / 99% - это примеры, чтобы было понятно, как работает механика.

В реальной жизни thresholds берутся из:

✔️ продуктовых ожиданий (что “нормально” для пользователя),

✔️ метрик прода,

✔️ или договорённостей внутри команды.

И да: baseline = точка отсчёта, но он сам по себе не доказывает, что “всё хорошо”.

👉 В следующем посте разберём самое важное: как выбрать эти цифры и как понять, что уже на baseline всё плохо.

Если было полезно - поддержи реакцией 🔥

🌐 Сайт | 💼 LinkedIn | 📘 Курс по Postman