import http from 'k6/http'; import { check } from 'k6'; import { Counter } from 'k6/metrics'; const seed = JSON.parse(open('./seed-data.json')); const BASE_URL = __ENV.BASE_URL || 'http://app:3000'; const successfulBookings = new Counter('successful_bookings'); export const options = { scenarios: { concurrent_booking: { executor: 'per-vu-iterations', vus: 10, iterations: 1, maxDuration: '30s', }, }, thresholds: { successful_bookings: ['count==1'], }, }; export default function () { const session = seed.sessions[0]; const user = seed.users[__VU - 1]; const response = http.post( `${BASE_URL}/sessions/${session.id}/book`, JSON.stringify({ userId: user.id }), { headers: { 'Content-Type': 'application/json' }, responseCallback: http.expectedStatuses(200, 400), } ); if (response.status === 200) { successfulBookings.add(1); } check(response, { 'booking returned expected status': (r) => r.status === 200 || r.status === 400, }); console.log( `VU ${__VU}: status=${response.status}, session=${session.id}` ); }