// k6 load test — POST /v1/track against the local cdp-ingest service. // // Usage: // brew install k6 # one-time // k6 run tests/k6/track.js # defaults: 50 CCU, 1m // // Override at the CLI: // k6 run -e WRITE_KEY=xxx -e BASE=http://localhost:3049 \ // -e VUS=100 -e DURATION=2m tests/k6/track.js import http from 'k6/http'; import { check } from 'k6'; import encoding from 'k6/encoding'; const BASE = __ENV.BASE ?? 'http://localhost:3049'; const WRITE_KEY = __ENV.WRITE_KEY ?? 'cdp_dev_writekey_1234567890'; const VUS = parseInt(__ENV.VUS ?? '50', 10); const DURATION = __ENV.DURATION ?? '1m'; // Segment-compatible auth: Basic base64(writeKey + ":") const AUTH = 'Basic ' + encoding.b64encode(`${WRITE_KEY}:`); export const options = { scenarios: { constant_load: { executor: 'constant-vus', vus: VUS, duration: DURATION, }, }, thresholds: { http_req_failed: ['rate<0.01'], // < 1% errors http_req_duration: ['p(95)<300', 'p(99)<800'], checks: ['rate>0.99'], }, }; export default function () { const now = new Date().toISOString(); const messageId = `k6_${__VU}_${__ITER}_${Date.now()}`; const payload = JSON.stringify({ type: 'track', messageId, anonymousId: `anon_${__VU}`, userId: `user_${__VU}@example.com`, event: 'k6 Test Event', properties: { testProp: 'load test', vu: __VU, iter: __ITER, price: 42.5, }, timestamp: now, sentAt: now, context: { library_name: 'k6', library_version: '0.1.0', ip: '127.0.0.1', userAgent: 'k6/loadtest', locale: 'en-US', page: { path: '/', host: 'example.com', title: 'Example page', url: 'https://example.com/', }, }, }); const res = http.post(`${BASE}/v1/track`, payload, { headers: { 'Content-Type': 'application/json', Authorization: AUTH, }, }); check(res, { 'status 200': (r) => r.status === 200, 'body ok': (r) => r.json('ok') === true, 'fast (<500ms)': (r) => r.timings.duration < 500, }); }