Menjalankan load test dengan aman: DDoS-aware testing, rate limiting validation, safe load testing practices, testing di environment production tanpa mempengaruhi user, dan mengamankan credentials dalam test scripts.

Setelah di episode 18 kita memahami network & latency testing, kini saatnya membahas aspek yang krusial tetapi sering diabaikan: keamanan dalam load testing. Load test yang tidak hati-hati bisa mempengaruhi production user, memicu rate limiting, atau bahkan memicu DDoS protection yang memblokir traffic legitimate. Load test yang tidak aman bisa juga membocorkan credentials atau data sensitif.
Security dalam load testing bukan hanya soal melindungi sistem — tetapi juga melindungi data test, credentials, dan memastikan test tidak menyebabkan kerusakan yang tidak direncanakan.
# Jalankan test ke staging environment
k6 run --env BASE_URL=https://staging.example.com script.js
# Jangan pernah test langsung ke production tanpa koordinasiSebelum load test, pastikan:
Banyak platform punya DDoS protection yang otomatis memblokir traffic yang terlihat seperti serangan. Load test bisa memicu proteksi ini jika tidak dikonfigurasi dengan benar.
| Load Test | DDoS |
|---|---|
| Traffic dari IP range yang diketahui | Traffic dari banyak IP acak |
| User agents yang realistis | User agents aneh atau kosong |
| Request patterns yang realistis | Request patterns repetitif |
| Koordinasi dengan tim security | Tanpa pemberitahuan |
# Tandai load test traffic dengan custom header
k6 run --header "X-Load-Test: true" script.js
# Atau gunakan IP range yang di-whitelist
k6 run --out cloud script.js # k6 Cloud menggunakan IP yang bisa di-whitelistRate limiting membatasi jumlah request yang diterima dari satu client dalam periode waktu tertentu. Rate limiting melindungi dari abuse dan DDoS — tetapi juga bisa mempengaruhi user yang sangat aktif.
// k6: test rate limiting behavior
export const options = {
vus: 10,
duration: '2m',
};
export default function () {
const res = http.get('https://api.example.com/search?q=test');
check(res, {
'status 200 or 429': (r) => r.status === 200 || r.status === 429,
'rate limit response has Retry-After': (r) => {
if (r.status === 429) {
return r.headers['Retry-After'] !== undefined;
}
return true;
},
});
}// Perhatikan rate limit headers
export default function () {
const res = http.get('https://api.example.com/api');
const remaining = parseInt(res.headers['X-RateLimit-Remaining'] || '100');
const limit = parseInt(res.headers['X-RateLimit-Limit'] || '1000');
check(res, {
'has rate limit headers': () => remaining >= 0 && limit > 0,
});
}Test scripts sering berisi credentials untuk authentication. Pastikan credentials tidak pernah di-commit ke version control.
# Gunakan environment variables
k6 run --env USERNAME=testuser --env PASSWORD=testpass script.js
# Atau gunakan .env file (jangan commit)
echo "USERNAME=testuser" > .env
echo "PASSWORD=testpass" >> .env
echo ".env" >> .gitignoreimport http from 'k6/http';
const BASE_URL = __ENV.BASE_URL || 'https://staging.example.com';
const API_KEY = __ENV.API_KEY;
export default function () {
const res = http.get(`${BASE_URL}/api/data`, {
headers: { 'Authorization': `Bearer ${API_KEY}` },
});
}Untuk CI/CD, gunakan secrets management:
# GitHub Actions secrets
- name: Run load test
env:
API_KEY: ${{ secrets.PERF_TEST_API_KEY }}
run: k6 run script.jsJika menggunakan data dari production untuk testing, pastikan data sudah dianonimkan:
# Anonymize PII data
import faker
fake = faker.Faker()
def anonymize_user(user):
return {
'id': user['id'],
'name': fake.name(),
'email': fake.email(),
'phone': fake.phone_number(),
}Beberapa regulasi (GDPR, HIPAA) membatasi penggunaan data production untuk testing. Pastikan kalian memahami compliance requirements sebelum menggunakan data production.
Jika load test traffic mencapai production, tanda-tandanya:
Di episode 19 ini kalian telah memahami security in load tests:
Di episode 20 selanjutnya, kita akan membahas Performance & Compliance SLO — bagaimana menghubungkan performa dengan Service Level Objectives, error budgets, dan reporting untuk stakeholder. Siapkan SLO document kalian!