Claude-skill-registry load-test-scenario-builder
Creates comprehensive load test plans with realistic scenarios, traffic models, k6 scripts, and success criteria. Use for "load testing", "performance testing", "capacity validation", or "stress testing".
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/load-test-scenario-builder" ~/.claude/skills/majiayu000-claude-skill-registry-load-test-scenario-builder && rm -rf "$T"
manifest:
skills/data/load-test-scenario-builder/SKILL.mdsource content
Load Test Scenario Builder
Validate system capacity with realistic load tests.
Load Test Scenarios
interface LoadTestScenario { name: string; description: string; virtualUsers: number; duration: string; rampUp: string; successCriteria: { p95Latency: number; errorRate: number; throughput: number; }; } const scenarios: LoadTestScenario[] = [ { name: "Baseline Load", description: "Normal traffic pattern", virtualUsers: 100, duration: "10m", rampUp: "2m", successCriteria: { p95Latency: 500, // ms errorRate: 0.01, // 1% throughput: 1000, // req/s }, }, { name: "Peak Load", description: "Black Friday traffic", virtualUsers: 1000, duration: "30m", rampUp: "5m", successCriteria: { p95Latency: 2000, errorRate: 0.05, throughput: 5000, }, }, { name: "Stress Test", description: "Find breaking point", virtualUsers: 5000, duration: "20m", rampUp: "10m", successCriteria: { p95Latency: 5000, errorRate: 0.1, throughput: 10000, }, }, ];
K6 Load Test Script
// load-tests/checkout-flow.js import http from "k6/http"; import { check, sleep } from "k6"; import { Rate } from "k6/metrics"; const errorRate = new Rate("errors"); export let options = { stages: [ { duration: "2m", target: 100 }, // Ramp up { duration: "10m", target: 100 }, // Stay at 100 { duration: "2m", target: 0 }, // Ramp down ], thresholds: { http_req_duration: ["p(95)<500"], // 95% under 500ms errors: ["rate<0.01"], // Error rate <1% }, }; export default function () { // 1. Browse products let browseRes = http.get("https://api.example.com/products"); check(browseRes, { "browse status 200": (r) => r.status === 200, }) || errorRate.add(1); sleep(1); // 2. Add to cart let addCartRes = http.post( "https://api.example.com/cart", JSON.stringify({ productId: "123", quantity: 1, }), { headers: { "Content-Type": "application/json" }, } ); check(addCartRes, { "add cart status 201": (r) => r.status === 201, }) || errorRate.add(1); sleep(2); // 3. Checkout let checkoutRes = http.post( "https://api.example.com/checkout", JSON.stringify({ paymentMethod: "card", }), { headers: { "Content-Type": "application/json" }, } ); check(checkoutRes, { "checkout status 200": (r) => r.status === 200, "checkout success": (r) => r.json("status") === "success", }) || errorRate.add(1); sleep(3); }
Traffic Models
// Realistic traffic patterns export const trafficModels = { // Steady state steadyState: { stages: [{ duration: "30m", target: 500 }], }, // Gradual ramp gradualRamp: { stages: [ { duration: "5m", target: 100 }, { duration: "5m", target: 300 }, { duration: "5m", target: 500 }, { duration: "10m", target: 500 }, { duration: "5m", target: 0 }, ], }, // Spike test spikeTest: { stages: [ { duration: "2m", target: 100 }, { duration: "1m", target: 2000 }, // Sudden spike { duration: "2m", target: 100 }, ], }, // Soak test (endurance) soakTest: { stages: [ { duration: "5m", target: 500 }, { duration: "4h", target: 500 }, // Long duration { duration: "5m", target: 0 }, ], }, };
Success Thresholds
export const thresholds = { // Latency http_req_duration: [ "p(50)<200", // 50% under 200ms "p(95)<500", // 95% under 500ms "p(99)<1000", // 99% under 1s ], // Error rate http_req_failed: ["rate<0.01"], // <1% errors // Throughput http_reqs: ["rate>1000"], // >1000 req/s // Custom metrics checkout_duration: ["p(95)<2000"], checkout_success_rate: ["rate>0.95"], };
Running Load Tests
#!/bin/bash # scripts/run-load-tests.sh echo "Running load tests..." # Baseline test k6 run --vus 100 --duration 10m load-tests/checkout-flow.js # Peak load test k6 run --vus 1000 --duration 30m load-tests/checkout-flow.js # Stress test (find breaking point) k6 run --vus 5000 --duration 20m load-tests/stress-test.js # Generate report k6 run --out json=results.json load-tests/checkout-flow.js k6 run --out influxdb=http://localhost:8086 load-tests/checkout-flow.js
Result Analysis
interface LoadTestResult { scenario: string; timestamp: Date; metrics: { p50Latency: number; p95Latency: number; p99Latency: number; errorRate: number; throughput: number; maxVUs: number; }; passed: boolean; notes: string[]; } function analyzeResults(results: LoadTestResult) { console.log(\`Load Test: \${results.scenario}\`); console.log(\`Status: \${results.passed ? '✅ PASS' : '❌ FAIL'}\`); console.log(\`p95 Latency: \${results.metrics.p95Latency}ms\`); console.log(\`Error Rate: \${(results.metrics.errorRate * 100).toFixed(2)}%\`); console.log(\`Throughput: \${results.metrics.throughput} req/s\`); if (!results.passed) { console.log('Failed criteria:'); results.notes.forEach(note => console.log(\` - \${note}\`)); } }
Output Checklist
- Scenarios defined
- k6 scripts created
- Traffic models configured
- Success criteria set
- CI integration
- Results analysis ENDFILE