apitest

GitHub

API QA技能,通过devenv准备环境、交互式获取凭证、使用curl进行HTTP测试,并支持将大型测试套件分片给并行worker执行。

.cursor/skills/apitest/SKILL.md flexprice/flexprice

Trigger Scenarios

apitest api test curl localhost QA local API

Install

npx skills add flexprice/flexprice --skill apitest -g -y
More Options

Use without installing

npx skills use flexprice/flexprice@apitest

指定 Agent (Claude Code)

npx skills add flexprice/flexprice --skill apitest -a claude-code -g -y

安装 repo 全部 skill

npx skills add flexprice/flexprice --all -g -y

预览 repo 内 skill

npx skills add flexprice/flexprice --list

SKILL.md

Frontmatter
{
    "name": "apitest",
    "description": "Master HTTP QA: chains devenv then interactive API key \/ X-Environment-ID then real curls. Shards suites to parallel workers. Trigger: apitest, api test, curl localhost, QA local API.",
    "disable-model-invocation": false
}

apitest — API QA (master)

This skill acts as master in a master / worker pattern for large workloads: it plans, sequences, holds secrets policy, merges outcomes. Delegate narrow, independent slabs to worker runs (parallel Cursor agents or separate chat tasks) — never fork without a stable BASE_URL, mode, and credential contract.

Always compose devenv for infra + deployment mode before HTTP unless endpoints are confirmed up.


0. Prerequisites (delegation)

  1. devenv phase — user intent (host API / consumer / temporal_worker / local / full compose), .env* hygiene, MAX_ROUNDS verify loop GREEN.
  2. Base URL — default http://127.0.0.1:8080; path prefix /v1 (see CLAUDE.md/AGENTS.md — no trailing slash on base).
  3. Trust model — user runs commands on their machine only; orchestrator prefers stdin env injection for curls not logging raw secrets.

1. Interactive credential ritual (blocking questions)

Ask explicitly, one bundle at a time:

# Prompt Stored as (concept)
1 API key value for x-api-key header (often local sk_local_flexprice_test_key)? $FLEXPRICE_TEST_API_KEY
2 X-Environment-ID GUID if authenticated routes scope to an environment (internal/types/header.go)? $FLEXPRICE_TEST_ENV_ID
3 Any bearer JWT flow instead/in addition? Rare for pure api-key dashboards. $AUTH_HEADER literal
4 Alternate HOST (staging/tunnel)? $BASE_URL override

Operational rule: Prefer shell:

read -rs FLEXPRICE_TEST_API_KEY && export FLEXPRICE_TEST_API_KEY && export BASE_URL=http://127.0.0.1:8080 && …

Never paste full keys back in assistant prose — confirm present/absent/length fingerprint only.


2. Minimal curl toolchain

# Health (normally unauthenticated outer router — GET /health is root router; swagger says /v1 base for API)
curl -sfS "${BASE_URL:-http://127.0.0.1:8080}/health" | head -c 200 || echo FAIL

# Private v1 example skeleton
curl -sfS "${BASE_URL:-http://127.0.0.1:8080}/v1/some/route" \
  -H "x-api-key: ${FLEXPRICE_TEST_API_KEY}" \
  ${FLEXPRICE_TEST_ENV_ID:+-H "X-Environment-ID: ${FLEXPRICE_TEST_ENV_ID}" } \
  -H "Accept: application/json"

Adapt routes from docs/swagger/ (swagger-3-0.json / handler paths in internal/api/router.go).

Verb matrix: -f curls fail on 4xx/5xx — toggle -w '\n%{http_code}\n' when debugging semantics.

Large bodies: --data-binary @file.json plus -H 'Content-Type: application/json'.


3. Standard orchestration playbook (deterministic phases)

Tick mentally as Orchestrator:

[A] Requirement intake — verbs (GET invoice? POST event?), tenancy surface, destructive vs readonly
[B] Compose **devenv** — mode + infra + verify loop GREEN
[C] Credential interactive gather — §1 vars exported in user shell orchestrator echoes
[D] Smoke ladder — health → simplest GET → progressively complex POST
[E] Record actual HTTP codes + trimmed JSON excerpts (truncate >2KB bodies)
[F] Tear-down optional — advise user Ctrl-C server / docker stop if ephemeral

Consumer mode caveat: consumer / ingestion-only modes expose few/no HTTP tests meaningful — steer user to api or local for REST probes while consumer runs sibling process.


4. Master / worker decomposition (massive workflows)

When splitting is justified:

  • > ~8 independent endpoints without shared mutable side-effect ordering.
  • Geography across Swagger tags (Customers, Invoices, Events, …).

Orchestrator tasks:

Task Responsibility
Publish immutable contract snippet snippet to workers: BASE_URL, header list (names only — keys via env mirror), forbid schema drift
Freeze ordering dependencies (eg create-customer-before-subscription DAG)
Merge JSON pass/fail report table

Worker tasks:

Task Responsibility
Single tag / subdomain file list bounded
curls only — readonly repos if parallel (readonly Cursor agent mode preferred)
Return compact stdout block + stray stderr

Mechanism hints (implementation-agnostic wording for Cursor stacks):

  • Use multiple parallel agent runs (background tasks) when product UI supports partitioning — isolate promptsavoid shared file edits concurrently on identical paths.
  • If only single agent lane: sequential micro-batches respecting DAG.

Workers pull infra state from devenv completion note (BASE_URL GREEN).

Anti-pattern:** workers independently restart docker / rewrite .envOrchestrator only.


5. Automated depth tiers

Tier Scope Typical duration cue
T0 Smoke /health, one cheap GET /v1/... minutes
T1 Tagged All GET list endpoints user lists tens of minutes sequential
T2 Mutation Creates + compensating deletes/idempotency document cleanup
T3 Replay Event pipelines / delayed ClickHouse eventual — mark observe async

6. Failure triage playbook

Observation Hypothesis ladder
401 / 403 key / rbac / missing env header / provider mismatch (.env docker vs host hosts)
404 route Forgot /v1 prefix vs mount
hangs infra not READY — rerun devenv §Verification
5xx logs docker compose logs flexprice-api hybrid OR stdout process

Attach Correlation: request IDs from logging middleware (internal/rest/middleware).


7. Combining with Temporal / queues

Pure HTTP probes cannot finalize Metering completeness — annotate defer validation (ClickHouse/dashboard) referencing docs/FLOWS/event-processing.md.

Temporal heavy flows: optionally poll Temporal UI human step — mark automate-later.


8. Forbidden actions

  • Storing echoed secrets in markdown docs / repo commits.
  • Production curls without explicit dual opt-in (user typed target twice).
  • Bypassing RBAC intentional brute force — escalate with user instead.

Cross-links

Role Skill
Bring-up / env devenv
go test godev
Architecture arch + docs/FLOWS/*

The master orchestrator stance: keep this file thin on endpoint enumeration (Swagger is source) — prioritize interaction contract + safety + parallelism rules.

Version History

  • 0b58626 Current 2026-08-20 14:48

Same Skill Collection

.context/sync/SKILL.md
.cursor/skills/arch/SKILL.md
.cursor/skills/compose/SKILL.md
.cursor/skills/gh/SKILL.md
.cursor/skills/godev/SKILL.md
.cursor/skills/openapi/SKILL.md
.cursor/skills/pr/SKILL.md
.cursor/skills/devenv/SKILL.md

Metadata

Files
0
Version
0b58626
Hash
46a41264
Indexed
2026-08-20 14:48

- 위키
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-08-25 08:47
浙ICP备14020137号-1 $방문자$