공식 홈페이지의 예제를 참고하여 작성하였다.
import http from 'k6/http';
import { check, group, sleep, fail } from 'k6';
export const options = {
stages: [{ target: 15, duration: '30s' }],
thresholds: {
'http_req_duration': ['p(95)<500', 'p(99)<1500'],
'http_req_duration{name:PublicCrocs}': ['avg<400'],
'http_req_duration{name:Create}': ['avg<600', 'max<1000'],
},
};
const USERNAME = `user`; // Set your own email or `${randomString(10)}@example.com`;
const PASSWORD = 'user';
const BASE_URL = 'https://daengnyang.store';
export function setup() {
// register a new user and authenticate via a Bearer token.
const loginRes = http.post(`${BASE_URL}/api/v1/users/login`, {
userName: USERNAME,
password: PASSWORD
});
const authToken = loginRes.json('result.accessToken');
check(authToken, { 'logged in successfully': () => authToken !== '' });
return authToken;
}
export default (authToken) => {
const requestConfigWithTag = (tag) => ({
headers: {
Authorization: `Bearer ${authToken}`,
"Content-Type": 'application/json;charset=UTF-8'
}
});
group('Record', () => {
let URL = `${BASE_URL}/api/v1/pets/2/records`;
group('Create records', () => {
const payload = {
title: '맛있는 간식이 먹고싶어요',
body: '간식 사주세요',
tagId: 2,
isPublic: true
};
const res = http.post(URL, payload, requestConfigWithTag({ name: 'Create' }));
if (check(res, { 'Records created correctly': (r) => r.status === 200 })) {
URL = `${URL}/${res.json('id')}`;
} else {
console.log(`Unable to create a Record ${res.status} ${res.body}`);
return;
}
});
group('Update Record', () => {
const payload = {
tagId: 2,
title: '다온아 안녕',
body: '별이야 안녕?',
isPublic: true
};
const res = http.put(URL, payload, requestConfigWithTag({ name: 'Update' }));
const isSuccessfulUpdate = check(res, {
'Update worked': () => res.status === 201,
'Updated name is correct': () => res.json('title') === '다온아 안녕',
});
if (!isSuccessfulUpdate) {
// console.log(`Unable to update the record ${res.status} ${res.body}`);
return;
}
});
const delRes = http.del(URL, null, requestConfigWithTag({ name: 'Delete' }));
const isSuccessfulDelete = check(null, {
'Record was deleted correctly': () => delRes.status === 200,
});
if (!isSuccessfulDelete) {
// console.log(`Croc was not deleted properly`);
return;
}
});
sleep(1);
};