Modern Yük Testi Aracı k6 Nedir? Nasıl Kurulur?
Modern Yük Testi Aracı k6 Nedir?
Yazılım dünyasında bir uygulamanın sadece "çalışıyor" olması yeterli değildir; aynı zamanda beklenen trafik altında "yıkılmadan" çalışmaya devam etmesi gerekir. İşte bu noktada devreye yük testleri (load testing) girer. Geleneksel ve hantal test araçlarının aksine, modern DevOps süreçlerine ve geliştirici deneyimine odaklanan k6, son dönemin en popüler araçlarından biri haline gelmiştir.
Bu rehberde k6’nın ne olduğunu, nasıl çalıştığını ve ücretsiz açık kaynak versiyonuyla nasıl profesyonel test senaryoları yazılabileceğini inceleyeceğiz.
k6 Nedir ve Kim Tarafından Geliştirilmiştir?
k6, geliştirici odaklı, açık kaynaklı (open-source) ve modern bir yük testi aracıdır. Başlangıçta Load Impact tarafından geliştirilen proje, 2021 yılında Grafana Labs tarafından satın alınmıştır. Şu anda Grafana ekosisteminin (Prometheus, Grafana vb.) güçlü bir parçası olarak geliştirilmeye devam etmektedir.
k6’nın temel felsefesi "Performance as Code" (Kod Olarak Performans) yaklaşımıdır. Yani test senaryolarınızı karmaşık arayüzlerde (UI) tıklayarak değil, kod yazarak oluşturursunuz.
Teknik Altyapı
- Senaryo Dili: Test senaryoları JavaScript (ES6) ile yazılır. Bu sayede geliştiriciler yeni bir dil öğrenmek zorunda kalmadan test yazabilirler.
- Motor (Engine): Arka planda Go dili ile çalışır. Bu mimari, k6'nın çok düşük sistem kaynağı tüketerek tek bir bilgisayardan binlerce sanal kullanıcıyı (Virtual Users - VUs) simüle etmesini sağlar.
k6 Ücretli mi?
k6'nın iki farklı kullanım modeli bulunmaktadır, ancak bireysel geliştiriciler ve çoğu şirket için ücretsiz versiyon fazlasıyla yeterlidir.
- k6 Open Source (Ücretsiz): Tamamen ücretsizdir. Komut satırı (CLI) üzerinden kendi bilgisayarınızda, sunucunuzda veya CI/CD boru hatlarınızda (Pipeline) çalıştırırsınız. Test süresi veya sanal kullanıcı sayısı gibi kısıtlamalar, tamamen sizin donanım gücünüze bağlıdır. Bu rehberde anlatılan tüm özellikler bu ücretsiz versiyona aittir.
- k6 Cloud (Ücretli): Grafana Labs'ın sunduğu yönetilen (managed) bulut hizmetidir. Test altyapısını kurmakla uğraşmak istemeyen veya çok büyük ölçekli, dağıtık coğrafi testler yapmak isteyen kurumsal firmalar için bir seçenektir.
Neden JMeter Yerine k6?
Yılların eskitemediği JMeter güçlü bir araç olsa da, k6 modern ihtiyaçlara daha iyi cevap verir:
- Daha Hafif: Kurulumu ve çalıştırması saniyeler sürer.
- Sürüm Kontrolü: Testler kod olduğu için (JS dosyası), Git üzerinde versiyonlanabilir ve ekip içinde kolayca paylaşılabilir.
- CI/CD Uyumu: Jenkins, GitLab CI, GitHub Actions gibi otomasyon süreçlerine entegre edilmesi çok daha kolaydır.
k6 Nasıl Kurulur?
k6 tek bir çalıştırılabilir dosya (binary) olduğu için kurulumu oldukça basittir ve karmaşık bağımlılıklar gerektirmez.
Windows Kurulumu
Windows kullanıcıları için en pratik yol, Microsoft'un paket yöneticisi olan Winget'i kullanmaktır. PowerShell veya Komut İstemi'ni (CMD) açıp şu komutu yazmanız yeterlidir:
winget install k6
Eğer komut satırı ile uğraşmak istemezseniz, buraya tıklayarak resmi MSI kurulum dosyasını indirebilir ve klasik kurulum sihirbazı ile yükleyebilirsiniz.
macOS Kurulumu
Mac kullanıcıları için en standart yöntem Homebrew kullanmaktır. Terminal ekranını açın ve aşağıdaki komutu çalıştırın:
brew install k6
Kurulum Kontrolü
Kurulumun başarılı olup olmadığını doğrulamak için terminale/konsola şu komutu yazın. Eğer versiyon numarasını görüyorsanız k6 kullanıma hazırdır:
k6 version
Adım Adım Örnek Senaryolar
k6 ile test yazarken genellikle üç ana senaryo tipi kullanılır. Aşağıdaki kodları .js uzantılı bir dosya olarak kaydedip terminalden k6 run dosyaadi.js komutuyla çalıştırabilirsiniz.
1. Smoke Test (Duman Testi)
Sistemin temel fonksiyonlarının çalışıp çalışmadığını, minimum yük altında kontrol etmek için kullanılır. Amaç sistemi zorlamak değil, "ayakta mı" sorusuna cevap bulmaktır.
import http from 'k6/http';
import { check, sleep } from 'k6';
export const options = {
vus: 1, // Sadece 1 sanal kullanıcı
duration: '10s', // 10 saniye boyunca çalış
};
export default function () {
const res = http.get('https://test-api.k6.io/public/crocodiles/');
// Cevabın 200 (OK) dönüp dönmediğini doğrula
check(res, { 'status was 200': (r) => r.status == 200 });
sleep(1); // Her istek arasında 1 saniye bekle
}
2. Load Test (Yük Testi)
Sistemin beklenen trafik altındaki performansını ölçmek için kullanılır. Burada "Stages" (Aşamalar) devreye girer. Kullanıcı sayısı yavaşça artırılır, belirli bir süre sabit tutulur ve sonra düşürülür.
import http from 'k6/http';
import { check, sleep } from 'k6';
export const options = {
stages: [
{ duration: '30s', target: 20 }, // 30 saniyede 20 kullanıcıya çık (Ramp-up)
{ duration: '1m', target: 20 }, // 1 dakika boyunca 20 kullanıcıda kal (Stabil Yük)
{ duration: '10s', target: 0 }, // 10 saniyede 0 kullanıcıya düş (Ramp-down)
],
};
export default function () {
const res = http.get('https://test-api.k6.io/public/crocodiles/');
check(res, { 'status was 200': (r) => r.status == 200 });
sleep(1);
}
3. Stress Test (Stres Testi)
Sistemin sınırlarını ve kırılma noktasını belirlemek için yapılır. Trafik, normalin çok üzerine çıkarılır. Altyapının aşırı yük altında nasıl davrandığı (örneğin; sunucunun ne zaman hata vermeye başladığı veya ne zaman yeniden başladığı) gözlemlenir.
import http from 'k6/http';
import { sleep } from 'k6';
export const options = {
stages: [
{ duration: '2m', target: 100 }, // Hızlıca 100 kullanıcıya çık
{ duration: '5m', target: 100 }, // 5 dakika boyunca sistemi zorla
{ duration: '2m', target: 200 }, // Daha da zorla: 200 kullanıcı
{ duration: '5m', target: 200 }, // 200 kullanıcıda bekle
{ duration: '2m', target: 0 }, // Testi bitir
],
};
export default function () {
http.get('https://test-api.k6.io/public/crocodiles/');
sleep(1);
}
Sonuç
k6, performans testlerini karmaşık bir "angarya" olmaktan çıkarıp, yazılım geliştirme sürecinin keyifli ve entegre bir parçası haline getirir. Özellikle ücretsiz açık kaynak versiyonu, sunduğu esneklik ve performans ile hem bireysel geliştiriciler hem de büyük ekipler için mükemmel bir çözümdür.
Uygulamalarınızın kullanıcılar altında nasıl davranacağını görmek için canlıya çıkmayı beklemeyin; k6 ile testlerinizi erkenden yapın.
Resmi Dokümantasyon
Bu rehberde k6'nın temellerine ve en sık kullanılan senaryolara değindik. Ancak k6'nın yetenekleri bunlarla sınırlı değil. Daha karmaşık senaryolar, gelişmiş modüller ve detaylı API referansları için her zaman güncel olan resmi kaynağa başvurabilirsiniz: