Testowanie obciążenia i analiza wydajności
Twój endpoint kasy działa bez zarzutu na stagingu, a potem wykłada się przy pierwszej akcji marketingowej. Latencja p95 skacze ze 120 ms do 4 s, połączenia do Postgresa się wyczerpują i nikt nie potrafi wskazać zmiany, która to spowodowała. Potrzebujesz testu obciążenia, który odtworzy ten skok, odczytu, która warstwa nasyca się jako pierwsza, oraz bramki regresji w CI, żeby kolejny deploy nie zaskoczył Cię o 21:00.
Ten przewodnik pokazuje, jak prowadzić tę pętlę z pomocą AI: wygenerować realistyczny skrypt k6, uruchomić go, dać modelowi przeczytać wynik i log wolnych zapytań, a następnie wpiąć bramkę progową do pipeline’u. Te same prompty działają w Cursorze, Claude Code i Codeksie — różni się tylko sposób uruchamiania każdego narzędzia.
Co z tego wyniesiesz
Dział zatytułowany „Co z tego wyniesiesz”- Prompt gotowy do wklejenia, który generuje uruchamialny skrypt k6 z narastającym profilem VU oraz
thresholdsdla konkretnego endpointu - Oficjalny serwer MCP k6 (
grafana/mcp-k6) wpięty we wszystkie trzy narzędzia, plusk6 x agent initdo bootstrapu jedną komendą - Prompt, który zamienia podsumowanie k6 i log wolnych zapytań Postgresa w uszeregowaną listę wąskich gardeł „najpierw najważniejsze”
- Prompt Playwright + Lighthouse, który mierzy Core Web Vitals (LCP, INP, CLS) pod równoległym obciążeniem
- Bramka regresji w CI, która oblewa build, gdy p95 ulega regresji, korzystając z kodów wyjścia
k6 run - Tryby awarii, które sprawiają, że liczby z testów obciążenia kłamią — i jak je wyłapać, zanim zaufasz dashboardowi
Wpięcie narzędzi
Dział zatytułowany „Wpięcie narzędzi”Warto zainstalować oficjalny serwer MCP k6 od Grafany (grafana/mcp-k6). Pozwala on agentowi walidować skrypty, uruchamiać testy i czytać dokumentację k6 bez przeklejania outputu CLI w tę i z powrotem. Dostarczany jest jako binarka Go lub obraz Dockera — nie jako pakiet npm, więc zignoruj wszelkie „k6 MCP” oparte na npx, które znajdziesz; to nieoficjalne nakładki.
Najszybsza droga to k6 x agent init (wymaga k6 v2.0+ na PATH), które wrzuca odpowiednie pliki skilli do Twojego edytora i rejestruje serwer MCP dla narzędzia, którego używasz:
# Bootstrap skilli k6 + konfiguracji MCP dla jednego edytora...k6 x agent init claude-code # or cursor, codex
# ...albo wepnij każdy obsługiwany edytor narazk6 x agent init --allJeśli wolisz wpiąć serwer MCP ręcznie, instalacja jest identyczna we wszystkich narzędziach — różni się tylko komenda rejestracji.
Zainstaluj binarkę, a następnie dodaj ją w Settings → MCP → Add, podając mcp-k6 jako komendę (stdio). Albo wrzuć to do .cursor/mcp.json:
{ "mcpServers": { "k6": { "command": "mcp-k6" } }}Najpierw zainstaluj binarkę: brew tap grafana/grafana && brew install mcp-k6 (lub docker pull grafana/mcp-k6:latest).
brew tap grafana/grafana && brew install mcp-k6claude mcp add --scope user --transport stdio k6 -- mcp-k6
# Brak lokalnej binarki? Uruchom przez Dockera:claude mcp add --scope user --transport stdio k6 -- docker run --rm -i grafana/mcp-k6Dodaj to do ~/.codex/config.toml:
[mcp_servers.k6]command = "mcp-k6"# or run via Docker:# command = "docker"# args = ["run", "--rm", "-i", "grafana/mcp-k6"]Zainstaluj binarkę przez brew install mcp-k6 po brew tap grafana/grafana.
Do wydajności po stronie przeglądarki przyda Ci się też Playwright MCP (@playwright/mcp), którego konfiguracja jest taka sama w każdym narzędziu:
claude mcp add playwright -- npx -y @playwright/mcp@latestW Cursorze dodaj go przez Settings → MCP; w Codeksie dodaj blok [mcp_servers.playwright] wskazujący na tę samą komendę npx.
Przepływ pracy
Dział zatytułowany „Przepływ pracy”Pętla jest taka sama w każdym narzędziu: wygeneruj skrypt, uruchom go, oddaj wyniki do analizy, a potem wepnij go w bramkę w CI. Zmienia się sposób wywołania.
- Wygeneruj skrypt na podstawie prawdziwego endpointu, docelowej liczby VU, profilu narastania i jawnych progów — a nie „napisz test obciążenia”.
- Uruchom go względem stagingu (
k6 run script.js), gdzie serwer MCP pozwala agentowi bezpośrednio wykonywać go i czytać output. - Przeanalizuj wyniki, przekazując modelowi podsumowanie k6 oraz log wolnych zapytań i prosząc o uszeregowaną listę wąskich gardeł.
- Wepnij bramkę w CI, żeby regresja p95 oblała build, zanim trafi na produkcję.
Oto jak odpalić krok 1 i 2 w każdym narzędziu. Prompt jest identyczny — wklej do dowolnego z nich prompt generowania testu obciążenia poniżej.
Otwórz panel agenta (Cmd+I), wklej prompt i pozwól mu napisać tests/load/checkout.js. Z podłączonym serwerem MCP k6 agent może sam uruchomić k6 run i iterować nad oblanymi progami w trybie inline. Użyj checkpointu przed przebiegiem, żeby móc wycofać skrypt, jeśli wygenerowany profil VU jest nierealistyczny.
claude "Generate a k6 load test at tests/load/checkout.js for POST /api/checkout:ramp 0->200 VUs over 2m, hold 5m, ramp down 1m. Add thresholds:http_req_duration p95<300 p99<800, http_req_failed rate<0.01. Then run itagainst $STAGING_URL and summarize threshold pass/fail."Z zarejestrowanym serwerem MCP k6 Claude Code uruchamia test przez serwer i odczytuje podsumowanie bez przeklejania.
Uruchom go jednorazowo z CLI albo odpal w Codex Cloud, żeby długotrwały test wykonał się poza Twoją maszyną:
codex "Generate a k6 load test at tests/load/checkout.js for POST /api/checkout(ramp 0->200 VUs over 2m, hold 5m), add p95<300/p99<800 thresholds, run itagainst $STAGING_URL, and report which thresholds failed."Do nienadzorowanych przebiegów w stylu CI dodaj --full-auto, żeby Codex mógł wykonać k6 run bez zatrzymywania się na zatwierdzenie.
Wygenerowany skrypt powinien wyjść mniej więcej tak — konkretne etapy VU i progi, a nie szkielet ścieżki happy path:
import http from 'k6/http';import { check, sleep } from 'k6';
export const options = { stages: [ { duration: '2m', target: 200 }, // ramp to peak { duration: '5m', target: 200 }, // hold { duration: '1m', target: 0 }, // ramp down ], thresholds: { http_req_duration: ['p(95)<300', 'p(99)<800'], http_req_failed: ['rate<0.01'], },};
export default function () { const res = http.post(`${__ENV.STAGING_URL}/api/checkout`, JSON.stringify({ cartId: 'c_load_test', paymentMethod: 'pm_test', }), { headers: { 'Content-Type': 'application/json' } });
check(res, { 'status is 200': (r) => r.status === 200 }); sleep(1); // think time so 200 VUs != 200 RPS}k6 run kończy się kodem niezerowym, gdy próg zostaje przekroczony, i to właśnie sprawia, że bramka CI z ostatniego kroku jest banalnie prosta.
Prompty do wklejenia
Dział zatytułowany „Prompty do wklejenia”Wepnij bramkę regresji w CI
Dział zatytułowany „Wepnij bramkę regresji w CI”Ponieważ k6 run zwraca niezerowy kod wyjścia, gdy któryś próg zostanie przekroczony, krok CI sprowadza się do uruchomienia skryptu — bez własnej logiki porównań. Użyj oficjalnej grafana/setup-k6-action, a nie ręcznie sklejonej instalacji przez curl:
- uses: actions/checkout@v5- uses: grafana/setup-k6-action@v1- run: k6 run tests/load/checkout.js env: STAGING_URL: ${{ secrets.STAGING_URL }} TOKEN: ${{ secrets.LOAD_TEST_TOKEN }}Żeby pójść dalej, podłącz Sentry MCP, aby agent mógł skorelować przekroczenia progów z błędami i wolnymi transakcjami, które Sentry zarejestrował podczas przebiegu. Zdalny serwer to najprostsza konfiguracja i jest identyczny we wszystkich narzędziach:
# Official Sentry remote MCP (recommended)claude mcp add --transport http sentry https://mcp.sentry.dev/mcp
# Local stdio alternative, if you need itclaude mcp add sentry -- npx -y @sentry/mcp-serverPotem zapytaj: „Dla okna testu obciążenia 14:00–14:08 UTC wyciągnij najwolniejsze transakcje i wszelkie nowe błędy z Sentry i zestaw je z przekroczeniami progów k6.” To zamienia czerwony przebieg CI w konkretną listę transakcji do naprawy.
Kiedy to się psuje
Dział zatytułowany „Kiedy to się psuje”Liczby z testów obciążenia kłamią w przewidywalny sposób. Oto tryby awarii, które wysyłają zespoły w pogoń za niewłaściwą naprawą.
Gdy wynik wygląda na niemożliwy, przekaż swojemu narzędziu AI pełne podsumowanie k6 i metryki zasobów generatora i poproś, żeby odróżniło prawdziwe wąskie gardło serwera od artefaktu testu, zanim eskalujesz.
Co dalej
Dział zatytułowany „Co dalej”- Architektura mikroserwisów — śledzenie wąskiego gardła przez granice usług
- Pipeline’y CI/CD — wpięcie bramki regresji w pełny przepływ deploymentu
- Framework jakości testowania — gdzie testowanie obciążenia mieści się w szerszej strategii testowania
- Zarządzanie dużymi bazami kodu — rozważania wydajnościowe w skali korporacyjnej
- Infrastructure as Code — prowizjonowanie reprezentatywnych środowisk testowania obciążenia