50 lines
1.1 KiB
JavaScript
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}`
|
|
);
|
|
}
|