211 lines
7.0 KiB
JavaScript
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);
|
|
|
|
})
|
|
}
|
|
|