PHP ve Laravel Uygulamalarında Stres Testi Nasıl Yapılır?
PHP ve Laravel Uygulamalarında Stres Testi Nasıl Yapılır?
Bir PHP stres test aracını seçmek genellikle sıkıntılı bir denge gerektirir: popüler yük test araçları genellikle PHP dışındadır, bu nedenle uygulamanızın yapıldığı dil yerine JavaScript, Java veya XML gibi dillerde senaryolar yazmak zorunda kalırsınız. Bu rehber farklı bir yaklaşım sergiliyor. PHP uygulamanız için stres testinin ne anlama geldiğini, bir araçta neleri göz önünde bulundurmanız gerektiğini, ana seçeneklerin nasıl karşılaştırıldığını ve ilk stres testinizi sadece birkaç dakika içinde, Composer iş akışınızı terk etmeden, nasıl yapacağınızı ele alacağız.
PHP’de Stres Testi Nedir?
PHP’de Stres Testi Nedir?
Stres testi, uygulamanızı normal çalışma sınırlarının ötesine iterek kırılma noktasını bulmayı ve nasıl kırıldığını görmeyi sağlar. Bu, tek bir isteğin asla yanıtlayamayacağı soruları cevaplar: API’niz ne kadar eşzamanlı kullanıcıyı karşılayabilir? Veritabanı bağlantı havuzu yük altında tükeniyor mu? Uygulama zarif bir şekilde kapanıyor mu yoksa devriliyor mu?
Farklı performans test türlerini birbirine karıştırmak kolaydır:
- Yük testi — uygulamanın beklenen bir trafik seviyesini karşılayıp karşılayamadığını doğrulamak.
- Stres testi — beklenen trafiği geçerek kırılma noktasını bulmak.
- Pik testi — uygulamaya aniden gelen bir kullanıcı akını ile saldırmak.
PHP Stres Test Aracında Neleri Göz Önünde Bulundurmalısınız?
PHP Stres Test Aracında Neleri Göz Önünde Bulundurmalısınız?
Her yük test aracı PHP ekibi için uygun değildir. Bir tane seçmeden önce, aşağıdaki kriterlere göre kontrol edin:
- PHP ve Composer-native — testleri PHP ile yazabilir ve Composer ile yükleyebilir misiniz, yoksa ayrı bir dil ve araç zinciri öğrenmek zorunda mısınız?
- Gerçekçi çok adımlı senaryolar — gerçek kullanıcılar giriş yapar, gezinir, sepete ekler ve kasadan geçer. Araç istekleri birbirine bağlamalı ve adımlar arasında veri (tokenler, kimlikler, CSRF) geçirmeli.
- Ramp-up ve aşamalar — uygulamanıza bir anda 1.000 kullanıcıyı sokmak gerçekçi değildir. Ramp-up, tutma, pik ve düşüş profilleri istiyorsunuz.
- Yüzde oranı metrikleri — ortalamalar sorunları gizler. P95 ve P99 gecikmesi, saniyedeki istek sayısı ve başarı/hata oranlarına ihtiyacınız var.
- CI/CD entegrasyonu — stres testleri en değerli olduğunda otomatik olarak çalışır ve gönderimden önce gerilemeleri yakalar.
- Assertions — örneğin, P95’in 150ms’yi aşması durumunda bir yapıyı başarısız kılabilme yeteneği.
- Ölçek — gerçekten altyapınızı zorlayacak kadar eşzamanlı sanal kullanıcı oluşturabilir mi?
PHP Stres Test Araçlarının Karşılaştırması
PHP Stres Test Araçlarının Karşılaştırması
PHP uygulaması için stres testi aracının en yaygın seçeneklerine nesnel bir bakış:
| Araç | Testleri Yaz | PHP-native | Laravel-native | Çok adımlı senaryolar | En iyi kullanım |
|---|---|---|---|---|---|
| VoltTest | PHP | Evet | Evet | Evet | PHP/Laravel ekipleri için yerel testler sunan hızlı bir motor |
| k6 | JavaScript | Hayır | Hayır | Evet | JS ile yoğun ekipler için, JS kodlamasında rahat olanlar |
| JMeter | XML / GUI | Hayır | Hayır | Evet | Protokol genişliği ve karmaşık kurumsal planlar için |
| Locust | Python | Hayır | Hayır | Evet | Python ekipleri için |
Apache Bench (ab) | CLI bayrakları | Hayır | Hayır | Hayır | Hızlı bir tek noktada kontrol için |
Tek bir “en iyi” aracın olmadığını unutmayın; bu tamamen yığınınıza bağlı:
- k6, ekibiniz JavaScript’de çalışıyorsa mükemmel bir seçimdir.
- JMeter, protokol genişliği ve büyük kurumsal test planları için deneyimli bir araçtır, ancak daha ağır ve GUI odaklı bir iş akışının bedelini ödemelisiniz.
- Apache Bench, tek bir URL üzerinde hızlı bir
ab -n 1000 -c 50testini yapmak için idealdir, ancak gerçek kullanıcı yolculuklarını modelleyemez. - VoltTest, PHP ve Laravel geliştiricileri için özel olarak oluşturulmuştur: testleri PHP ile yazarsınız, Composer ile yükleyebilirsiniz ve gerçek yük üretimi Go motoru tarafından uygulanır, böylece PHP’nin kullanım kolaylığını Go’nun eşzamanlılığı ile birleştirirsiniz. Laravel için birinci taraf bir paket ile birlikte tek satırlık hız sağlar ve ihtiyaç duyduğunuzda tam çok adımlı senaryolar sunar.
VoltTest ile Sade PHP’de Stres Testi
VoltTest ile Sade PHP’de Stres Testi
VoltTest’ın temel SDK’sı framework bağımsızdır — Symfony, WordPress veya düz PHP gibi her PHP uygulamasıyla çalışır. Composer ile kurulum yapın:
composer require volt-test/php-sdk
Ardından bir senaryo tanımlayın ve çalıştırın. İşte ana sayfanı hedef alan minimal bir stres testi:
require 'vendor/autoload.php';
use VoltTest\VoltTest;
// Yeni bir test oluştur
$voltTest = new VoltTest();
// Yükü yapılandır: 10s içinde ramp edilen 50 sanal kullanıcı, 1 dakika boyunca tutulur
$voltTest->setVirtualUsers(50)
->setRampUp()
->setDuration();
// Bir veya daha fazla adım içeren bir senaryo tanımla
$scenario = $voltTest->scenario();
$scenario->step()
->get()
->validateStatus(, 200);
// Testi çalıştır — true ile geçirildiğinde canlı raporu konsolunuza aktarır
$voltTest->run(true);
Bunu herhangi bir PHP betiği gibi çalıştırın:
php stress-test.php
Çünkü ağır yükleme VoltTest’ın Go motorunda gerçekleşir, tek bir makine, saf bir PHP çalıştırıcısından çok daha fazla eşzamanlı sanal kullanıcıyı yönlendirebilir — ve siz zaten kullandığınız dilde test yazmaya devam edersiniz.
Laravel Uygulamasında Stres Testi
Laravel Uygulamasında Stres Testi
Laravel kullanıyorsanız, özel paket, temel SDK’nın üzerine inşa edilmiştir ve Laravel’e özgü kolaylıklar ekler: Artisan komutları, otomatik rota keşfi ve CSRF/çerez yönetimi. Bunu bir geliştirme bağımlılığı olarak kurun:
composer require volt-test/laravel-performance-testing --dev
php artisan vendor:publish --tag=volttest-config
Artisan ile bir test oluşturun:
php artisan volttest:make LoginTest
Ardından senaryoyu tanımlayın. Dikkat edin extractCsrfToken() — paket, Laravel’in CSRF tokenini yanıtın içinden otomatik olarak çıkarır, böylece siz çıkarmak zorunda kalmazsınız:
namespace App\VoltTests;
use VoltTest\Laravel\Contracts\VoltTestCase;
use VoltTest\Laravel\VoltTestManager;
class LoginTest implements VoltTestCase
{
public function define(VoltTestManager $manager): void
{
$manager->target();
$scenario = $manager->scenario();
$scenario->step()
->get()
->expectStatus(200)
->extractCsrfToken();
$scenario->step()
->post(, [
=> ,
=> ,
=> ,
])
->expectStatus(302);
}
}
Laravel paketi ayrıca aşamaları (ramp-up, hold, spike, ramp-down), gerçekçi verilerle test yürütmek için CSV veri kaynakları ve mevcut test kümeniz içinde stres testlerinin çalışması için PHPUnit entegrasyonu destekler.
Komut Satırından Hızlı Tek Seferlik Stres Testleri
Komut Satırından Hızlı Tek Seferlik Stres Testleri
Bazen bir test sınıfı yazmak istemezsiniz — sadece bir uç noktaya yük bindirip dayanıp dayanmadığını görmek istersiniz, ab -n 1000 -c 50 ile yaptığınız gibi. Laravel paketinin volttest:run komutu tam olarak bunu yapar ve ab‘nin sınırlamalarından kaçınır.
Tek bir URL’yi 50 sanal kullanıcı ile bir dakika boyunca stres testine tabi tutun — komut otomatik olarak argümanın bir URL olduğunu algılar, bu nedenle başka bir şey yapılandırmanıza gerek yok:
php artisan volttest:run https://api.example.com/health --users=50 --duration=1m
Kimlik doğrulamalı POST uç noktaları ile bir isteği gövde içindeki bir istekle de stres testine tabi tutabilirsiniz:
php artisan volttest:run https://example.com/api/login \
--users=100 \
--method=POST \
--body=
Stres Testi Sonuçlarınızı Okuma
Stres Testi Sonuçlarınızı Okuma
Bir stres testi yalnızca raporu yorumlayabiliyorsanız yararlıdır. VoltTest çıktısı şöyle görünür:
Performans Raporu: Ana Sayfa Stres Testi
----------------------------------------------------------------------
Toplam İstek: 5000
Başarı Oranı: 99.94%
İstek/Saniye (RPS): 346.19
Ortalama Gecikme: 74.24ms
P95 Gecikme: 128.71ms
P99 Gecikme: 210.05ms
----------------------------------------------------------------------
Üzerinde durulması gereken noktalar:
- Başarı Oranı — yük altında %99’un altındaki değer genellikle uygulamanın istekleri düşürdüğü veya hata yaptığı anlamına gelir.
- İstek/Saniye (RPS) — gerçek dünya alım sınırınız.
- Ortalama Gecikme — faydalı, ancak istisnaları gizler. Sadece ortalamaya dayalı olarak gönderim yapmayın.
- P95 / P99 Gecikmesi — Gecikmenin %95 ve %99’unun kullanıcılar tarafından deneyimlendirilen değerleri. Gerçek sorunlar burada ortaya çıkar: 74ms’lik bir ortalama ile 2000ms P99, 100 kullanıcıdan 1’inin kötü bir deneyim yaşadığı anlamına gelir.
Yaygın PHP Stres Testi Hataları
Yaygın PHP Stres Testi Hataları
Birkaç hata, stres testi sonuçlarını yanıltıcı kılabilir:
- localhost’ta test yapmak — dizüstü bilgisayarınız üretim ortamı değildir. Ağ, CPU ve veritabanı çok farklıdır. Üretimi yansıtan bir staging ortamında test yapın.
- Ramp-up yapmamak — tüm kullanıcıları aynı anda uygulamaya sokmak, gürültü deposunu ölçer, gerçek trafiği değil. Aşamaları kademeli olarak artırmak için kullanın.
- P99’u yok saymak — ortalamalar iyi görünürken, bir grup kullanıcı acı çekiyor olabilir. Her zaman kuyruk gecikmelerine göz atın.
- Stres testini üretimde habersiz yapmak — canlı bir sistemi kapatabilirsiniz. Ekibinizle koordine edin ve staging veya belirgin şekilde işaretlenmiş bir bakım penceresini tercih edin.
VoltTest Cloud ile Büyük Ölçekli Stres Testlerini Çalıştırın
VoltTest Cloud ile Büyük Ölçekli Stres Testlerini Çalıştırın
Tek bir makineden stres testleri çalıştırmak belirli bir noktaya kadar etkilidir. Birden fazla bölgeden yüz binlerce eşzamanlı kullanıcıyı simüle etmek için dağıtılmış bir altyapıya ihtiyacınız var — ve bu da VoltTest Cloud sağlar, tek bir sunucuyu yönetmeden.
Sonuç
Sonuç
Stres testi, PHP uygulamanızın yük altında nasıl davrandığını, kullanıcılarınız zor yoldan öğrenmeden önce gösterir. Doğru araç, sürtünmeyi ortadan kaldırır: VoltTest ile PHP dilinde test yazarsınız, Composer ile yükleyebilirsiniz, düz PHP veya Laravel üzerinde çalıştırılır ve gerçek yüzde metriklerini okursunuz — tüm bunları yüksek performanslı bir Go motorunda. Bir aşamada tek bir senaryoyla başlaması, P95 ve P99’u yük arttıkça görmek ve testleri CI’ye entegre ederek gerilemelerin üretime ulaşmadan önce tespit edilmesini sağlamak önemlidir.
Kaynak: Orijinal Makale
- PHP ve Laravel Uygulamalarında Stres Testi Nasıl Yapılır?
- PHP’de Stres Testi Nedir?
- PHP Stres Test Aracında Neleri Göz Önünde Bulundurmalısınız?
- PHP Stres Test Araçlarının Karşılaştırması
- VoltTest ile Sade PHP’de Stres Testi
- Laravel Uygulamasında Stres Testi
- Komut Satırından Hızlı Tek Seferlik Stres Testleri
- Stres Testi Sonuçlarınızı Okuma
- Yaygın PHP Stres Testi Hataları
- VoltTest Cloud ile Büyük Ölçekli Stres Testlerini Çalıştırın
- Sonuç


