Her yıl, mağazalar en kötü anda sınırlarını keşfeder: bir indirim sırasında, bir TV mention’ında veya Black Friday’de. Bir yük testi, bu sınırları önceden, kendi şartlarınızda bulmanızı sağlar.
Bu kılavuz, bir çevrimiçi mağazayı k6 ile yük testi yapmanın ve sonuçları yorumlamanın nasıl yapılacağını göstermektedir.
Bir yük testi size ne söyler
- Mağazanız kaç eşzamanlı alışverişçi kaldırabilir?
- Hangi sayfalar önce yavaşlar (genellikle arama, sepet ve ödeme)
- Darboğazın nerede olduğu: PHP işçileri, veritabanı, arama motoru, harici API’ler
- Önbelleğin yük altında çalışıp çalışmadığı
- müşterilerin zirve döneminde göreceği hata oranı nedir
Test türleri
| Test | Amaç |
|---|---|
| Smoke testi | Scriptin çalıştığını kontrol etmek için küçük bir yük |
| Yük testi | Sürekli bir dönem için beklenen zirve trafik |
| Stres testi | Sistem bozulana kadar artırın, sınırı bulmak için |
| Spike testi | Trafikte ani artış (e-posta kampanyası, TV’de bahsedilmesi) |
| Islak test | Saatlerce normal yük, bellek sızıntılarını ve yavaş bozulmayı bulmak için |
Başlamadan önce
- Staging veya üretim benzeri bir ortamda aynı donanım ve yapılandırma ile test edin. Eğer üretimi test etmeniz gerekiyorsa, bunu sessiz bir zamanda yapın ve barındırma sağlayıcınızı bilgilendirin.
- Hosting sağlayıcınıza ve CDN’inize bildirin, aksi takdirde testiniz bir saldırı olarak engellenebilir.
- Test ortamında gerçek ödemeleri ve e-postaları devre dışı bırak
- Analitiklerden test trafiğini hariç tut
- Hedefinizi bilin: analizlerinizi kullanarak zirve oturumlarını, dakikada sayfa görüntülemelerini ve saatteki siparişleri tahmin edin, ardından bir güvenlik payı ekleyin.
k6’yı kurun
Ubuntu/Debian, macOS ve Windows’ta, k6 Grafana’nın paket depolarından, Homebrew ile (brew install k6) veya Docker aracılığıyla kurulabilir. Sisteminiz için resmi k6 belgelerini kontrol edin.
Adım 1: Basit bir tarayıcı senaryosu
import http from 'k6/http';
import { check, sleep } from 'k6';
export const options = {
stages: [
{ duration: '2m', target: 50 },
{ duration: '5m', target: 50 },
{ duration: '2m', target: 0 },
],
thresholds: {
http_req_failed: ['rate<0.01'],
http_req_duration: ['p(95)<1500'],
},
};
const BASE = 'https://staging.example.com';
export default function () {
let res = http.get(`${BASE}/`);
check(res, { 'home 200': (r) => r.status === 200 });
sleep(Math.random() * 3 + 2);
res = http.get(`${BASE}/shoes/trail-running.html`);
check(res, { 'category 200': (r) => r.status === 200 });
sleep(Math.random() * 3 + 2);
res = http.get(`${BASE}/trail-shoe-x200.html`);
check(res, { 'product 200': (r) => r.status === 200 });
sleep(Math.random() * 5 + 3);
}
Çalıştır:
k6 run browse.js
sleep çağrıları, gerçek kullanıcıların sayfaları okumasını simüle eder. Onlarsız, 50 sanal kullanıcı yüzlerce gerçek ziyaretçi gibi davranır.
Adım 2: Gerçekçi alışverişçi davranışları ekleyin
Gerçek trafik bir karışımdır. Tipik bir dağılım şöyle olabilir:
- Çoğu ziyaretçi ana sayfa, kategoriler ve ürünler arasında gezinir.
- Daha küçük bir pay aramaları
- Sepete daha az ekle
- Küçük bir hisse ödeme sürecine başlar
Farklı ağırlıklarla ayrı senaryolar kullanın:
export const options = {
scenarios: {
browsers: { executor: 'ramping-vus', exec: 'browse',
stages: [{ duration: '3m', target: 160 }, { duration: '10m', target: 160 }] },
searchers: { executor: 'ramping-vus', exec: 'search',
stages: [{ duration: '3m', target: 30 }, { duration: '10m', target: 30 }] },
buyers: { executor: 'ramping-vus', exec: 'addToCart',
stages: [{ duration: '3m', target: 10 }, { duration: '10m', target: 10 }] },
},
};
Kırılımı kendi analiz huninize dayandırın.
Adım 3: Sepete ekleme ve ödeme işlemini test et
Sepet ve ödeme en önemli ve en az önbelleğe alınabilir parçalardır. Sepete ekleme genellikle bir oturum çerezi ve bir form anahtarı veya nonce gerektirir; bunları ürün sayfasından çıkarmanız gerekir:
- Magento: sayfadan veya çerezden
form_key - WooCommerce: sepete ekle
?add-to-cart=PRODUCT_IDveya Mağaza API’si aracılığıyla - Shopify: AJAX Sepet API’si (
/cart/add.js). Not: Shopify altyapıyı yönetir; bir Shopify mağazasını yük testi yapmadan önce Shopify’ın politikalarını kontrol edin ve bunun yerine kendi uygulamalarınıza ve entegrasyonlarınıza odaklanın.
k6, sanal kullanıcı başına çerezleri otomatik olarak saklar. Sepetin gerçekten ürünü içerdiğini doğrulamak için check() kullanın.
Ödeme adımına kadar test ödemesi yöntemi ile ödeme işlemini test edin veya sahneleme ortamında ödeme sağlayıcısını taklit edin. Gerçek ödeme sağlayıcılarına karşı asla gerçek siparişler oluşturmayın.
Adım 4: Test sırasında sunucuyu izleyin
k6 çıktısı yanıt sürelerini ve hataları gösterir. Ayrıca neden görmeniz gerekir:
- Sunucu başına CPU ve bellek
- PHP-FPM aktif süreçler ve kuyruk (
pm.status_path) - Veritabanı: bağlantılar, yavaş sorgular, kilitler
- Önbellek hit oranı (Varnish, CDN, Redis)
- Arama motoru yükü (OpenSearch/Elasticsearch)
- Harici API yanıt süreleri (nakliye, ödeme, vergi)
New Relic, Tideways veya Blackfire gibi bir APM aracı, darboğazı bulmayı çok daha kolay hale getirir.
Sonuçları okuma
| Metrik | Nelere dikkat etmelisiniz |
|---|---|
http_req_duration p(95) |
Bu isteğin %95’i daha hızlı. Yük ile nasıl büyüdüğünü izleyin. |
http_req_failed |
Hata oranı. Yüzde birin bir kısmının üzerindeki her şey dikkat gerektirir. |
iterations |
Tamamlanan kullanıcı yolculukları |
| Sunucu CPU / PHP işçileri | Doymuş çalışanlar, isteklerin kuyruklanmaya başlaması anlamına gelir. |
kırılma noktası, yanıt sürelerinin keskin bir şekilde arttığı veya hataların ortaya çıktığı yerdir. Beklenen zirveniz o noktadan oldukça aşağıda olmalıdır.
Yük testleriyle bulunan yaygın darboğazlar
- Yetersiz PHP-FPM işçi sayısı veya mevcut bellek için çok fazla işçi.
- Belirli sayfalar veya parametreler için tam sayfa önbelleği çalışmıyor
- Katmanlı navigasyon veya arama üzerindeki yavaş veritabanı sorguları
- Disk üzerinde oturum depolama yerine Redis (bkz. Redis nesne önbellek kılavuzu)
- Ödeme sırasında harici API çağrıları (nakliye ücretleri, adres doğrulama)
- Sepet sayfalarında ağır eklentiler veya uzantılar
Düzeltmeden sonra: tekrar test et
Yük testi bir döngüdür: test et, darboğazı bul, düzelt, tekrar test et. Zirveye ulaşmadan önce en az iki veya üç tur için zaman ayırın.
Sıkça sorulan sorular
Üretimi yük testi yapabilir miyim?
Mümkün, ama riskli. Üretim benzeri bir sahne ortamını tercih edin. Üretimi test ediyorsanız, bunu gece yapın, küçük başlayın ve barındırma sağlayıcınızı bilgilendirin.
Kaç sanal kullanıcıya ihtiyacım var?
Analitiklerden hesaplayın: zirve eşzamanlı oturumlar, gerçekçi düşünme süreleri ile birlikte, artı bir güvenlik marjı. Uyku süreleri olan sanal kullanıcılar, saniye başına sayfa görüntülemeleri ile aynı değildir.
k6 ücretsiz mi?
k6 komut satırı aracı açık kaynaklıdır. Grafana ayrıca daha büyük dağıtılmış testler için bir bulut hizmeti sunmaktadır.
Profesyonel bir yük testi mi istiyorsunuz?
Magento ve WooCommerce mağazaları için yük testleri yapıyorum, darboğazları bulup zirve sezonundan önce bunları düzeltiyorum. sunucularım ve yedekleme hizmetim veya bir yük testi talep et kısmına göz atın.