Files
2025-05-01 07:20:41 +09:00

211 lines
7.0 KiB
JavaScript

import http from 'k6/http';
import { Httpx } from 'https://jslib.k6.io/httpx/0.1.0/index.js';
import { sleep, check, group } from 'k6';
import { describe, expect } from 'https://jslib.k6.io/k6chaijs/4.3.4.3/index.js';
import { FormData } from 'https://jslib.k6.io/formdata/0.0.2/index.js';
import { SharedArray } from 'k6/data';
import { vu } from 'k6/execution';
import { Trend } from 'k6/metrics';
import { singleOptions, smokeOptions, loadOptions,
stressOptions, soakOptions, spikeOptions, breakpointOptions, spikeLocalOptions } from './config.js';
// let webApiSession = new Httpx({ baseURL: 'http://localhost:11000' });
// let inGameApiSession = new Httpx({ baseURL: 'http://localhost:11000' });
// let webApiSession = new Httpx({ baseURL: 'https://Metaverse-Stage-UGQAPI-561118213.us-west-2.elb.amazonaws.com:11000' });
// let inGameApiSession = new Httpx({ baseURL: 'https://Metaverse-Stage-UGQAPI-561118213.us-west-2.elb.amazonaws.com:11201' });
let webApiSession = new Httpx({ baseURL: 'https://stage-ugqapi.caliverse.io:11000' });
let inGameApiSession = new Httpx({ baseURL: 'https://stage-ugqapi.caliverse.io:11201' });
export const options = stressOptions;
const ApiKind = {
login: 'login',
account: 'account',
summaires: 'summaires',
newQuest: 'newQuest',
questIamge: 'questIamge',
questDialog: 'questDialog',
questStateToTest: 'questStateToTest',
setTestCompleted: 'setTestCompleted',
questStateToLive: 'questStateToLive',
deleteQuest: 'deleteQuest',
}
const apiCallTrend = {}
apiCallTrend[ApiKind.login] = new Trend('http_req_duration_login', true);
apiCallTrend[ApiKind.account] = new Trend('http_req_duration_account', true);
apiCallTrend[ApiKind.summaires] = new Trend('http_req_duration_summaires', true);
apiCallTrend[ApiKind.newQuest] = new Trend('http_req_duration_newQuest', true);
apiCallTrend[ApiKind.questIamge] = new Trend('http_req_duration_questIamge', true);
apiCallTrend[ApiKind.questDialog] = new Trend('http_req_duration_questDialog', true);
apiCallTrend[ApiKind.questStateToTest] = new Trend('http_req_duration_questStateToTest', true);
apiCallTrend[ApiKind.setTestCompleted] = new Trend('http_req_duration_setTestCompleted', true);
apiCallTrend[ApiKind.questStateToLive] = new Trend('http_req_duration_questStateToLive', true);
apiCallTrend[ApiKind.deleteQuest] = new Trend('http_req_duration_deleteQuest', true);
export function authTest() {
http.get('https://test.k6.io/contacts.php', {
tags: { my_custom_tag: 'contacts' },
});
const username = `ugq_test${vu.idInTest}`;
group(`01. authTest`, (t) => {
const payload = JSON.stringify({
loginAccountId: username
});
const params = {
headers: {
'Content-Type': 'application/json',
},
};
let res = webApiSession.post(`/api/v1/Account/dev-login-v2`, payload, params);
apiCallTrend[ApiKind.login].add(res.timings.duration);
let accessToken = res.json('accessToken');
const authParams = {
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${accessToken}`
},
};
res = webApiSession.get(`/api/v1/QuestEditor/account`, {}, authParams);
apiCallTrend[ApiKind.account].add(res.timings.duration);
res = webApiSession.get(`/api/v1/QuestEditor/summaries?pageSize=100`, payload, authParams);
apiCallTrend[ApiKind.summaires].add(res.timings.duration);
sleep(1);
})
}
const questContent = JSON.parse(open('./sample1/QuestContent.json'));
const questDialogs = [];
questDialogs.push(JSON.parse(open('./sample1/QuestDialog[0].json')));
questDialogs.push(JSON.parse(open('./sample1/QuestDialog[1].json')));
questDialogs.push(JSON.parse(open('./sample1/QuestDialog[2].json')));
export function questEditTest() {
const username = `ugq_test${vu.idInTest}`;
const payload = JSON.stringify({
loginAccountId: username
});
const params = {
headers: {
'Content-Type': 'application/json',
},
};
let res = webApiSession.post(`/api/v1/Account/dev-login-v2`, payload, params);
let accessToken = res.json('accessToken');
let userGuid = res.json('userGuid');
// 퀘스트 전부 삭제하고 시작함
function deleteAllQuests() {
const params = {
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${accessToken}`
},
};
let res = webApiSession.get(`/api/v1/QuestEditor/summaries?pageSize=100`, payload, params);
for (const quest of res.json('summaries')) {
const questContentId = quest['questContentId'];
let res = webApiSession.delete(`/api/v1/QuestEditor/quest/${questContentId}`, {}, params);
}
}
deleteAllQuests();
group(`02. questEditTest`, () => {
const params = {
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${accessToken}`
},
};
let res = webApiSession.post(`/api/v1/QuestEditor/quest`, JSON.stringify(questContent), params);
apiCallTrend[ApiKind.newQuest].add(res.timings.duration);
check(res, { 'added new quest': (r) => r.status === 200 });
sleep(1);
const questContentId = res.json('questContentId');
{
const fd = new FormData();
fd.append('title', '');
fd.append('banner', '');
const params = {
headers: {
'Content-Type': 'multipart/form-data; boundary=' + fd.boundary,
'Authorization': `Bearer ${accessToken}`
},
};
let res = webApiSession.post(`/api/v1/QuestEditor/quest-image/${questContentId}?titleImageId=1&bannerImageId=2`, fd.body(), params);
apiCallTrend[ApiKind.questIamge].add(res.timings.duration);
check(res, { 'added images': (r) => r.status === 200 });
sleep(1);
}
for (let i = 0; i < questDialogs.length; i++) {
const questDialog = questDialogs[i];
let res = webApiSession.post(`/api/v1/QuestEditor/quest-dialog/${questContentId}?taskIndex=${i}`, JSON.stringify(questDialog), params);
apiCallTrend[ApiKind.questDialog].add(res.timings.duration);
check(res, { 'added dialog': (r) => r.status === 200 });
sleep(1);
}
res = webApiSession.patch(`/api/v1/QuestEditor/quest-state/${questContentId}?state=Test`, {}, params);
apiCallTrend[ApiKind.questStateToTest].add(res.timings.duration);
check(res, { 'changed to Test': (r) => r.status === 200 });
sleep(1);
/*
const questId = res.json("questId")
const revision = res.json("revision")
res = inGameApiSession.post(`/api/v1/InGame/set-test-completed/${userGuid}?questId=${questId}&revision=${revision}`);
apiCallTrend[ApiKind.setTestCompleted].add(res.timings.duration);
check(res, { 'changed to Standby': (r) => r.status === 200 });
sleep(1);
res = webApiSession.patch(`/api/v1/QuestEditor/quest-state/${questContentId}?state=Live`, {}, params);
apiCallTrend[ApiKind.questStateToLive].add(res.timings.duration);
check(res, { 'changed to Live': (r) => r.status === 200 });
sleep(1);
*/
res = webApiSession.delete(`/api/v1/QuestEditor/quest/${questContentId}`, {}, params);
apiCallTrend[ApiKind.deleteQuest].add(res.timings.duration);
sleep(1);
})
}