К основному содержанию
скилл CX Codex

k6-test-maintenance — скилл для Claude Code: правка k6-тестов

Скилл для сопровождения уже написанных k6-тестов: подтягивает пороги по данным трендов, переносит скрипты на новую версию k6, чинит тесты после изменений в сервисе.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add grafana/skills --skill k6-test-maintenance -a claude-code
Открыть на GitHub

Что делает k6-test-maintenance

Скилл закрывает пять задач сопровождения: подтягивание порогов по наблюдаемым метрикам, миграцию скрипта на новую версию k6, адаптацию теста к изменившемуся сервису, рефакторинг и аудит по актуальным практикам. Для каждой задачи в references/workflows.md лежит пошаговая процедура.

Главный принцип — контроль изменений по поведению. Синтаксические правки вроде переименования переменной или let → const скилл применяет сразу. Всё, что меняет метрики, пороги, тайминги или профиль нагрузки, он показывает диффом с обоснованием и ждёт подтверждения. Порог для «поведенческого» намеренно низкий, потому что правка вида p(95)<500 → p(95)<420 может задеть CI-гейты и расчёт SLO.

Перед правкой, затрагивающей k6 API или импорты, скилл сверяется с документацией и ссылается на источник. Для этого нужен либо mcp-k6 с инструментами validate_script и get_documentation, либо CLI k6 x docs. Скрипты в Grafana Cloud правятся только через k6-manage по схеме GET → бэкап → правка → валидация → PUT. Каждая правка проходит k6 inspect, а для изменений рантайм-логики — ещё и прогон в облаке.

Какие задачи решает

  • подтянуть пороги по данным трендов вместо ручной подгонки
  • перенести скрипт на новую версию k6 без поломки импортов
  • починить тест после того, как сервис сменил эндпоинт
  • вычистить мёртвый код и устаревшие конструкции в тесте
  • сверить скрипт с актуальной документацией k6

Примеры запросов агенту

  • почини мой k6-тест, он падает после деплоя
  • подтяни пороги в thresholds по последним прогонам
  • перенеси этот скрипт на новую версию k6 и покажи дифф

Как установить k6-test-maintenance

1Через Skills CLI (Vercel)

npx skills add grafana/skills --skill k6-test-maintenance -a claude-code

2Вручную: положить файлы

~/.claude/skills/k6-test-maintenance/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/k6-test-maintenance/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о k6-test-maintenance

Как установить k6-test-maintenance в Claude?

Выполните npx skills add grafana/skills --skill k6-test-maintenance -a claude-code. Скилл встанет в ~/.claude/skills/k6-test-maintenance/SKILL.md.

Что делает k6-test-maintenance?

Сопровождает существующие k6-скрипты: подтягивает пороги, мигрирует на новые релизы k6, чинит тесты после изменений в сервисе, рефакторит и проверяет по актуальным практикам. Новые тесты он не пишет — для этого есть скилл k6.

Что нужно для работы скилла?

Для сверки с документацией — mcp-k6 с validate_script и get_documentation либо CLI k6 x docs. Скрипты в Grafana Cloud правятся через k6-manage, доступ к API идёт через gcx.

Исходный текст

SKILL.md · Apache-2.0
---
name: k6-test-maintenance
description: >
  Maintain and improve existing k6 test scripts. Covers threshold tightening
  based on trend data, version migration between k6 releases, auto-fixing tests
  when the underlying service changes, refactoring for cleanliness, and auditing
  scripts against current best practices from docs. Use when the user asks to
  fix a failing k6 test, tighten thresholds, migrate a script to a new k6
  version, refactor a test, update a script after a service change, or improve
  a script with best practices. Trigger on phrases like "fix my k6 test",
  "tighten my thresholds", "migrate to k6 v2", "update my test script",
  "refactor this k6 test", "my test is failing after a deploy", "apply best
  practices to my script", "modernize my k6 test", or "the service changed and
  my test broke". Also trigger when another skill (k6-trend-analysis or
  k6-cloud-investigate-test) hands off with a recommendation to edit a script.
  Maintains existing scripts; to author a new test use the k6 skill, or
  k6-browser-test for a browser test.
---

# k6 Test Maintenance

Maintain, fix, and improve existing k6 test scripts. Five maintenance tasks,
each with a step-by-step procedure in [`references/workflows.md`](references/workflows.md):

1. **Threshold tightening** -- adjust threshold values based on observed metrics
2. **Version migration** -- update scripts for new k6 releases
3. **Service change adaptation** -- fix tests when the underlying service changes
4. **Refactoring** -- clean up and modernize test code
5. **Best practices audit** -- check scripts against current k6 best practices

## Core principle: behavior-aware change control

Classify every proposed change by whether it alters the test's runtime behavior:

- **Syntactic** (behavior unchanged): the k6 runtime produces identical metrics,
  pass/fail results, and endpoints. Examples: rename a variable, `let` → `const`,
  remove unused imports, update comments, reformat. **Apply directly.**
- **Behavioral** (behavior differs): anything affecting metrics, pass/fail,
  timing, request targets, or load shape. Examples: threshold value changes,
  adding `sleep()`, endpoint URL updates, check rewrites, scenario changes, new
  thresholds. **Always present as a diff with rationale and require confirmation.**

The threshold for "behavioral" is deliberately low. If in doubt, treat it as
behavioral and ask -- a trivial-looking threshold change can cascade to CI
gates, SLO calculations, and alerting.

## Dependencies

- **`k6-manage`** -- fetch and edit GCk6-hosted scripts safely (§5: GET, backup,
  edit, validate, PUT, verify by sha256). Read it before touching any
  cloud-hosted script.
- **`gcx`** -- sole tool for Grafana Cloud API access.
- **mcp-k6** tools -- `validate_script` and `get_documentation`. Check
  availability first; fall back to `k6 x docs` if absent.
- **`k6 x docs`** CLI -- documentation lookup when mcp-k6 isn't configured.
- **`k6` CLI** -- local validation (`k6 inspect`, `k6 run`).

## Validation loop (every edit)

Every workflow produces a modified script. Never present or PUT an unvalidated
script -- run this loop, fixing and re-running until it passes:

1. **Parse-check**: `k6 inspect <script>` -- catches syntax errors, invalid
   options, broken imports. Works on all types including browser tests (no
   browser needed). If mcp-k6 is available, also run `validate_script`.
2. **Local smoke** (non-browser, service reachable):
   `k6 run --vus 1 --iterations 1 <script>`.
3. **Classify the change** (below) and **verify per the matrix** -- recipes in
   [`references/verification.md`](references/verification.md).
4. **Cloud-hosted scripts**: apply via the k6-manage §5 safe-edit recipe
   (GET → backup → edit → validate → PUT as `application/octet-stream` →
   sha256-verify).

### Change classification

- **Class A -- declarative-config only.** The diff is confined to
  `options.thresholds` or similar declarative fields that don't alter what the
  k6 runtime executes; the bytes inside `default function`, imported modules,
  and check predicates are byte-identical. Example: `p(95)<500` → `p(95)<420`.
- **Class B -- runtime logic changes.** Any change to `default function`,
  imports, helper modules, request URLs, check predicates, or to
  `scenarios.*.vus`/`iterations`/`duration`/`executor` (which alter load shape
  and metric distributions). Example: changing a URL, adding a check, rewriting
  auth, switching executors.

When in doubt, treat as Class B.

### Verification matrix

| Class | Test duration | Verification |
|-------|---------------|--------------|
| **A** | any | sha256 + `k6 inspect` + **historical pass/fail prediction**. No cloud run needed. |
| **B** | short (< 5 min) | sha256 + `k6 inspect` + **full cloud run** (k6-manage §11). |
| **B** | long (≥ 5 min) | sha256 + `k6 inspect` + **local 1-iteration smoke** + **`k6 cloud run` of a local copy with `--vus 1 --iterations 1`**. PUT to the saved test only after the cloud smoke passes. |

Verification depth depends on the change class, not the test's duration -- most
edits don't need a full run, and production tests may run for hours. Per-class
recipes (Class A prediction table, Class B short/long, edge cases like scenario
changes and loosening) are in
[`references/verification.md`](references/verification.md).

## Documentation lookup

Before proposing any change that touches k6 APIs, imports, or patterns, confirm
it against current docs and **cite the source** in your report -- this grounds
recommendations in the real API, not stale model knowledge. Look up in order:

1. **mcp-k6** (preferred): `get_documentation("best_practices")`,
   `get_documentation("javascript-api/k6-browser")`, `validate_script(...)`.
2. **`k6 x docs`** CLI (always available):
   ```bash
   k6 x docs using-k6 thresholds
   k6 x docs javascript-api k6-http
   k6 x docs search "websocket migration"
   ```
   2-call strategy: try the direct path first; if it returns a topic list, pick
   the subtopic and call again. Full parent paths required (`using-k6 thresholds`,
   not `thresholds`). `k6 x docs` serves docs for the installed k6 version -- it
   may lag the target version when migrating.
3. **Web fetch** (last resort): `https://grafana.com/docs/k6/latest/`.

## Async check pattern

A common browser-test bug: using `check()` from `k6` with async predicates. The
built-in `check()` does not await Promises, so
`check(page, { 'title': p => p.locator('h1').textContent() === 'Foo' })` silently
passes because the Promise object is truthy. Two valid fixes:

- **Async-aware check from jslib**:
  `import { check } from 'https://jslib.k6.io/k6-utils/1.5.0/index.js'` -- then
  predicates can be `async` and `await` inside them works.
- **Resolve the value before the check**:
  `const text = await page.locator('h1').textContent(); check(text, { ... })` --
  keeps the standard sync `check` from `k6`.

When you hit this during any workflow (migration, refactor, audit), flag it as a
behavioral bug and propose one of these fixes.

## Script sources

- **GCk6-hosted** -- fetched and pushed via `k6-manage` §5 (GET → backup → edit →
  validate → PUT → verify sha256).
- **Local on disk** -- read and edit directly. Validate before presenting.

Determine the source before starting: a GCk6 test URL or ID is cloud-hosted; a
file path is local.

> **Authoring a new test, not maintaining one?** This skill improves scripts
> that already exist. To write a **new** browser test from a plain-language
> user journey (selectors discovered by exploring the live site), use the
> **k6-browser-test** skill; for other new k6 scripts, use the **k6** skill.

## Workflows

Full procedures are in [`references/workflows.md`](references/workflows.md):

- **[Threshold tightening](references/workflows.md#threshold-tightening)** --
  propose values with observed-metric justification, diff, apply, Class A verify.
- **[Version migration](references/workflows.md#version-migration)** -- find
  deprecated/renamed APIs, classify syntactic vs behavioral, apply, Class B verify.
- **[Service change adaptation](references/workflows.md#service-change-adaptation)**
  -- map each service change to a script change, propose fixes, Class B verify.
- **[Refactoring](references/workflows.md#refactoring)** -- find issues,
  auto-apply syntactic, propose behavioral, Class B verify after confirmation.
- **[Best practices audit](references/workflows.md#best-practices-audit)** --
  doc-driven audit across thresholds, load design, resource management, code
  quality, and browser specifics.

All five follow behavior-aware change control: auto-apply syntactic changes,
present behavioral ones as diffs for confirmation.

## Gotchas

| Issue | Detail |
|-------|--------|
| **Cloud script format** | GCk6 scripts can be single files or tar archives. Detect with `file(1)` before editing (see k6-manage §5). |
| **Zero-observation thresholds** | A threshold on a metric with no observations passes by default. When adding new thresholds, ensure the metric is actually emitted by the test. |
| **abortOnFail cascades** | If a threshold has `abortOnFail: true`, tightening it means runs abort earlier. Warn the user. |
| **Browser script validation** | Browser scripts can't be validated with `k6 run --iterations 1` without a browser. Use `k6 inspect` for parse-only validation, or `validate_script` via mcp-k6. |
| **k6 x docs version alignment** | `k6 x docs` serves docs for the installed k6 version; when migrating to a newer version, local docs may not reflect the target API. Note this in migration lookups. |
| **Script drift after edit** | After pushing a cloud-hosted script, the next run uses the new version, but historical runs keep their bundled snapshot. To investigate a past failure, compare the run-bundled script (read-only), not the current one. |

## References

- [`references/workflows.md`](references/workflows.md) -- step-by-step procedures for the five maintenance tasks
- [`references/verification.md`](references/verification.md) -- per-class post-edit verification recipes

© grafana · Apache-2.0 · grafana/skills

Похожие скиллы

Всё по теме «Тесты и QA» →
load-test-builder patricio0312rev Собирает нагрузочные и стресс-тесты на k6, Artillery или autocannon и помогает встроить их в CI как проверку производительности. CX Codex +1 316установок stress-testing aj-geddes Скилл для нагрузочного стресс-тестирования: помогает найти точку отказа, проверить автоскейлинг и восстановление после перегрузки. CX Codex +1 497установок qa-dashboard kindlmann Собирает дашборды и отчёты по тестам: Allure, Grafana, ReportPortal. Пригодится, когда результаты прогонов нужно показать команде или руководству. CX Codex +1 1 100установок performance-testing kindlmann Помогает настроить нагрузочные тесты k6 и замеры Core Web Vitals через Lighthouse CI, превращая бюджеты производительности в блокирующие проверки в пайплайне. CX Codex +1 1 100установок grafana-dashboards Seth Hobson Скилл помогает создавать Grafana-дашборды для метрик систем и приложений. Подойдёт для мониторинга, SLO и операционных интерфейсов наблюдаемости. CX Codex 13 097установок slo-implementation Seth Hobson Помогает задать измеримые цели надёжности, считать запас ошибок и настраивать оповещения. Пригодится, когда нужно отслеживать доступность и задержку сервиса. CX Codex 10 400установок

Из того же набора47

k6-manage Управляет нагрузочными тестами, логами и метриками в Grafana Cloud k6 через утилиту gcx или прямые запросы curl. CX Codex +1 2 900установок check-npm Проверяет конфигурацию пакетного менеджера в JS/TS-репозитории: версии инструментов, lifecycle-скрипты, опасные протоколы зависимостей и минимальный возраст релиза. CX Codex +1 2 800установок audit-and-reduce-dependencies Очищает дерево зависимостей JavaScript в проектах с pnpm и сокращает размер lockfile без изменения структуры воркспейса. Пригодится при оптимизации плагинов Grafana и монорепозиториев. CX Codex +1 2 800установок k6-cloud-investigate-test Ведёт агента по девяти шагам разбора теста или прогона Grafana Cloud k6: скрипт, история запусков, статус, метрики и логи. CX Codex +1 2 600установок k6-trend-analysis Анализирует динамику прогонов тестов Grafana Cloud k6 и выявляет медленную деградацию метрик до срабатывания порогов. Пригодится для оценки запаса производительности и аудита тестов. CX Codex +1 2 600установок synthetic-monitoring-checks Пишет проверки Grafana Cloud Synthetic Monitoring: скриптовые на k6 и браузерные. Пригодится, когда нужно следить за доступностью логина или оформления заказа из разных регионов. CX Codex +1 2 300установок profilecli-insights Скилл тянет живые профили с сервера Pyroscope через profilecli, разбирает их в pprof и связывает горячие функции с кодом в текущем репозитории. CX Codex +1 1 900установок frontend-session-rca Скилл разбирает одну сессию реального пользователя из Grafana Frontend Observability: что случилось, какие ошибки, в каком порядке и что с этим делать. CX Codex +1 1 100установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой