Performans Mühendisliği & Test Otomasyonu 4 dk okuma 12 okunma

Load Testing: k6 ve JMeter ile Performans Testleri

Load testing, bir sistemin beklenen yük altındaki davranışını ölçmek için kullanılır. k6, JavaScript tabanlı, geliştirici dostu ve CI/CD'ye uygun modern bir araçtır; JMeter ise olgun, GUI destekli ve protokol zengini kurumsal standarttır. Bu yazıda, iki aracın temel yaklaşımları, betik yazımı, eşik (threshold) tanımlama ve .NET API'lerde kullanım stratejileri ele alınır.

Load Testing: k6 ve JMeter ile Performans Testleri

Load Testing: k6 ve JMeter ile Performans Testleri

Bir sistemin "çalışıyor" olması, "yük altında çalışıyor" anlamına gelmez. Load testing (yük testi), bir uygulamanın beklenen kullanıcı yükü altında nasıl davrandığını ölçmenin bilimsel yoludur. Bu alanda iki araç öne çıkar: k6 ve Apache JMeter. Her ikisi de açık kaynaklıdır, ancak felsefeleri ve kullanım alanları farklıdır.


1. k6: Geliştirici Dostu, Kod Tabanlı Yük Testi

k6, Grafana Labs tarafından geliştirilen, JavaScript ile betik yazılan modern bir yük testi aracıdır. CI/CD pipeline'larına entegre edilmek üzere tasarlanmıştır.

Temel Kavramlar:

  • VU (Virtual User): Eşzamanlı kullanıcıları simüle eder. Her VU, betiği bağımsız olarak çalıştırır .

  • Iteration: Bir VU'nun betiği bir kez tamamlamasıdır.

  • Check: Yanıtın doğruluğunu doğrular; başarısız olsa bile test durmaz, sadece hata oranı kaydedilir .

  • Threshold: Testin geçme/kalma kriteridir. Örneğin, p95 yanıt süresinin 500ms altında olması .

Örnek k6 Betiği:

javascript

import http from 'k6/http';
import { check, sleep } from 'k6';

export const options = {
  vus: 10,
  duration: '30s',
  thresholds: {
    http_req_failed: ['rate<0.01'],      // Hata oranı %1'den az
    http_req_duration: ['p(95)<500'],    // p95 500ms altında
  },
};

export default function () {
  const res = http.get('https://api.example.com/health');
  check(res, {
    'status 200': (r) => r.status === 200,
    'süre < 200ms': (r) => r.timings.duration < 200,
  });
  sleep(1);
}

k6'nın Güçlü Yönleri:

  • Geliştirici Dostu: JavaScript bilen herkes hızla betik yazabilir.

  • CI/CD Uyumlu: Threshold'lar sayesinde test, performans hedefi karşılanmazsa başarısız (non-zero exit) döner; pipeline durur .

  • Kaynak Verimliliği: 2025 tarihli bir akademik çalışma, CI/CD pipeline'larında k6'nın tüm senaryolarda en yüksek kaynak verimliliğini gösterdiğini ortaya koymuştur .

  • .NET Entegrasyonu: .NET Aspire için k6 entegrasyon paketleri mevcuttur .


2. JMeter: Olgun, GUI Destekli Kurumsal Standart

Apache JMeter, uzun yıllardır sektörde olan, Java tabanlı bir yük testi aracıdır. GUI üzerinden test planları oluşturulabilir veya betikler yazılabilir.

Temel Kavramlar:

  • Test Plan: Tüm test yapılandırmasını içeren kök öğe.

  • Thread Group: Sanal kullanıcı sayısını, rampa süresini ve döngü sayısını tanımlar.

  • Sampler: Gerçekleştirilecek istek (HTTP, JDBC, FTP vb.).

  • Listener: Sonuçları görselleştiren bileşenler (Summary Report, View Results Tree).

JMeter'ın Güçlü Yönleri:

  • Protokol Zenginliği: HTTP dışında JDBC, FTP, JMS, SOAP gibi birçok protokolü destekler.

  • GUI ile Kolay Kurulum: Kod yazmadan test planı oluşturulabilir.

  • Recording: Tarayıcı trafiğini kaydederek betik oluşturma imkanı .

  • .NET Entegrasyonu: JMeter CodeGen Visual Studio eklentisi ile ASP.NET Core Web API projelerinden Swagger/OpenAPI üzerinden otomatik JMeter test planı üretilebilir .

JMeter'ın Zayıf Yönleri:

  • Kaynak Tüketimi: GUI ve Java tabanlı yapısı nedeniyle k6'ya göre daha fazla kaynak tüketir.

  • CI/CD Uyumluluğu: Threshold tabanlı otomatik başarısızlık mekanizması k6 kadar doğal değildir; ek eklentiler gerekebilir.


3. k6 vs. JMeter: Hangi Senaryoda Hangisi?

2025-2026 akademik çalışmaları, araç seçiminin iş yükü karakteristiğine bağlı olduğunu göstermektedir.

Kriter k6 JMeter
Yaklaşım Kod (JavaScript) GUI + Kod
Kaynak Verimliliği Yüksek Orta
CI/CD Entegrasyonu Doğal (threshold'lar) Ek yapılandırma gerekir
Protokol Desteği HTTP/WebSocket/gRPC HTTP, JDBC, FTP, JMS, SOAP
Yazma Yoğun İş Yükleri Daha yüksek istek üretimi —
Okuma Yoğun İş Yükleri — Daha güçlü
Öğrenme Eğrisi JavaScript bilenler için kolay GUI sayesinde kod bilmeyenler için kolay

Pratik Öneri:

  • CI/CD'de otomatik performans kapısı kuruyorsanız → k6.

  • Karmaşık protokollü (JDBC, JMS) kurumsal senaryolar → JMeter.

  • .NET API'leriniz varsa → JMeter CodeGen ile hızlı başlangıç , ardından k6'ya geçiş değerlendirilebilir.


4. .NET API'lerde Load Testing Stratejisi

k6 ile .NET API Testi:
NDC Oslo 2026'da düzenlenen bir atölye, .NET Core Web API'lerin k6 ile yük testine tabi tutulmasını ve Polly/Simmy ile dayanıklılık stratejilerinin doğrulanmasını ele almaktadır . Bu yaklaşım, sadece performansı değil, aynı zamanda hata durumlarındaki davranışı da test eder.

JMeter CodeGen ile Hızlı Başlangıç:
Visual Studio'da ASP.NET Core projenize sağ tıklayıp Tools > Generate JMeter Test Plan seçerek, Swagger/OpenAPI tanımından otomatik bir JMeter test planı oluşturabilirsiniz. Bu, sıfırdan betik yazma yükünü ortadan kaldırır .


5. En İyi Pratikler

Pratik Açıklama
Gerçekçi Düşünme Süresi (Think Time) Kullanın Kullanıcılar istekler arasında bekler; sabit değil, aktiviteye göre değişken süreler tanımlayın .
Threshold Tanımlayın k6'da p(95)<500 gibi eşiklerle testin otomatik başarısız olmasını sağlayın .
Rampa (Ramp-up) Kullanın Ani yük yerine kademeli artışla sistemin davranışını gözlemleyin.
CI/CD'ye Entegre Edin Performans regresyonlarını merge öncesi yakalayın.

Sonuç

Load testing, bir sistemin gerçek dünyaya hazır olup olmadığını gösteren tek ölçümdür. k6, JavaScript tabanlı yapısı, threshold mekanizması ve CI/CD uyumuyla modern geliştirici ekipleri için idealdir. JMeter ise protokol zenginliği ve GUI desteğiyle kurumsal senaryolarda hala güçlüdür. .NET ekosisteminde her iki araç da kullanılabilir; JMeter CodeGen ile hızlı başlangıç yapılabilir, k6 ile otomatik performans kapıları kurulabilir. Unutmayın: Yük testi, bir kez yapılıp unutulan bir aktivite değil; her sürümde tekrarlanan bir disiplindir.

Tüm yazılar Soru ya da yorumun mu var? Yaz