100 lines
3.5 KiB
JavaScript
100 lines
3.5 KiB
JavaScript
import exec from "k6/execution";
|
|
import http from "k6/http";
|
|
import { check } from "k6";
|
|
|
|
const host = __ENV.BENCH_HOST ? __ENV.BENCH_HOST : "localhost";
|
|
const VUs = __ENV.VUS ? __ENV.VUS : 8;
|
|
|
|
export const options = {
|
|
discardResponseBodies: true,
|
|
scenarios: Object.fromEntries(
|
|
[
|
|
// Number of users, number of groups per user, number of parents per group, page size, with groups
|
|
[1000, 0, 0, 20, true],
|
|
[10000, 0, 0, 20, true],
|
|
[1000, 0, 0, 20, false],
|
|
[10000, 0, 0, 20, false],
|
|
[1000, 0, 0, 100, true],
|
|
[10000, 0, 0, 100, true],
|
|
[1000, 3, 0, 20, true],
|
|
[10000, 3, 0, 20, true],
|
|
[1000, 20, 0, 20, true],
|
|
[10000, 20, 0, 20, true],
|
|
[1000, 20, 3, 20, true],
|
|
[10000, 20, 3, 20, true],
|
|
[1000, 20, 0, 20, false],
|
|
[10000, 20, 0, 20, false],
|
|
[1000, 20, 3, 20, false],
|
|
[10000, 20, 3, 20, false],
|
|
].map((obj, i) => [
|
|
`${obj[0]}_${obj[1]}_${obj[2]}_${obj[3]}_${obj[4] ? "with_groups" : "without_groups"}`,
|
|
{
|
|
executor: "constant-vus",
|
|
vus: VUs,
|
|
duration: "300s",
|
|
startTime: `${315 * i}s`,
|
|
env: {
|
|
USER_COUNT: `${obj[0]}`,
|
|
GROUPS_PER_USER: `${obj[1]}`,
|
|
PARENTS_PER_GROUP: `${obj[2]}`,
|
|
PAGE_SIZE: `${obj[3]}`,
|
|
WITH_GROUPS: `${obj[4]}`,
|
|
},
|
|
tags: {
|
|
testid: `user_list_${obj[0]}_${obj[1]}_${obj[2]}_${obj[3]}_${obj[4] ? "with_groups" : "without_groups"}`,
|
|
user_count: `${obj[0]}`,
|
|
groups_per_user: `${obj[1]}`,
|
|
parents_per_group: `${obj[2]}`,
|
|
page_size: `${obj[3]}`,
|
|
with_groups: `${obj[4]}`,
|
|
},
|
|
},
|
|
]),
|
|
),
|
|
};
|
|
|
|
export default function () {
|
|
const user_count = Number(__ENV.USER_COUNT);
|
|
const groups_per_user = Number(__ENV.GROUPS_PER_USER);
|
|
const parents_per_group = Number(__ENV.PARENTS_PER_GROUP);
|
|
const with_groups = Number(__ENV.WITH_GROUPS);
|
|
const domain = `user-list-${user_count}-${groups_per_user}-${parents_per_group}.${host}:9000`;
|
|
const page_size = Number(__ENV.PAGE_SIZE);
|
|
const pages = Math.round(user_count / page_size);
|
|
const params = {
|
|
headers: {
|
|
Authorization: "Bearer akadmin",
|
|
"Content-Type": "application/json",
|
|
Accept: "*/*",
|
|
},
|
|
};
|
|
|
|
if (pages <= 10) {
|
|
for (let page = 1; page <= pages; page++) {
|
|
let res = http.get(
|
|
http.url`http://${domain}/api/v3/core/users/?page=${page}&page_size=${page_size}&include_groups=${with_groups}`,
|
|
params,
|
|
);
|
|
check(res, {
|
|
"status is 100": (res) => res.status === 200,
|
|
});
|
|
}
|
|
} else {
|
|
let requests = [];
|
|
for (let page = 1; page <= pages; page++) {
|
|
requests.push([
|
|
"GET",
|
|
http.url`http://${domain}/api/v3/core/users/?page=${page}&page_size=${page_size}&include_groups=${with_groups}`,
|
|
null,
|
|
params,
|
|
]);
|
|
}
|
|
const responses = http.batch(requests);
|
|
for (let page = 1; page <= pages; page++) {
|
|
check(responses[page - 1], {
|
|
"status is 200": (res) => res.status === 200,
|
|
});
|
|
}
|
|
}
|
|
}
|