Yük testi ve stres testi: sistem yoğunlukta nasıl davranır?
Yük testi beklenen kullanıcı yükünü, stres testi ise sistemin sınırlarını sınar. Performans testi türleri, adımlar, araçlar ve sık hatalar.
Yük testi ve stres testi nedir?
Yük testi (load testing), bir uygulamanın gerçekçi ve beklenen kullanıcı yükü altında istenen hız ve kararlılıkla çalışıp çalışmadığını ölçen performans testi türüdür. Stres testi (stress testing) ise yükü bilinçli olarak beklenen seviyenin üzerine çıkarır; amaç sistemin sınırını bulmak, bozulma biçimini görmek ve toparlanıp toparlanamadığını anlamaktır.
İkisi performans testi çatısının altındadır ve birbirinin yerine geçmez. Yük testi "normal ve yoğun günde yeterli miyiz?" sorusuna, stres testi "sınırı aşarsak ne olur?" sorusuna cevap arar.
Performans testi türleri
Performans testi tek bir etkinlik değil, farklı sorulara göre ayrılan bir aile olarak düşünülür:
- Yük testi: Beklenen eşzamanlı kullanıcı ya da istek düzeyinde yanıt süresi ve hata oranını ölçer.
- Stres testi: Yükü kapasitenin ötesine iterek sistemin çöküş davranışını ve toparlanmasını inceler.
- Ani yük (spike) testi: Yükü kısa sürede keskin biçimde artırır; kampanya ya da duyuru anındaki sıçramaya hazır olunup olunmadığını sınar.
- Dayanıklılık (soak) testi: Orta düzey bir yükü uzun süre uygular; bellek sızıntısı, kaynak tükenmesi gibi zamanla ortaya çıkan sorunları arar.
- Kapasite testi: Kabul edilebilir performansla desteklenen azami yükü bulur ve kapasite planlamasına girdi sağlar.
Günlük dilde bu terimler bazen karıştırılır. Test planı yazarken amaç net olmalı, çünkü yük profili amaca göre değişir.
Bir test nasıl yürür?
Tipik akış şöyledir:
- Hedefleri belirle: Kabul edilebilir yanıt süresi, hata oranı ve kaynak kullanımı eşikleri önceden yazılır.
- Senaryoları seç: Gerçek kullanıcıların en çok yaptığı ve en kritik işlemler seçilir; örneğin giriş, arama ve ödeme.
- Yük profilini kur: Kullanıcı sayısı zamanla yavaşça artırılır, belirli bir süre sabit tutulur ve gerekirse azaltılır.
- Test verisini hazırla: Gerçekçi veri kullanılmazsa önbellek etkisi sonuçları yanıltır.
- Ortamı hazırla: Üretime mümkün olduğunca benzeyen bir ortam seçilir.
- Çalıştır ve gözlemle: Hem istemci tarafı ölçümler (yanıt süresi, hata) hem sunucu tarafı ölçümler (işlemci, bellek, veritabanı sorguları) izlenir.
- Analiz et: Darboğaz bulunur, düzeltilir, test yinelenir.
Örnek: kampanya öncesi ödeme sayfası
Örneğin bir perakende sitesi büyük bir indirim kampanyasına hazırlanıyor. Yük testiyle geçen yılın en yoğun saatine benzeyen bir ziyaretçi akışı oluşturulur: Önce ürün listeleme ve arama, bir kısmı sepete ekleme, daha küçük bir kısmı ödeme yapıyor. Test sırasında yanıt süresinin ödeme adımında belirgin biçimde arttığı görülür.
Sunucu ölçümleri incelendiğinde sorunun uygulama kodundan değil, ödeme sırasında kilitlenen bir veritabanı sorgusundan kaynaklandığı anlaşılır. Sorgu düzeltilip test tekrarlanır. Ardından stres testiyle yük, beklenen seviyenin üstüne çıkarılır ve sistemin kontrollü şekilde yavaşlayıp yavaşlamadığına, hata mesajlarının anlamlı olup olmadığına bakılır.
Hangi araçlar kullanılır?
Açık kaynak ve ticari birçok araç vardır. Apache JMeter, grafik arayüzüyle senaryo tasarlamaya imkân veren, uzun yıllardır kullanılan bir araçtır. k6 ise testlerin JavaScript ile kod olarak yazıldığı, sürekli entegrasyon hatlarına kolay yerleştirilen modern bir araçtır. Locust ve Gatling gibi alternatifler de yaygındır.
Araçtan önce önemli olan metriklerdir. Başlıca göstergeler yanıt süresinin yüzdelik dilimleri, saniyedeki istek sayısı (throughput), hata oranı ve kaynak kullanımıdır. Ortalama yanıt süresi tek başına yanıltıcıdır, çünkü yavaş kalan az sayıdaki istek ortalamada kaybolur; bu nedenle yüzdelik dilimlere bakılır.
Sık yapılan hatalar
- Test ortamının üretimden çok farklı olması: Küçük bir test ortamında alınan sonuçlar üretime doğrudan taşınamaz.
- Gerçekçi olmayan senaryo: Kullanıcıların yalnızca tek bir sayfaya yüklenmesi, gerçek davranışı yansıtmaz.
- Düşünme süresi (think time) koymamak: Gerçek kullanıcılar sayfalar arasında bekler. Hiç beklemeyen sanal kullanıcılar abartılı yük üretir.
- Yalnızca ortalamaya bakmak: En yavaş istekler kullanıcı deneyimini belirler.
- Test aracını darboğaz yapmak: Yük üreten makine yetersizse ölçülen yavaşlık sistemin değil aracın yavaşlığı olur.
- Tek seferlik test: Performans her sürümle değişir. Düzenli ve otomatik tekrarlanan testler regresyonu erken yakalar.
Mindset programlarında performans testi
Konuyu uygulamalı çalışmak isteyenler için Mindset kataloğunda Performance Testing (JMeter, k6) eğitimi bulunur. Eğitimin modülleri arasında Performans Testi Kavramları ve Test Türleri, Apache JMeter ile Test Tasarımı, JMeter Gelişmiş Özellikler, k6 ile Modern Performans Testi, Sonuç Analizi ve Darboğaz Tespiti, Performans Raporu ve Kapasite Planlaması yer alır.
İlgili Mindset programı
Performance Testing (JMeter, k6)
Sık sorulan sorular
Yük testi ile stres testi arasındaki temel fark nedir?
Yük testi beklenen yoğunlukta sistemin yeterli olup olmadığını sınar; stres testi ise bu yoğunluğun ötesine geçer ve sistemin nerede, nasıl bozulduğunu araştırır. Biri "yeterli miyiz?" sorusunu, diğeri "sınırımız nerede ve çöktüğümüzde ne olur?" sorusunu cevaplar.
Testi canlı sistemde yapmak güvenli mi?
Genellikle önerilmez. Yük testi gerçek kullanıcıları yavaşlatabilir ya da veriyi kirletebilir. Üretime olabildiğince benzeyen ayrı bir ortam tercih edilir. Üretimde test zorunluysa kontrollü, düşük riskli ve izlenen bir şekilde, sorumlu ekiplerin bilgisiyle yapılmalıdır.
Yanıt süresinin ortalaması yeterli bir ölçüt mü?
Hayır. Ortalama, yavaş kalan az sayıdaki isteği gizleyebilir. Yüzdelik dilimler (örneğin isteklerin büyük kısmının hangi süre altında tamamlandığı) kullanıcı deneyimini daha iyi yansıtır. Hata oranı ve saniyedeki istek sayısıyla birlikte okunmalıdır.
JMeter mi k6 mı seçilmeli?
Seçim ekibin alışkanlığına bağlıdır. JMeter görsel arayüzle senaryo kurmayı kolaylaştırır ve geniş eklenti ekosistemi vardır. k6 testleri kod olarak yazmak isteyen, sürekli entegrasyonla otomatikleştiren ekipler için uygundur. İkisi de temel kavramları aynı şekilde uygular.
Performans testini kim yapar?
Rol organizasyona göre değişir. Kalite ve test mühendisleri, performans mühendisleri ya da altyapı ve geliştirici ekipler bu işi üstlenebilir. Başarının anahtarı, testin yalnızca bir kişinin değil geliştirme, altyapı ve ürün ekiplerinin ortak sahiplendiği bir pratik hâline gelmesidir.