JMeter'dan geçiş: .jmx test planlarını Spitfire'a aktarma
Elinizdeki JMeter test planlarını yeniden yazmanız gerekmez. Spitfire bir .jmx dosyasını okuyup Spitfire testine çevirir ve editörde açar: Thread Group'lar senaryo, HTTP istekleri adım, assertion'lar kontrol olur. Karşılığı olmayan her öğe satırıyla bir raporda listelenir. Bu sayfa neyin nasıl çevrildiğini, neyin çevrilmediğini ve adımları anlatıyor.
Adımlar
- Testler sayfasında Dosyadan aç'a basın ve
.jmxdosyasını seçin (en çok 4 MB). Dosya yalnız okunur, hiç çalıştırılmaz. - Editörün üstündeki rapor neyin nasıl çevrildiğini söyler: çevrilmedi (testte yok), kontrol et (yaklaşık çevrildi), not (nasıl çevrildiği). Her satır kaynak dosyadaki yeriyle gelir; hiçbir şey sessizce atlanmaz.
- Adımları, eşikleri ve değişkenleri gözden geçirin; Dene seçili senaryodan tek iterasyon gönderip her isteği ve yanıtı gösterir. Sonra kaydedin.
Neyin nasıl çevrildiği
| JMeter | Spitfire |
|---|---|
Thread Group | Senaryo: süre varsa sabit ya da kademeli (ramp-up) VU, döngü sayısı varsa VU başına iterasyon |
HTTP Request | HTTP adımı: metot, adres, parametreler, body |
HTTP Request Defaults · Header Manager | Alttaki her isteğe adres öneki ve header'lar |
Response · Duration · JSON Assertion | Kontroller |
JSON Extractor · Regular Expression Extractor | Yanıttan değişken çıkarma |
Constant · Uniform Random Timer | Düşünme süresi |
User Defined Variables · ${__P(x,default)} | Değişkenler, varsayılan değerleriyle |
${__Random} · ${__UUID} · ${__time} · ${__threadNum} | Spitfire şablon işlevleri |
Transaction · Simple Controller | Düzleştirilir; adı adımların önüne |
Devre dışı bırakılmış öğeler alınmaz. Hem süre hem döngü sayısı olan Thread Group süreyle çevrilir; sonsuz döngülü ve süresiz olan 10 dakikaya ayarlanır; ikisi de raporda yazar. Bir timer kapsamındaki her isteğe uygulanır ve düşünme süresi olarak önceki isteklere konur.
Bir JMeter planında eşik yoktur; test geçti/kaldı sonucu versin istiyorsanız editörün Eşikler sekmesinde ekleyin (örneğin p(95)<500, rate<0.01). Rapor bunu da hatırlatır.
Örnek: önce ve sonra
50 kullanıcıyı 60 saniyede başlatıp 6 dakika koşan, tek bir GET isteği, bir yanıt kodu assertion'ı ve 1 saniyelik sabit timer içeren küçük bir plan:
<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="5.0">
<hashTree>
<TestPlan testname="Checkout" enabled="true"/>
<hashTree>
<ThreadGroup testname="Shoppers" enabled="true">
<stringProp name="ThreadGroup.num_threads">50</stringProp>
<stringProp name="ThreadGroup.ramp_time">60</stringProp>
<boolProp name="ThreadGroup.scheduler">true</boolProp>
<stringProp name="ThreadGroup.duration">360</stringProp>
<elementProp name="ThreadGroup.main_controller" elementType="LoopController">
<intProp name="LoopController.loops">-1</intProp>
</elementProp>
</ThreadGroup>
<hashTree>
<HTTPSamplerProxy testname="List items" enabled="true">
<stringProp name="HTTPSampler.domain">shop.example.com</stringProp>
<stringProp name="HTTPSampler.protocol">https</stringProp>
<stringProp name="HTTPSampler.path">/api/items</stringProp>
<stringProp name="HTTPSampler.method">GET</stringProp>
</HTTPSamplerProxy>
<hashTree>
<ResponseAssertion testname="200" enabled="true">
<collectionProp name="Asserion.test_strings"><stringProp name="49586">200</stringProp></collectionProp>
<stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
<intProp name="Assertion.test_type">8</intProp>
</ResponseAssertion>
<hashTree/>
</hashTree>
<ConstantTimer testname="Think" enabled="true">
<stringProp name="ConstantTimer.delay">1000</stringProp>
</ConstantTimer>
<hashTree/>
</hashTree>
</hashTree>
</hashTree>
</jmeterTestPlan>Dönüştürücünün yazdığı test (genel options bloğu kısaltıldı). 60 sn ramp-up ve 360 sn süre, 1 dakikalık çıkış ve 5 dakikalık bekleme basamağına dönüştü:
{
"name": "Checkout",
"scenarios": [
{
"name": "shoppers",
"executor": {
"type": "ramping-vus",
"stages": [{"duration": "1m0s", "target": 50}, {"duration": "5m0s", "target": 50}]
},
"steps": [
{
"id": "list_items",
"name": "List items",
"protocol": "http",
"request": {
"method": "GET",
"url": "https://shop.example.com/api/items",
"body": {"type": "none"}
},
"checks": [{"name": "200", "type": "status", "op": "eq", "value": 200}],
"thinkTime": {"min": "1s"}
}
]
}
]
}Çevrilmeyenler
Bunlar raporda satırıyla listelenir; testi kaydetmeden önce Spitfire'daki karşılığıyla elle kurarsınız:
- If, Loop ve While Controller'lar: Spitfire adımları sırayla koşar, her iterasyon tüm akıştır.
- CSV Data Set Config: CSV'yi Veri dosyaları'na yükleyip teste bağlayın; sütunlar
{{kullanicilar.email}}gibi değişken olur (sıralı, rastgele ya da runner'lar arasında tekil). - HTTP dışı sampler'lar (JDBC, JMS…): Spitfire SQL, Kafka, MQTT, AMQP, Redis, MongoDB, gRPC ve WebSocket'i yerleşik destekler; adımı editörde ekleyin.
- JSR223 ve BeanShell betikleri: serbest kodun karşılığı yoktur; değişken çıkarma, kontroller ve şablon işlevleri çoğu durumu karşılar.
- Eklentiler ve sonucu dosyaya yazan listener'lar: sonuçlar koşu sayfasındadır; rapor PDF, HTML ya da CSV olarak iner.
Bir klasörün tamamı
Dosyadan aç'ta birden çok dosya seçerseniz toplu içe aktarma sayfası her birini çevirir, doğrular ve raporuyla listeler; seçtiklerinizi bir düğmeyle kaydedersiniz. Komut satırında bir klasör tek komutla çevrilir; her betik için bir test dosyası yazılır ve raporun her satırı CSV'ye düşer (dosya, test, satır, düzey, mesaj):
spitfire convert ./tests -o spitfire-tests/ -r report.csvSpitfire tek komutla Docker'a ya da Kubernetes'e kurulur; ücretsiz sürümde bütün test özellikleri ve protokoller açıktır.