Performans testi, bir yazılım sisteminin belirli iş yükleri altında ne kadar hızlı, kararlı ve ölçeklenebilir çalıştığını ölçen test yaklaşımıdır. Yanıt süresi, işlem kapasitesi, hata oranı ve kaynak kullanımı gibi metrikler izlenerek sistemin darboğazları ve kapasite sınırları belirlenir.
Performans testi yalnızca “uygulama hızlı mı?” sorusuna cevap vermez. Sistem beklenen kullanıcı sayısını karşılayabiliyor mu, ani trafik artışından sonra toparlanabiliyor mu, uzun süreli yük altında kaynak sızıntısı oluşuyor mu ve performans hedefleri karşılanıyor mu gibi soruları da değerlendirir.
Performans Testi Nedir?
Performans testi, bir uygulamanın beklenen ve olağan dışı yükler altındaki hızını, kararlılığını, kaynak kullanımını ve ölçeklenebilirliğini ölçen fonksiyonel olmayan test türüdür. Web uygulamaları, mobil uygulamaların API’leri, mikroservisler, veritabanları ve dağıtık sistemler performans testine tabi tutulabilir.
Performans testi ile yük testi aynı kavram değildir. Yük testi, performans testinin alt türlerinden biridir ve sistemin beklenen kullanıcı veya işlem yükü altındaki davranışını ölçer. Performans testi ise stres, spike, dayanıklılık, hacim ve ölçeklenebilirlik testlerini de kapsayan daha geniş bir alandır.
Performans Testi Neden Önemlidir?
- Yavaş çalışan servis ve sorguları ortaya çıkarır.
- Sistemin karşılayabileceği kullanıcı ve işlem kapasitesini ölçer.
- CPU, bellek, disk, ağ veya veritabanı darboğazlarını belirler.
- Yüksek trafik öncesinde kapasite planlamasına veri sağlar.
- Hata oranı ve yanıt süresinin yükle birlikte nasıl değiştiğini gösterir.
- Ölçeklendirme mekanizmalarının doğru çalışıp çalışmadığını ölçer.
- Üretim ortamındaki kesinti ve müşteri kaybı riskini azaltmaya yardımcı olur.
Performans sonucu tek başına yazılım kalitesini göstermez. Güvenlik, kullanılabilirlik, doğruluk ve bakım yapılabilirlik gibi diğer kalite alanları da birlikte değerlendirilmelidir. Bu ilişkiyi yazılım kalite metrikleri rehberinde inceleyebilirsiniz.
Performans Testi Türleri Nelerdir?
Yük testi
Sistemin beklenen kullanıcı veya işlem yükü altındaki davranışını ölçer. Amaç sistemin normal ve yoğun çalışma koşullarında belirlenen performans hedeflerini karşılayıp karşılamadığını görmektir.
Stres testi
Sistem beklenen kapasitenin ötesine taşınarak sınırları belirlenir. Sistemin hangi noktada bozulduğu ve yük azaltıldıktan sonra toparlanıp toparlanmadığı incelenir.
Spike testi
Kısa sürede gerçekleşen ani trafik artışı ve düşüşü simüle edilir. Kampanya, bilet satışı veya önemli bir duyuru sonrasında oluşabilecek ani yükleri değerlendirmek için kullanılabilir.
Dayanıklılık testi
Sistem uzun süre boyunca belirli yük altında çalıştırılır. Bellek sızıntısı, bağlantı havuzu tükenmesi, kayıt dosyalarının büyümesi ve zamanla oluşan performans kaybı araştırılır.
Hacim testi
Sistem büyük veri kümeleriyle çalıştırılır. Veritabanındaki kayıt sayısı büyüdükçe sorgu, raporlama, veri aktarımı ve depolama işlemlerinin nasıl etkilendiği ölçülür.
Ölçeklenebilirlik testi
Kaynak veya uygulama örneği sayısı artırıldığında sistem kapasitesinin ne ölçüde yükseldiği incelenir. Yalnızca kaynak eklemek, uygulamanın aynı oranda hızlanacağını garanti etmez.
Performans Testinde Hangi Metrikler Ölçülür?
| Metrik | Açıklama |
|---|---|
| Yanıt süresi | İsteğin gönderilmesi ile yanıtın alınması arasında geçen süre |
| Yüzdelik değerler | p95 veya p99 gibi kullanıcıların büyük bölümünün deneyimlediği süre |
| Throughput | Belirli sürede tamamlanan istek veya işlem sayısı |
| Hata oranı | Başarısız, zaman aşımına uğrayan veya hatalı dönen isteklerin oranı |
| Eşzamanlı kullanıcı | Aynı zaman aralığında sistemi kullanan sanal kullanıcı sayısı |
| CPU kullanımı | Sunucuların işlemci kullanım seviyesi |
| Bellek kullanımı | Uygulamanın ve servislerin tükettiği bellek |
| Veritabanı metrikleri | Sorgu süresi, bağlantı sayısı, kilit ve bekleme durumları |
Yalnızca ortalama yanıt süresine bakmak yanıltıcı olabilir. Ortalama değer uygun görünürken kullanıcıların küçük ama önemli bir bölümü çok yavaş yanıt alabilir. Bu nedenle p95 ve p99 gibi yüzdelik değerler de izlenmelidir.
Performans Testi Nasıl Yapılır?
- Hedefleri belirleyin: Kullanıcı sayısı, işlem hacmi, yanıt süresi ve hata oranı hedeflerini tanımlayın.
- Kritik senaryoları seçin: Giriş, arama, ödeme, sipariş veya API çağrısı gibi iş açısından önemli akışları belirleyin.
- Yük modelini oluşturun: Eşzamanlı kullanıcı, istek sıklığı, düşünme süresi ve trafik dağılımını gerçek kullanıma göre planlayın.
- Test ortamını hazırlayın: Üretime yeterince benzeyen altyapı, veri, ağ ve yapılandırma kullanın.
- Test verisini oluşturun: Kullanıcı hesapları, ürünler ve diğer kayıtları tekrar kullanılabilir biçimde hazırlayın.
- İzleme sistemini kurun: Uygulama, altyapı ve veritabanı metriklerini birlikte izleyin.
- Temel ölçüm alın: Değişikliklerden önce karşılaştırma yapılabilecek bir başlangıç sonucu oluşturun.
- Testi çalıştırın: Yükü bir anda vermek yerine senaryoya uygun biçimde kademeli artırın.
- Darboğazı analiz edin: Yavaşlığın uygulama, ağ, veritabanı veya dış servisten kaynaklanıp kaynaklanmadığını belirleyin.
- İyileştirip tekrar test edin: Her değişiklikten sonra aynı koşullarda yeniden ölçüm yapın.
Performans Testi Araçları Nelerdir?
- Apache JMeter: Web, HTTP ve API yük testlerinde yaygın kullanılan açık kaynaklı araçtır.
- k6: Testlerin kod olarak yazılmasını ve CI/CD süreçlerine eklenmesini destekleyen modern araçtır.
- Gatling: Kod tabanlı senaryolar ve yüksek yük üretimi için kullanılabilir.
- LoadRunner: Farklı protokoller ve kurumsal test gereksinimleri için kullanılan ticari çözümdür.
- Locust: Python ile kullanıcı davranışı tanımlamaya imkân veren açık kaynaklı araçtır.
Araç seçimi; desteklenen protokol, ekip yetkinliği, lisans bütçesi, yük üretme kapasitesi, raporlama ve CI/CD entegrasyonuna göre yapılmalıdır. Araç tek başına doğru test modeli veya güvenilir sonuç oluşturmaz.
E-Ticaret Performans Testi Örneği
Bir kampanya sırasında 3.000 eşzamanlı kullanıcının beklendiği e-ticaret uygulamasını düşünelim. Test kapsamında kullanıcıların yüzde 50’si ürün listeleme, yüzde 30’u arama, yüzde 15’i sepet ve yüzde 5’i ödeme akışını çalıştırabilir.
Başarı kriterleri şöyle tanımlanabilir:
- Ürün listeleme p95 yanıt süresi 1,5 saniyenin altında olmalı.
- Sepete ekleme p95 yanıt süresi 2 saniyeyi geçmemeli.
- Hata oranı yüzde 1’in altında kalmalı.
- Ödeme işleminde veri kaybı veya çift kayıt oluşmamalı.
- CPU ve bellek kullanımı belirlenen güvenli sınırları aşmamalı.
- Yük düştükten sonra sistem normal çalışma seviyesine dönmeli.
Test sırasında yalnızca yük aracının raporu değil; uygulama izleme sistemi, loglar, veritabanı sorguları ve altyapı metrikleri birlikte incelenmelidir.
Performans Testi CI/CD Sürecine Nasıl Eklenir?
Her kod değişikliğinde tam ölçekli yük testi çalıştırmak maliyetli olabilir. Bunun yerine küçük performans kontrolleri sık, kapsamlı yük ve dayanıklılık testleri ise belirli sürüm veya zamanlarda çalıştırılabilir.
- API seviyesinde hızlı performans kontrolleri pull request sonrasında çalıştırılabilir.
- Yanıt süresi veya hata oranı eşiği aşılırsa pipeline durdurulabilir.
- Gece veya haftalık planla daha büyük yük testleri uygulanabilir.
- Kritik sürüm öncesinde üretime benzer ortamda kapsamlı test yapılabilir.
- Sonuçlar önceki sürümle karşılaştırılarak performans gerilemesi tespit edilebilir.
Sürekli test, otomatik dağıtım ve izleme süreçleri için DevOps ve CI/CD eğitimlerini inceleyebilirsiniz.
Performans Testinde Yapılan Hatalar
- Performans hedeflerini testten sonra belirlemek
- Gerçek kullanıcı davranışına uymayan yük modeli oluşturmak
- Üretimden tamamen farklı ortamda elde edilen sonucu doğrudan kabul etmek
- Yalnızca ortalama yanıt süresini incelemek
- Uygulama ve veritabanı metriklerini izlememek
- Test verisinin önbellek nedeniyle gerçek dışı sonuç oluşturması
- Harici servislerin test koşullarını hesaba katmamak
- Yük üreten sistemin kapasitesini kontrol etmemek
- Bir değişiklikten sonra aynı testi yeniden çalıştırmamak
- İzin alınmadan üretim ortamında yüksek yük oluşturmak
Fonksiyonel testlerin yapay zekâ ve otomasyonla nasıl desteklenebileceğini görmek için yapay zekâ ile yazılım test otomasyonu rehberini okuyabilirsiniz.
Performans Testi Nasıl Öğrenilir?
Performans testi uzmanlarının yalnızca JMeter veya k6 kullanması yeterli değildir. HTTP, API, ağ, veritabanı, izleme, temel istatistik ve yazılım mimarisi bilgisi de gerekir.
Uygulamalı Performans, Yük ve Stres Testi Eğitimi; test türleri, metrikler, test yaşam döngüsü, senaryo geliştirme ve sonuç analizi konularında ekiplerin yetkinlik kazanmasına yardımcı olur.
Test metodolojisi ve kalite güvence alanındaki diğer programlar için yazılım testi ve DevOps eğitimlerini inceleyebilirsiniz.
Performans Testi Hakkında Sık Sorulan Sorular
Performans testi nedir?
Performans testi, bir yazılım sisteminin belirli yükler altındaki hız, kararlılık, ölçeklenebilirlik ve kaynak kullanımını ölçen fonksiyonel olmayan test yaklaşımıdır.
Yük testi ile performans testi aynı mı?
Hayır. Yük testi, sistemin beklenen yük altındaki davranışını ölçen performans testi türüdür. Performans testi ayrıca stres, spike, dayanıklılık, hacim ve ölçeklenebilirlik testlerini kapsar.
Performans testinde hangi metrikler ölçülür?
Yanıt süresi, p95 ve p99 değerleri, throughput, hata oranı, eşzamanlı kullanıcı, CPU, bellek, disk, ağ ve veritabanı metrikleri ölçülebilir.
Performans testi ne zaman yapılmalı?
Mimari ve kritik akışlar belirginleştiğinde erken performans kontrollerine başlanmalı; kapsamlı yük testleri önemli sürümler, kampanyalar ve kapasite değişiklikleri öncesinde uygulanmalıdır.
JMeter ne için kullanılır?
Apache JMeter; web uygulamaları ve API’ler üzerinde yük oluşturarak yanıt süresi, işlem kapasitesi ve hata oranı gibi performans sonuçlarını ölçmek için kullanılan açık kaynaklı araçtır.
Performans testi üretim ortamında yapılabilir mi?
Üretimde test gerçekçi sonuçlar sağlayabilir ancak kesinti ve veri riski oluşturur. Açık izin, sınırlandırılmış yük, izleme, geri dönüş planı ve uygun test verisi olmadan üretim ortamında yüksek yük testi yapılmamalıdır.
