JMeter, Gatling, Locust ve k6 testlerini çevirmeden Spitfire'da çalıştırmak
Elinizde çalışan bir test takımı varsa onu yeniden yazmanız gerekmez. Bir JMeter planı (.jmx), bir Gatling simülasyonu, bir locustfile ya da bir k6 betiği Spitfire'da kendi motoruyla koşar: test o motorun runner imajında, kendi runner'larınızda çalışır; sonuç diğer koşular gibi Spitfire'da raporlanır. Her sampler ya da istek bir adım olarak görünür; eşikler, raporlar ve bildirimler her zamanki gibi çalışır. Bu sayfa adımları, yükün nasıl verildiğini ve sınırları anlatıyor.
Çevirmek mi, olduğu gibi çalıştırmak mı?
Spitfire iki yol sunar. Çevirmek: .jmx ve k6 dosyaları Testler → Dosyadan aç ile Spitfire adımlarına dönüşür; sonra test editörde, kod yazmadan değiştirilir (.jmx planlarını içe aktarma, k6 betiklerini içe aktarma). Olduğu gibi çalıştırmak: dosya değişmeden kendi motorunda koşar; betikteki özel kod, eklentiler ve özel metrikler aynen çalışır. Gatling ve Locust testleri yalnız bu yolla gelir.
Dönüştürme raporunun üstündeki k6 ile çevirmeden çalıştır (ya da JMeter ile) düğmesi aynı dosyayı motora yükleyip testi bu yola geçirir.
1. Motoru açın (kurulum yöneticisi)
Harici motorlar varsayılan olarak kapalıdır: yüklenen bir plan ya da betik bir programdır ve runner'ın yetkileriyle çalışır.
- Runner'lar sayfasında Harici motorlar kartını açın.
- Kullanılacak her motoru (JMeter, Gatling, Locust, k6) ayrı ayrı açın.
- Kaydederken "bu testler runner'da kod çalıştırabilir" uyarısını onaylayın. Onay ve değişiklik audit log'a yazılır (
engines.settings).
2. Motorun runner imajını başlatın
Her motorun kendi runner imajı vardır: runner imajının etiketine motorun adı eklenir. Bu imajla başlayan runner motoru kendisi bulur ve engine-jmeter gibi bir etiketle duyurur; harici motor testleri yalnız o etiketli runner'lara gider. Kubernetes'te isteğe bağlı runner'larla koşu, motorun imajından pod başlatır (Kubernetes'te dağıtık yük testi).
| Motor | İmaj | Yüklenecekler | İçinde |
|---|---|---|---|
| JMeter | usespitfire/spitfire:<sürüm>-jmeter | .jmx planı, okuduğu CSV dosyaları, kullandığı eklentilerin jar'ları | JMeter 5.6.3 + Custom Thread Groups |
| Gatling | usespitfire/spitfire:<sürüm>-gatling | mvn package sonrası target/ klasörü ya da onun zip'i (class'lar ya da jar + bağımlılık jar'ları) | Gatling 3.11 kütüphaneleri |
| Locust | usespitfire/spitfire:<sürüm>-locust | locustfile, requirements.txt ve paketlerin wheel (.whl) dosyaları | Locust 2.32 |
| k6 | usespitfire/spitfire:<sürüm>-k6 | Betik, yerel modülleri ve veri dosyaları; ya da bir k6 archive (.tar) | k6 1.0 (tarayıcı ve xk6 eklentileri yok) |
Koşu sırasında internetten hiçbir şey indirilmez. JMeter eklentileri jar olarak testle yüklenir; Gatling projesi derlenmiş yüklenir, runner'da derleme yapılmaz; Locust paketleri yalnız yüklenen wheel dosyalarından ya da yöneticinin tanımladığı iç PyPI aynasından kurulur; k6'da uzak import'lar (https://…) indirilmez, betikle birlikte yüklenir.
3. Dosyaları hazırlayın
Komutları kendi makinenizde çalıştırın; /tam/yol/... kısımlarını kendi dosyalarınızın tam yoluyla değiştirin.
Gatling
mvn -f /tam/yol/proje/pom.xml -DskipTests packageYükü Spitfire'ın vermesini istiyorsanız simülasyon spitfire.users, spitfire.rampUp ve spitfire.duration system property'lerini okumalıdır (saniye; süre rampayı da kapsar). Okumazsa kendi injection profili çalışır; senaryonun VU ve süresi yine tavandır.
// Simulation (Java DSL): read the load Spitfire gives this runner.
// spitfire.duration is the whole run in seconds, the ramp included.
int users = Integer.getInteger("spitfire.users", 10);
int rampUp = Integer.getInteger("spitfire.rampUp", 30);
int duration = Integer.getInteger("spitfire.duration", 300);
setUp(scn.injectClosed(
rampConcurrentUsers(0).to(users).during(rampUp),
constantConcurrentUsers(users).during(Math.max(duration - rampUp, 1))
)).protocols(httpProtocol);Locust
Paketlerin wheel dosyalarını indirin, sonra locustfile, requirements.txt ve wheels klasörünü birlikte yükleyin:
pip download -r /tam/yol/requirements.txt -d /tam/yol/wheels --only-binary=:all:k6
Betiği denetleyin; yerel modül ya da veri dosyası kullanıyorsa hepsini tek arşivde toplayın:
k6 inspect /tam/yol/script.jsk6 archive --output /tam/yol/archive.tar /tam/yol/script.jsJMeter
Hazırlık gerekmez: .jmx planını, okuduğu CSV'leri ve eklenti jar'larını aynı klasöre koyun.
4. Testi oluşturun
- Testler sayfasında JMeter / Gatling / Locust / k6'ya basın.
- Senaryolar sekmesinde motoru seçin.
- Dosya yükle ya da Klasör yükle ile dosyaları yükleyin (en çok 100 MB ve 5000 dosya). Dosyalar kurulumunuzun veritabanında tutulur ve yalnız koşuyu alan runner'lara gönderilir.
- Özeti okuyun: senaryolar (thread group'lar, simülasyonlar, user class'ları), hedef adresler, kullanıcılar, ramp-up ve süre. Birden çok plan ya da simülasyon varsa koşacak olanı seçin.
- Uyarıları okuyun: kod çalıştıran öğeler, yüklenmemiş bir CSV, jar'ı olmayan eklentiler gibi.
5. Yükü seçin: Spitfire'ınki ya da dosyanınki
Spitfire'ın yükü (varsayılan): senaryonun kullanıcı sayısı, ramp-up'ı ve süresi her runner'a payı kadar motora verilir. Dosyanın yükünü koru: dosyadaki thread group'lar, injection profili, LoadTestShape ya da k6 senaryoları yükü yazıldığı gibi sürer (k6'da runner'lara --execution-segment ile bölünür). İki durumda da senaryonun VU ve süresi tavandır: ölçülen eşzamanlı kullanıcı tavanı geçerse ya da süre dolarsa runner motoru durdurur ve koşu nedeniyle biter.
| Motor | Spitfire'ın yükü | Özellikler (properties) |
|---|---|---|
| JMeter | -Jspitfire.users · -Jspitfire.rampUp · -Jspitfire.duration | -J |
| Gatling | -Dspitfire.users · -Dspitfire.rampUp · -Dspitfire.duration | -D |
| Locust | -u · -r · -t | ortam değişkeni |
| k6 | --vus · --duration (rampada --stage) | -e (__ENV) |
Lisansın VU sınırı eşzamanlı kullanıcılara, süre sınırı koşu süresine uygulanır.
6. Kaydedin, kısa bir koşu başlatın
Harici motor testlerinde Dene (tek VU'luk deneme) yoktur: motor yalnız runner'da çalışır, controller'da asla. Testi kaydedip 1 dakikalık bir koşu başlatın.
Başarı kontrolü: koşunun Adımlar tablosu planın sampler'larını ya da betiğin isteklerini adlarıyla listeler (test başına en çok 200 farklı ad; gerisi tek satırda toplanır). k6 betiğinde Kontroller tablosunda betiğin check'leri ve aşağıdaki satır da vardır:
checks rate==1 check=k6 thresholdsSonuçlar nereden gelir?
Runner motorun sonuç dosyasını okur (JMeter JTL, Gatling simulation.log, Locust istek olayları, k6 --out json) ve Spitfire metriklerine çevirir. Yanıt süreleri, yüzdelikler, hata oranı ve istek hızı diğer koşulardaki gibi raporlanır ve eşikler bunlara uygulanır. k6'nın kendi eşikleri Eşikler sekmesine gelir; Spitfire'ın değerlendiremediklerini (özel metrikler, diğer etiketler) k6 değerlendirir. Özel metrikler (Trend, Counter, Rate, Gauge) koşunun Script metrikleri kartında görünür.
Kaydedilen test diğer testler gibi başlatılır; pipeline'dan başlatmak için CI/CD'de performans testi.
Sınırlar
- Karşılaştırmalı koşular (A/B, ardışık) harici motor testlerini henüz desteklemez.
- Bir testte tek senaryo olur; Spitfire adımları, veri dosyaları ve adaptif koruma eklenemez.
- k6: tarayıcı senaryoları (
k6/browser) ve xk6 eklentileri runner-k6 imajında çalışmaz. - Kod çalıştıran testler runner'ın yetkileriyle çalışır. Runner'ları, test ettiğiniz sistemlerden ayrı, ağ politikalarıyla sınırlanmış kendi ağlarında çalıştırın.
Sık sorulan sorular
JMeter planımı Spitfire'a geçirmek için yeniden yazmam gerekir mi?Testler
Gatling ve Locust testleri de Spitfire adımlarına çevrilir mi?Testler
Koşu sırasında runner internete çıkar mı?Güvenlik
Yükü birden çok runner'a bölebilir miyim?Testler
--execution-segment ile runner'lara bölünür. Sonuçlar tek koşuda birleşir.Harici motorlar neden varsayılan olarak kapalı?Testler
Spitfire tek komutla Docker'a ya da Kubernetes'e kurulur; ücretsiz sürümde bütün test özellikleri ve protokoller açıktır.