Yük testi ve stres testi nedir? Web uygulamaları için pratik bir kılavuz
Yük testi ve stres testinin gerçekte neyi ölçtüğünü, aralarındaki farkı, hangi metrik ve araçların önemli olduğunu ve uygulamanızın canlıda çökmeden önce bunlara ne zaman ihtiyaç duyduğunu öğrenin.
Her uygulama, aynı anda yalnızca birkaç kişi kullandığında sorunsuz çalışır. Asıl soru, bir pazarlama kampanyası viral olduğunda, bir indirim başladığında veya bir müşterinin kullanıcı tabanı üç ayda ikiye katlandığında ne olacağıdır. Yük testi ve stres testi, bu sorunun cevabını kullanıcılarınız - ya da yatırımcılarınız - zor yoldan öğrenmeden önce veren iki disiplindir.
İkisi de daha geniş performans testi kategorisine girer ve ikisi de uygulamanıza trafik simüle eder. Ancak farklı sorular sorar, farklı trafik desenleri kullanır ve farklı türde bilgi üretirler. İkisini karıştırmak yaygındır - ve ekiplerin yanlış senaryoyu test etmesine yol açar.
1. Yük testi nedir?
Yük testi, sisteminizin beklenen ve gerçekçi bir trafik hacmi altında nasıl davrandığını kontrol eder - yani üretimde gerçekten planladığınız eşzamanlı kullanıcı, istek veya işlem sayısı altında. Amaç bir şeyi kırmak değil; yanıt sürelerinin, hata oranlarının ve kaynak kullanımının, tasarladığınız yük altında kabul edilebilir sınırlar içinde kaldığını doğrulamaktır.
Tipik bir yük testi, örneğin bir mağazada gezinen, sepete ürün ekleyen ve ödeme yapan 500 eşzamanlı kullanıcıyı simüle eder, ardından uygulamanın hedef hizmet seviyesi anlaşmanıza (SLA) göre nasıl performans gösterdiğini ölçer. 500ms altında yüklenmesi gereken sayfalar bu yük altında üç saniye sürmeye başlarsa, lansmandan önce düzeltilmeye değer bir darboğaz bulmuşsunuz demektir.
2. Stres testi nedir?
Stres testi tam tersini yapar: trafiği kasıtlı olarak beklenen seviyelerin üzerine çıkarır ve sistem yavaşlayana, hata döndürmeye başlayana veya tamamen çökene kadar artırmaya devam eder. Amaç normal davranışı doğrulamak değil, kırılma noktasını bulmak ve sistemin nasıl başarısız olduğunu gözlemlemektir.
Uygulama zarif bir şekilde mi bozuluyor, önbelleğe alınmış veri veya kullanıcı dostu bir hata mesajı mı döndürüyor? Yoksa tamamen mi çöküyor, veriyi mi bozuyor, ya da veritabanını da mı birlikte götürüyor? Stres testi bu soruyu yanıtlar ve normal yük altında hiç ortaya çıkmayan zincirleme arızaları keşfetmenin genellikle tek yoludur.
3. Yük testi ve stres testi: temel farklar
Bu iki teknik araç ve metodolojiyi paylaşır ama amaçları farklıdır:
- Amaç: yük testi beklenen trafikte performansı doğrular. Stres testi kırılma noktasını ve sistemin ötesinde nasıl davrandığını bulur.
- Trafik deseni: yük testi sabit, gerçekçi bir yük kullanır. Stres testi trafiği sürekli artırır, genellikle herhangi bir gerçek senaryonun çok ötesine geçer.
- Başarı kriteri: bir yük testi, metrikler SLA sınırları içinde kaldığında geçer. Bir stres testi, kırılma noktasını bulup arızanın güvenli olduğunu (veri kaybı yok, net bir hata ve trafik düştüğünde toparlanma) doğruladığında "başarılı" olur.
- Ne zaman çalıştırılır: yük testi genellikle her büyük sürümden önce yapılır. Stres testi daha az sıklıkla çalıştırılır - büyük bir lansmandan önce, bilinen bir trafik artışından önce veya önemli mimari değişikliklerden sonra.
4. Takip edilmesi gereken temel metrikler
Hangi testi çalıştırırsanız çalıştırın, aynı birkaç metrik sistemin sağlıklı olup olmadığını gösterir:
- Yanıt süresi / gecikme yüzdelikleri: ortalamalar sorunları gizler - p95 ve p99 gecikmesini takip edin, çünkü çok yavaş isteklerin küçük bir yüzdesi bile gerçek kullanıcıların deneyimini bozabilir.
- Verim (throughput): sistemin bozulmadan sürdürebildiği saniyedeki istek sayısı (RPS) veya saniyedeki işlem sayısı (TPS).
- Hata oranı: yük arttıkça başarısız isteklerin (zaman aşımları, 5xx yanıtları) yüzdesi.
- Kaynak kullanımı: yalnızca uygulama sunucusunda değil, yığının her katmanında CPU, bellek, veritabanı bağlantıları ve kuyruk derinliği.
- Eşzamanlı kullanıcılar / kırılma noktası: performans veya kullanılabilirlik çökmeden önce sistemin kaldırdığı maksimum eşzamanlı kullanıcı veya istek sayısı.
5. Popüler araçlar
Bunu sıfırdan kurmanıza gerek yok - olgun açık kaynak ve ticari araçlar çoğu ihtiyacı karşılar:
- k6: JavaScript ile yazılan testlere sahip, geliştirici dostu modern bir yük testi aracı; CI/CD hatlarında çalıştırması kolay.
- Apache JMeter: hem yük hem stres testi için uzun süredir standart olan, GUI'si ve geniş protokol desteği olan araç.
- Gatling: yüksek verimli senaryolar için oluşturulmuş, açık ve okunabilir HTML raporlarına sahip Scala tabanlı bir araç.
- Locust: kullanıcı davranışını kod içinde tanımladığınız, karmaşık ve gerçekçi senaryolar için uygun bir Python çerçevesi.
- Artillery: Node.js projelerine ve serverless API'lere doğal olarak uyan, YAML tabanlı hafif bir araç.
6. Bu testler ne zaman çalıştırılmalı
Performans testi, büyük bir teslim tarihinden önce tek seferlik bir olay değil, bir alışkanlık olduğunda en iyi şekilde işler:
- Halka açık bir lansmandan veya büyük bir özellik sürümünden önce, düzeltmek için hâlâ zaman varken darboğazları yakalamak amacıyla.
- Tahmin edilebilir trafik artışlarından önce - bir indirim, bir ürün duyurusu, bir pazarlama kampanyası veya mevsimsel talep.
- Önemli mimari değişikliklerden sonra: yeni bir veritabanı, yeni bir önbellek katmanı, serverless'a geçiş veya yeni bir üçüncü taraf entegrasyonu.
- İş açısından kritik sistemler için CI/CD hattının bir parçası olarak düzenli bir programda, böylece performans regresyonları da işlevsellik regresyonları gibi yakalanır.
Sonuç: bu işiniz için neden önemli
Yük ve stres testi sadece bir QA kutucuğu değil - bir arıza için en kötü zamanlamaya karşı bir sigortadır: ürününüzün nihayet ilgi çektiği o an. Bir indirim sırasında zaman aşımına uğrayan bir ödeme sayfası veya bir kampanya viral olduğunda çöken bir rezervasyon sistemi, gerçek gelire ve gerçek güvene mal olur.
Büyümesi beklenen bir ürün inşa ediyorsanız - daha fazla kullanıcı, daha fazla trafik, daha fazla entegrasyon - performans testini en baştan sürüm sürecine dahil etmek, darboğazlarınızı müşterilerinizin önünde, canlı ortamda keşfetmekten çok daha ucuzdur.
Projenizi konuşalım mı?
React ve Next.js konusunda uzman kıdemli bir web geliştiriciyim - dünya çapında freelance projelere açığım.
E-posta
i.vynnychenko@gmail.comKonum
Kyiv, Ukrayna
Upwork
Profili görüntüleTelegram
Bana yazınViber
Bana yazın