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); }) }