# K6 Load Testing — Goodgo Platform ## Overview Performance load tests for critical API paths using [K6](https://k6.io/). ## Test Suites | Script | Target | Peak VUs | Duration | |--------|--------|----------|----------| | `auth.js` | Login/Register | 100 | 2min | | `listings.js` | Search + Detail | 500 | 3min | | `search.js` | Text + Geo search | 200 | 3min | | `search-advanced.js` | Combined geo + text + filters, pagination | 300 | 3min | | `admin.js` | Moderation queue, dashboard, audit logs | 50 | 2.5min | | `mcp.js` | MCP server discovery, property-search, valuation | 120 | 2.5min | | `payments.js` | Create + List | 50 | 2min | ## SLA Thresholds | Metric | Threshold | |--------|-----------| | p50 latency | < 200ms | | p95 latency | < 500ms | | p99 latency | < 1000ms | | Error rate | < 1% | ### Per-Suite Custom Thresholds | Suite | Metric | Threshold | |-------|--------|-----------| | search-advanced | advanced_search_duration p95 | < 800ms | | search-advanced | geo_filter_search_duration p95 | < 800ms | | admin | moderation_action_duration p95 | < 800ms | | admin | admin_dashboard_duration p95 | < 500ms | | mcp | mcp_property_search_duration p95 | < 1500ms | | mcp | mcp_valuation_duration p95 | < 1000ms | | mcp | mcp_batch_valuation_duration p95 | < 2000ms | ## Prerequisites ```bash # Install K6 brew install k6 # macOS # or: https://grafana.com/docs/k6/latest/set-up/install-k6/ # Start the API pnpm --filter @goodgo/api run dev ``` ## Running Tests ```bash # Run individual suite k6 run load-tests/scripts/auth.js k6 run load-tests/scripts/listings.js k6 run load-tests/scripts/search.js k6 run load-tests/scripts/search-advanced.js k6 run load-tests/scripts/admin.js k6 run load-tests/scripts/mcp.js k6 run load-tests/scripts/payments.js # Run against a custom API URL k6 run -e API_BASE_URL=https://staging.goodgo.vn load-tests/scripts/auth.js # Run all suites sequentially for f in load-tests/scripts/*.js; do k6 run "$f"; done # Export results as JSON k6 run --out json=results/auth.json load-tests/scripts/auth.js ``` ## CI Integration The `load-test.yml` workflow runs as an optional manual stage in GitHub Actions. Trigger via `workflow_dispatch` with a suite selector. ## Directory Structure ``` load-tests/ ├── lib/ │ └── config.js # Shared config, helpers, SLA thresholds ├── scripts/ │ ├── auth.js # Auth flow load tests │ ├── listings.js # Listings search + detail │ ├── search.js # Full-text + geo search (basic) │ ├── search-advanced.js # Combined geo + text + filter search │ ├── admin.js # Admin moderation, dashboard, audit │ ├── mcp.js # MCP server endpoints (property-search, valuation) │ └── payments.js # Payment creation + listing ├── results/ │ └── BASELINE-REPORT.md # Baseline performance report └── README.md ```