Zirve Sezonundan Önce Çevrimiçi Mağazanızı Yük Testine Tabi Tutma (k6 Rehberi)

Black Friday'da mağazanızın 300 ziyaretçide çöktüğünü öğrenmeyin. Bu kılavuz, k6 ile bir çevrimiçi mağazayı yük testi yapmanın yollarını gösterir; gerçekçi gezinme, sepete ekleme ve ödeme senaryolarını içerir.

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

  1. 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.
  2. Hosting sağlayıcınıza ve CDN’inize bildirin, aksi takdirde testiniz bir saldırı olarak engellenebilir.
  3. Test ortamında gerçek ödemeleri ve e-postaları devre dışı bırak
  4. Analitiklerden test trafiğini hariç tut
  5. 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_ID veya 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.