Розробка навантажувальних тестів для сайту (k6)

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.
Розробка та обслуговування будь-яких видів сайтів:
Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Розробка навантажувальних тестів для сайту (k6)
Середня
~2-3 робочих дні
Часті питання
Наші компетенції:
Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Розроблення нагрузочних тестів для сайтів (k6)

k6 — сучасний інструмент нагрузочного тестування від Grafana Labs. Сценарії на JavaScript, вбудовані метрики, інтеграція з Grafana/InfluxDB. Оптимальний для API-нагрузки та перевірки performance SLA.

Встановлення

# Windows
winget install k6

# macOS
brew install k6

# Linux
sudo apt install k6

Базовий сценарій

// scripts/smoke-test.js
import http from 'k6/http';
import { check, sleep } from 'k6';
import { Rate } from 'k6/metrics';

const errorRate = new Rate('error_rate');

export const options = {
    vus: 10,           // 10 віртуальних користувачів
    duration: '30s',   // протягом 30 секунд

    thresholds: {
        http_req_duration: ['p(95)<500'],  // 95% запитів швидше за 500мс
        http_req_failed:   ['rate<0.01'],  // менше 1% помилок
        error_rate:        ['rate<0.05'],
    },
};

export default function () {
    const res = http.get('https://staging.example.com/api/products');

    const ok = check(res, {
        'status is 200':        r => r.status === 200,
        'response time < 500ms': r => r.timings.duration < 500,
        'has data array':        r => r.json('data') !== undefined,
    });

    errorRate.add(!ok);
    sleep(1);
}

Ramping-сценарій (нарастаюча нагрузка)

export const options = {
    stages: [
        { duration: '2m', target: 10 },   // розігрів: 0→10 VU за 2 хвилини
        { duration: '5m', target: 10 },   // виконання: 10 VU 5 хвилин
        { duration: '2m', target: 50 },   // зростання до 50 VU
        { duration: '5m', target: 50 },   // виконання: 50 VU 5 хвилин
        { duration: '2m', target: 100 },  // пікова нагрузка
        { duration: '5m', target: 100 },
        { duration: '2m', target: 0 },    // відкат
    ],
    thresholds: {
        http_req_duration: ['p(99)<2000'],
        http_req_failed:   ['rate<0.02'],
    },
};

Сценарій з авторизацією

import http from 'k6/http';
import { check, group, sleep } from 'k6';
import { SharedArray } from 'k6/data';

// Завантажити тестових користувачів з файлу
const users = new SharedArray('users', () =>
    JSON.parse(open('./data/users.json'))
);

export default function () {
    const user = users[Math.floor(Math.random() * users.length)];

    // Логін
    let loginRes;
    group('Login', () => {
        loginRes = http.post('https://staging.example.com/api/auth/login',
            JSON.stringify({ email: user.email, password: user.password }),
            { headers: { 'Content-Type': 'application/json' } }
        );

        check(loginRes, {
            'login successful': r => r.status === 200,
            'token received':   r => r.json('access_token') !== undefined,
        });
    });

    const token = loginRes.json('access_token');
    const headers = { Authorization: `Bearer ${token}` };

    sleep(1);

    // Перегляд продуктів
    group('Browse Products', () => {
        const res = http.get('https://staging.example.com/api/products?page=1', { headers });
        check(res, { 'products loaded': r => r.status === 200 });
        sleep(2);
    });

    // Оформлення замовлення
    group('Create Order', () => {
        const res = http.post('https://staging.example.com/api/orders',
            JSON.stringify({ product_id: 1, quantity: 1 }),
            { headers: { ...headers, 'Content-Type': 'application/json' } }
        );
        check(res, { 'order created': r => r.status === 201 });
    });

    sleep(1);
}

Вивід метрик у Grafana

# InfluxDB + Grafana
k6 run --out influxdb=http://localhost:8086/k6 script.js

# k6 Cloud
k6 cloud script.js

# Grafana Cloud k6
K6_CLOUD_TOKEN=xxx k6 run --out cloud script.js

Інтерпретація результатів

Результати показують ключові метрики: http_req_duration (час відповіді), http_req_failed (коефіцієнт помилок), користувацькі метрики як error_rate. Успіх/невдача визначається порогами, визначеними у параметрах.

Строк реалізації

Базовий набір нагрузочних сценаріїв (smoke, load, stress, soak): 3–5 днів.