YTM Dersleri: Bölüm 12
Uygulamalı JMeter: Thread Group, Sampler, Listener ve Deney Sonuçları
Bir önceki bölümde performans ve yük testi kavramlarını gördük; bu sayfada Apache JMeter ile bunu uygulamaya döküyoruz. Bir test planının üç temel yapı taşını (Thread Group, Sampler, Listener) ve örnek bir deneyin sonuçlarının nasıl okunup yorumlanacağını adım adım ele alıyoruz.
Bu Sayfada
i Uygulamalı JMeter’e Giriş
Apache JMeter, Java tabanlı, açık kaynaklı ve en yaygın kullanılan performans/yük test araçlarından biridir. Bir JMeter test planı, hiyerarşik bir ağaç yapısında üç temel bileşenden oluşur:
- Test Plan
- Thread Group
- HTTP Request – Giriş Yap
- HTTP Request – Ürün Listesi
- HTTP Request – Sepete Ekle
- Listeners
- View Results Tree
- Summary Report
- Aggregate Report
- Thread Group
Thread Group “kaç kullanıcı, ne kadar sürede, kaç kez” sorusunu yanıtlar; Sampler‘lar gerçek istekleri (HTTP, JDBC, FTP vb.) temsil eder; Listener‘lar ise bu isteklerin sonuçlarını toplayıp görselleştirir. Şimdi her birini detaylı inceleyelim.
1 Thread Group Yapılandırması
Thread Group, bir JMeter test planının başlangıç noktasıdır ve sanal kullanıcıları (thread’leri) temsil eder. Üç temel parametresi vardır:
| Parametre | Anlamı |
|---|---|
| Number of Threads (Users) | Simüle edilecek eş zamanlı sanal kullanıcı sayısı |
| Ramp-up Period | Tüm kullanıcıların kademeli olarak devreye girmesi için geçecek süre (saniye). 100 kullanıcı, 60 saniyede devreye girerse saniyede ortalama ~1.6 yeni kullanıcı başlar. |
| Loop Count | Her sanal kullanıcının test senaryosunu kaç kez tekrarlayacağı |
| Scheduler (opsiyonel) | Testin belirli bir başlangıç/bitiş zamanında veya süre boyunca (duration) koşmasını sağlar |
2 Sampler Türleri
Sampler, JMeter’da gerçek bir isteği temsil eden bileşendir. Thread Group içindeki her sampler, tanımlanan thread ve loop sayısı kadar çalıştırılır.
HTTP Request
En sık kullanılan sampler; web sitelerine ve REST API’lere istek göndermek için kullanılır.
JDBC Request
Doğrudan veritabanına SQL sorgusu göndermek ve performansını ölçmek için kullanılır.
FTP Request
Dosya sunucularına yükleme/indirme işlemlerinin performansını test etmek için kullanılır.
SOAP/XML-RPC Request
SOAP tabanlı web servislerine istek göndermek için kullanılır.
Örnek HTTP Request Sampler Yapılandırması
# Sampler: "HTTP Request - Sepete Ekle"
Protocol : https
Server Name : api.ornek-magaza.com
Method : POST
Path : /v2/sepet/ekle
Body Data : {"urunId": "URN-4521", "adet": 1}
Headers : Content-Type: application/json
Authorization: Bearer ${authToken}
${degisken} sözdizimi,
Postman’deki {{degisken}} yapısına karşılık gelir. Bir CSV Data Set
Config bileşeniyle her sanal kullanıcıya farklı test verisi (kullanıcı adı,
ürün ID) atanabilir — bu, gerçekçi ve tekrar etmeyen bir yük senaryosu oluşturur.
3 Listener’lar ile Sonuç İzleme
Listener, sampler’lardan gelen sonuçları toplayan ve görselleştiren bileşendir. Farklı listener’lar, farklı analiz ihtiyaçlarına hizmet eder.
View Results Tree
Her isteğin ham request/response içeriğini gösterir. Hata ayıklama (debug) için idealdir, yüksek yükte kapatılmalıdır.
Summary Report
Her sampler için toplam istek, ortalama süre, hata oranı gibi özet istatistikleri satır satır gösterir.
Aggregate Report
Summary Report’a ek olarak medyan, 90/95/99. persentil değerlerini de gösterir — performans raporlarının temelidir.
Graph Results
Sonuçları zaman içinde bir çizgi grafik üzerinde görselleştirir; eğilimleri gözle takip etmeyi sağlar.
4 Örnek Deney ve Sonuç Analizi
Yukarıdaki yapılandırmayla (100 kullanıcı, 60 saniye ramp-up, 10 döngü) kurgulanan bir “Sepetim Akışı” test planının Aggregate Report çıktısı örnek olarak aşağıdaki gibi olabilir:
| Label | # Samples | Average (ms) | Median (ms) | 90% Line | Error % | Throughput |
|---|---|---|---|---|---|---|
| Giriş Yap | 1.000 | 210 | 180 | 320 | 0.0% | 48.2/sn |
| Ürün Listesi | 1.000 | 340 | 290 | 510 | 0.2% | 45.7/sn |
| Sepete Ekle | 1.000 | 890 | 620 | 1.850 | 3.4% | 31.4/sn |
| TOPLAM | 3.000 | 480 | 380 | 920 | 1.2% | 41.7/sn |
Zaman İçinde Yanıt Süresi Eğilimi (Örnek)
Yatay eksen: zaman (dakika) · Dikey eksen: göreli yanıt süresi · Kırmızı çubuklar: eşiği aşan gecikme noktaları
Sonuçların Yorumlanması
- ✓ “Giriş Yap” ve “Ürün Listesi” istekleri kabul edilebilir sınırlar içinde (ortalama < 500ms, hata oranı ~0%).
- ✓ “Sepete Ekle” isteğinin ortalaması (890ms) ve 90. persentili (1.850ms) diğer isteklere göre belirgin şekilde yüksek — bu bir darboğaz (bottleneck) işaretidir.
- ✓ “Sepete Ekle” için %3.4 hata oranı, kabul edilebilir eşiğin (genellikle %1’in altı) üzerinde — bu bulgu bir hata kaydı (defect) olarak raporlanmalıdır.
- ✓ Grafikteki ani sıçrama (7-9. dakikalar), muhtemelen artan eş zamanlı kullanıcı sayısının veritabanı bağlantı havuzunu (connection pool) zorladığını gösteriyor olabilir — geliştirme ekibiyle birlikte kök neden analizi yapılmalıdır.
✓ Sonuç ve Öneriler
JMeter ile etkili bir performans testi kurmak, üç temel bileşeni doğru anlamaktan geçer: Thread Group ile gerçekçi bir kullanıcı yükü paterni tanımlamak, doğru Sampler türüyle gerçek istekleri simüle etmek ve uygun Listener‘larla sonuçları hem hata ayıklama hem raporlama amacıyla doğru şekilde toplamak.
Ancak asıl değer, ham sayılarda değil yorumlamada gizlidir: yukarıdaki örnekte olduğu gibi, ortalamanın yanı sıra persentil değerlerine ve hata oranlarına bakmak, gözden kaçabilecek darboğazları ortaya çıkarır.
