Files
Backend_Assignment1/k6/booking-race.js
T

50 lines
1.1 KiB
JavaScript

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}`
);
}