test(performance): implement k6 load testing scenarios and java result parser

This commit is contained in:
2026-05-17 02:21:28 +07:00
parent 4a0ae1d615
commit abeb99ed61
19 changed files with 4036 additions and 0 deletions
@@ -0,0 +1,49 @@
{
"_comment": "WalkGuide Load Test — 50 VUs, 5 minutes. Normal production load simulation.",
"_meta": {
"min_vu_requirement": 50,
"note": "Pillar 3 ketentuan: load test harus >= 50 concurrent users"
},
"scenarios": {
"load_auth": {
"executor": "ramping-vus",
"startVUs": 0,
"stages": [
{ "duration": "30s", "target": 10 },
{ "duration": "60s", "target": 20 },
{ "duration": "120s", "target": 20 },
{ "duration": "30s", "target": 0 }
],
"gracefulRampDown": "15s"
},
"load_location": {
"executor": "ramping-vus",
"startVUs": 0,
"stages": [
{ "duration": "30s", "target": 15 },
{ "duration": "120s", "target": 20 },
{ "duration": "30s", "target": 0 }
],
"startTime": "10s",
"gracefulRampDown": "15s"
},
"load_obstacle": {
"executor": "constant-vus",
"vus": 10,
"duration": "180s",
"startTime": "20s"
}
},
"thresholds": {
"http_req_duration": ["p(95)<500", "p(99)<1000"],
"http_req_failed": ["rate<0.01"],
"walkguide_error_rate": ["rate<0.01"],
"walkguide_location_latency_ms": ["p(95)<300"],
"walkguide_obstacle_latency_ms": ["p(95)<400"],
"walkguide_sos_latency_ms": ["p(95)<200"],
"walkguide_auth_latency_ms": ["p(95)<800"],
"walkguide_timeline_latency_ms": ["p(95)<1000"]
},
"summaryTrendStats": ["min", "med", "avg", "p(90)", "p(95)", "p(99)", "max"],
"summary_export": "k6-results/load-test-summary.json"
}
@@ -0,0 +1,34 @@
{
"_comment": "WalkGuide Smoke Test — 10 VUs, 1 minute. Verifikasi semua endpoint reachable dan basic functionality OK.",
"scenarios": {
"smoke_auth": {
"executor": "constant-vus",
"vus": 3,
"duration": "60s",
"exec": "default",
"env": { "SCENARIO": "auth" }
},
"smoke_location": {
"executor": "constant-vus",
"vus": 4,
"duration": "60s",
"exec": "default",
"env": { "SCENARIO": "location" }
},
"smoke_analytics": {
"executor": "constant-vus",
"vus": 3,
"duration": "60s",
"exec": "default",
"env": { "SCENARIO": "analytics" }
}
},
"thresholds": {
"http_req_duration": ["p(95)<1000"],
"http_req_failed": ["rate<0.01"],
"walkguide_error_rate": ["rate<0.01"],
"walkguide_sos_latency_ms": ["p(95)<500"]
},
"summaryTrendStats": ["min", "med", "avg", "p(90)", "p(95)", "p(99)", "max"],
"summary_export": "k6-results/smoke-test-summary.json"
}
@@ -0,0 +1,26 @@
{
"_comment": "WalkGuide Spike Test — 0 → 200 VUs sudden spike. Simulasi viral event / banyak user pakai serentak.",
"scenarios": {
"spike": {
"executor": "ramping-vus",
"startVUs": 0,
"stages": [
{ "duration": "10s", "target": 5 },
{ "duration": "1s", "target": 200 },
{ "duration": "2m", "target": 200 },
{ "duration": "10s", "target": 5 },
{ "duration": "3m", "target": 5 },
{ "duration": "10s", "target": 0 }
],
"gracefulRampDown": "30s"
}
},
"thresholds": {
"http_req_duration": ["p(95)<3000"],
"http_req_failed": ["rate<0.10"],
"walkguide_error_rate": ["rate<0.10"],
"walkguide_sos_latency_ms": ["p(95)<1000"]
},
"summaryTrendStats": ["min", "med", "avg", "p(90)", "p(95)", "p(99)", "max"],
"summary_export": "k6-results/spike-test-summary.json"
}
@@ -0,0 +1,26 @@
{
"_comment": "WalkGuide Stress Test — 100 VUs, 10 minutes. Find breaking points.",
"scenarios": {
"stress_all": {
"executor": "ramping-vus",
"startVUs": 0,
"stages": [
{ "duration": "1m", "target": 25 },
{ "duration": "2m", "target": 50 },
{ "duration": "2m", "target": 75 },
{ "duration": "2m", "target": 100 },
{ "duration": "2m", "target": 100 },
{ "duration": "1m", "target": 0 }
],
"gracefulRampDown": "30s"
}
},
"thresholds": {
"http_req_duration": ["p(95)<1500", "p(99)<3000"],
"http_req_failed": ["rate<0.05"],
"walkguide_error_rate": ["rate<0.05"],
"walkguide_sos_latency_ms": ["p(95)<500"]
},
"summaryTrendStats": ["min", "med", "avg", "p(90)", "p(95)", "p(99)", "max"],
"summary_export": "k6-results/stress-test-summary.json"
}