Spitfire

Sürüm: 0.21.0Bu dokümantasyon Spitfire 0.21.0 içindir.

Test editörü

Test editörü, bir yük testinin ne yapacağını tanımladığınız ekrandır: hangi scenario'lar koşacak, her scenario'da hangi step'ler sırayla çalışacak, yanıtlardan hangi değerler alınıp sonraki step'lerde kullanılacak, hangi check'ler yanıtı doğrulayacak ve hangi threshold'lar koşunun geçti/kaldı kararını verecek. Yükün ne kadar olacağı (VU sayısı, istek hızı, aşamalar) da aynı ekranda tanımlanır; onu ayrıca Yük modeli sayfası anlatır.

Bu sayfa editörü baştan sona, sırasıyla anlatır. Örneklerde HTTP kullanılır; diğer protokoller (gRPC, Kafka, SQL…) aynı step yapısını, aynı extract, check ve think time alanlarını paylaşır.

Ne işe yarar

  • Testi kod yazmadan, form alanlarıyla tanımlarsınız; aynı tanımı istediğiniz an JSON olarak görebilir, düzenleyebilir ve CLI ile koşturabilirsiniz.
  • Her değişiklik yazarken sunucuda doğrulanır: hatalı alan kırmızıyla işaretlenir, hatalı test kaydedilemez.
  • Dene düğmesi, testi yük uygulamadan tek bir iterasyonla gerçek sisteme gönderir; her step'in request'ini, response'unu, check sonuçlarını ve çıkarılan variable'ları gösterir.
  • Kaydet testi yeni bir sürüm olarak saklar. Eski sürümler silinmez; test sayfasındaki Sürüm geçmişi'nden farkı görülebilir ve geri yüklenebilir.

Ne zaman kullanılır

  • Yeni bir test oluştururken (Testler → Yeni test).
  • Var olan bir testi değiştirirken (test sayfasında Düzenle).
  • k6 betiği, JMeter planı, OpenAPI/Postman/HAR ya da trafik kaydından içe aktarılan bir testi kaydetmeden önce gözden geçirirken (içe aktarma editörde açılır).
  • Bir koşu beklenmedik hatalar verdiğinde, yükü başlatmadan önce Dene ile tek iterasyonu adım adım incelemek için.
Not

Kaydetmek koşu başlatmaz. Editörün üstünde de yazdığı gibi: "Kaydetmek testi yeni bir sürüm olarak saklar; koşu başlatmaz. Koşuyu test sayfasından başlatın." Koşu başlatmak için bkz. Koşu ve sonuçlar.

Editörün yerleşimi

Editör yukarıdan aşağıya şu parçalardan oluşur:

Yer Ne var
Sağ üst Dene (tek iterasyon) ve Kaydet (yeni testte) ya da Yeni sürüm olarak kaydet (var olan testte)
Başlığın altı Doğrulama hataları varsa sarı kutu: "N hata:" ve ilk dört hatanın yolu
Büyük metin kutusu Test adı
Sekmeler Senaryolar ve adımlar, Eşikler (N), Genel ve değişkenler, Ortamlar, Seçenekler, JSON

Hata içeren sekmenin adının yanında kırmızı bir ünlem simgesi çıkar; hangi sekmeye bakmanız gerektiğini buradan anlarsınız.

Test editörü: sekmeler, senaryo düğmeleri, yük modeli ve ilk stepTest editörü: sekmeler, senaryo düğmeleri, yük modeli ve ilk step

Adım adım ilk testinizi oluşturmak

Aşağıdaki sıra, boş bir testten çalışan ve kaydedilmiş bir teste giden en kısa yoldur.

  1. Sol menüden Testler'e gidin ve sağ üstteki Yeni test'e tıklayın (Testler Spitfire'da: /tests). Editör hazır bir iskeletle açılır:

    • Test adı: "Yeni test"
    • Genel ve değişkenler sekmesinde bir variable: base = https://example.com
    • main adında bir scenario; yük modeli Kademeli VU (ramping-vus): 30 saniyede 10 VU'ya çık, 1 dakika 10 VU'da kal, 10 saniyede 0'a in
    • "Ana sayfa" adında bir HTTP step'i: GET {{base}}/ ve bir check: durum = 200
    • İki threshold: req_duration için p(95)<500 ve req_failed için rate<0.01

    Yeni test: editörün açıldığı hazır iskeletYeni test: editörün açıldığı hazır iskelet

  2. En üstteki Test adı kutusuna anlamlı bir ad yazın (ör. "Ödeme akışı"). Ad zorunludur; boş bırakırsanız name: zorunlu hatası çıkar.

  3. Genel ve değişkenler sekmesine geçin. Değişkenler bölümünde base variable'ının değerini test edeceğiniz sistemin adresiyle değiştirin (ör. https://shop.staging.example.com). Sonda / olmadan yazın; step'lerde {{base}}/api/... biçiminde kullanacaksınız.

  4. Senaryolar ve adımlar sekmesine dönün. Yük başlığı altında yük modelini seçin ve değerleri girin. Hangi modeli seçeceğinizi bilmiyorsanız önce Yük modeli bölümüne bakın. İlk deneme için küçük tutun (ör. 5 VU, 1 dakika).

  5. Adımlar başlığının altındaki ilk step kartında:

    1. Kartın başındaki metin kutusuna Adım adı yazın (ör. "Giriş").
    2. Protokol listesinde HTTP seçili kalsın.
    3. Metot listesinden metodu seçin (GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS).
    4. URL alanına adresi yazın: {{base}}/api/login.
    5. Gerekirse Header'lar, Query ve Body alt sekmelerini doldurun (ayrıntılar aşağıda, HTTP isteği).
  6. Aynı kartın altındaki Check sekmesinde yanıtın doğru olduğunu nasıl anlayacağınızı tanımlayın (hazırda "durum = 200" vardır).

  7. Bu step'in yanıtından bir değer (ör. token) sonraki step'lerde lazımsa Değişken çıkar sekmesine geçip Değişken ekle ile bir extract tanımlayın.

  8. Yeni step için Adım ekle'ye tıklayın ve 5–7. adımları tekrarlayın.

  9. Eşikler (N) sekmesinde testin geçti/kaldı ölçütlerini gözden geçirin (bkz. Threshold tanımlamak).

  10. Sarı hata kutusu yoksa sağ üstteki Dene'ye tıklayın. Açılan Deneme (1 VU, 1 iterasyon) penceresinde her step'in request, response, check ve extract sonucunu kontrol edin.

  11. Her şey doğruysa Kaydet'e tıklayın. Test kaydedilir ve test sayfası açılır. Koşuyu oradan Çalıştır ile başlatırsınız.

İpucu

Kaydet düğmesi hata varken pasiftir. Fareyle Dene'nin üstüne geldiğinizde "Önce hataları düzeltin" yazıyorsa sarı hata kutusundaki yolları okuyun: scenarios[0].steps[1].request.url "ilk scenario'nun ikinci step'inin URL alanı" demektir (sayım 0'dan başlar).

Scenario yapısı

Bir test bir ya da daha çok scenario'dan oluşur. Senaryolar ve adımlar sekmesinin en üstünde her scenario için bir düğme vardır (ör. main); seçili olan mavi doludur. Düğmelerin yanındaki artı simgeli Senaryo düğmesi yeni bir scenario ekler (scenario_2, scenario_3… adıyla, Sabit VU 5 VU / 1 dakika ve tek bir HTTP step'iyle).

Her scenario'nun kendi alanları vardır:

Alan Ne yapar
Senaryo adı Scenario'nun adı. Yalnız harf, rakam ve _ içerebilir, rakamla başlayamaz (checkout, browse_catalog). Tire (-) kullanılamaz. Test içinde tekil olmalıdır.
Başlama gecikmesi Koşu başladıktan ne kadar sonra bu scenario'nun başlayacağı (startTime, ör. 30s). Boş = hemen.
Senaryoyu sil Yalnız birden çok scenario varsa görünür.
Yük Bu scenario'nun yük modeli (executor). Bkz. Yük modeli.
Adımlar Her iterasyonda sırayla çalışan step'ler.

Ekrandaki ipucu da bunu söyler: "Senaryolar aynı anda koşar; her birinin kendi yük modeli vardır." Örneğin bir scenario katalogda gezinen çok sayıda kullanıcıyı, ikinci bir scenario ödeme yapan az sayıda kullanıcıyı temsil edebilir.

Iteration kavramı: bir VU, scenario'nun bütün step'lerini baştan sona bir kez çalıştırdığında bir iteration tamamlanmış olur. Sonra (yük modeline göre) yenisine başlar.

Not

Spitfire'da koşullu dallanma (if), döngü ya da step grubu yoktur. Her iteration, scenario'nun step'lerini yukarıdan aşağıya sırayla çalıştırır. Farklı akışlar için ayrı scenario'lar tanımlayın; bir kez yapılacak işler (giriş) için VU başına bir kez çalıştır seçeneğini kullanın (bkz. Think time ve VU başına bir kez). k6/JMeter'dan içe aktarılan testlerde döngü ve koşullar çeviri raporunda "çevrilmedi" olarak listelenir.

Step yapısı

Her step bir karttır. Kartın başlık satırında soldan sağa: aç/kapat oku, sıra numarası, Adım adı, protokol rozeti, kısa özet (HTTP için METOT URL), varsa "bir kez" rozeti ve sağda Yukarı, Aşağı, Adımı sil düğmeleri bulunur. Step'te hata varsa kartın kenarı kırmızı olur ve başlıkta ünlem simgesi çıkar.

Kartın içinde:

  1. Protokol listesi: HTTP, WebSocket, SSE (olay akışı), gRPC, MQTT, RabbitMQ (AMQP), Kafka, Redis, SQL, MongoDB.
  2. HTTP, WebSocket ve SSE dışındaki protokollerde Bağlantı listesi (adres ve parolalar step'te değil, Bağlantılar sayfasındaki kayıtlı bağlantıda durur). Uygun bağlantı yoksa "Bu protokol için bağlantı yok." yazar ve Bağlantı oluştur Spitfire'da: /connections bağlantısı çıkar. HTTP/WS/SSE için kayıtlı bir mTLS bağlantısı varsa bunun yerine İstemci sertifikası (mTLS) listesi görünür.
  3. Protokolün kendi formu (HTTP için aşağıda).
  4. Kullanılabilecek variable'ların listesi: "{{değişken}} ile değişken kullanın: … Hazır: {{__VU}} {{__ITER}} {{$uuid}} {{$randInt 1 100}} {{$timestamp}}" ve açılabilir Sentetik test verisi (fake.…) bölümü.
  5. Üç alt sekme: Check, Değişken çıkar, Diğer.
Dikkat

Protokolü değiştirmek step'in protokole özgü alanlarını varsayılanlara sıfırlar ve check'leri o protokolün başarılı durumuna ("200", "OK" ya da "ok") göre yeniden kurar. Step adı, extract'ler ve think time korunur.

Her step'in bir de step kimliği (id) vardır. Editör onu step adından otomatik üretir ve Diğer sekmesinin altında "Adım kimliği (eşik filtreleri için)" olarak gösterir. Bu kimlik threshold filtrelerinde ve sonuç tablolarında step'i tanımlar; test içinde tekil olmalıdır. Elle değiştirmek isterseniz JSON sekmesini kullanın.

HTTP isteği

HTTP formu şu alanlardan oluşur:

Alan Açıklama
Metot GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS.
URL Tam adres ya da variable içeren bir template: {{base}}/api/items/{{id}}. Variable içermeyen bir URL http:// ya da https:// ile başlamalıdır.
Bu istek hedefte veri değiştirir İşaretliyse her koşudan (ve Dene'den) önce yazma onayı istenir. API dokümanından içe aktarılan GET dışı step'ler işaretli gelir.
Header'lar alt sekmesi Anahtar/değer satırları; Header ekle. Değer template olabilir (Bearer {{token}}).
Query alt sekmesi URL'ye eklenecek query parametreleri; Parametre ekle.
Body alt sekmesi Body türü: Yok, JSON, XML, Form (urlencoded), Form (multipart / dosya), Ham.

Body türleri:

  • JSON / XML / Ham: metin alanına body'yi yazarsınız; template kullanabilirsiniz. JSON body'de {{…}} yoksa sunucu JSON'un geçerli olduğunu da denetler.
  • Form (urlencoded): Alan ekle ile anahtar/değer satırları.
  • Form (multipart / dosya): Parça ekle ile alanlar. Bir parçaya Dosya adı (dosyaysa) verirseniz dosya olarak gönderilir; ikili dosya için Değer base64 (ikili dosya) kutusunu işaretleyip değeri base64 olarak yapıştırın.
İpucu

"Content-Type header'ı verilmezse body türüne göre eklenir." JSON body için ayrıca Content-Type: application/json yazmanız gerekmez.

HTTP step'i ne zaman "hatalı" sayılır (req_failed): bağlantı kurulamazsa, zaman aşımına uğrarsa ya da durum kodu 400 ve üstündeyse. İstisna: step'te "Durum = X" ya da "Durum şunlardan biri X, Y" check'i varsa, Spitfire o kodları beklenen kabul eder. Örneğin 404 bekleyen bir check'iniz varsa 404 yanıtı hata oranına sayılmaz; 200 yanıtı ise sayılır.

HTTP step'i: metot, URL, Header'lar / Query / Body ve check'lerHTTP step'i: metot, URL, Header'lar / Query / Body ve check'ler

Variable ve template kullanımı

Step alanlarının çoğu (URL, header ve query değerleri, body, gRPC mesajı, Kafka değeri, SQL parametreleri…) template'tir: içine {{…}} ile değer yerleştirirsiniz ve bu değer her request'te yeniden hesaplanır.

Test variable tanımlamak

Genel ve değişkenler sekmesindeki Değişkenler bölümünde tanımlanır (Değişken ekle). Ekrandaki ipucu: "Adımlarda {{ad}} ile kullanılır. Ortam değiştirmek için (ör. base URL) tek yer."

  • Ad yalnız harf, rakam ve _ içerebilir, rakamla başlayamaz (base, api_key).
  • Değer düz metindir; test tanımında (ve JSON'da, sürüm geçmişinde) görünür.
  • Bir variable'ın değerini ortama göre değiştirmek için Ortamlar, tek bir koşu için değiştirmek için Çalıştır penceresindeki Değişkenleri bu koşu için değiştir kullanılır.

Bir template'in kullanabileceği isimler şunlardır: test variable'ları, data dosyalarının sütunları ({{users.email}}, bkz. Veri) ve daha önceki step'lerde extract ile çıkarılan variable'lar. Bunların dışındaki bir isim bilinmeyen değişken {isim} hatası verir.

Hazır değerler

Yazım Değer
{{__VU}} VU'nun numarası (1'den başlar, bütün runner'larda tekil)
{{__ITER}} O VU'nun iteration sayacı (0'dan başlar)
{{$uuid}} Rastgele bir UUID (v4)
{{$timestamp}} Şu anki zaman, Unix milisaniye
{{$isoTimestamp}} Şu anki zaman, RFC 3339 (UTC)
{{$randInt 1 100}} 1 ile 100 arasında (ikisi dahil) rastgele tam sayı
{{$randString 12}} 12 karakterlik rastgele harf/rakam (0–4096)
{{fake.tckn}}, {{fake.iban}}, … Sentetik Türkçe test verisi; listesi Veri sayfasında

Step kartındaki Sentetik test verisi (fake.…) başlığını açtığınızda her fake data türü için bir düğme çıkar; tıklamak {{fake.…}} yazımını panoya kopyalar.

Step kartında hazır değerler ve fake data düğmeleriStep kartında hazır değerler ve fake data düğmeleri

Template kuralları

  • {{ açıp }} ile kapatmayı unutursanız: şablon hatası: unterminated {{ at offset N.
  • Bilinmeyen bir $ fonksiyonu ({{$random}}) şablon hatasıdır.
  • {{$randInt 10 1}} (en büyük < en küçük) şablon hatasıdır.
  • Değeri olmayan bir variable (ör. extract'i bulamamış bir değer) boş metin olarak yazılır.
  • SQL'de değerler sorgu metnine yazılamaz; $1, ?, @p1, :1 parametrelerini kullanın ve template'i parametre değerine koyun.

Extract ile değer çıkarma

Bir step'in response'undan bir değer alıp sonraki step'lerde {{ad}} olarak kullanmanızı sağlar. Tipik örnek: giriş step'inden token almak.

Adım adım:

  1. Değeri üretecek step'in kartında Değişken çıkar sekmesine tıklayın.
  2. Değişken ekle'ye tıklayın. Bir satır çıkar.
  3. Değişken adı kutusuna variable adını yazın (ör. token).
  4. Kaynak listesinden değerin nereden alınacağını seçin.
  5. İfade kutusuna kaynağa uygun ifadeyi yazın (aşağıdaki tablo).
  6. İsterseniz varsayılan kutusuna, değer bulunamazsa kullanılacak değeri yazın.
  7. Sonraki step'te {{token}} yazın (ör. header değeri Bearer {{token}}).
  8. Dene ile doğrulayın: deneme penceresinde step'in altında "Çıkarılan: token=…" görünmeli; bulunamadıysa kırmızıyla "Bulunamadı: token" yazar.
Kaynak İfade örneği Ne alır
JSONPath $.data.token, $.items[0].id JSON body'deki ilk eşleşme (metin olduğu gibi, sayı sayı olarak, nesne/dizi sıkıştırılmış JSON olarak)
XPath (XML) //token, count(//item) XML body'deki ilk düğümün metni ya da ifadenin değeri
Regex id=(\d+) Body'de regex'in ilk eşleşmesindeki grup (grup varsa varsayılan 1. grup)
Header / metadata X-Request-Id, Location HTTP header'ı (büyük/küçük harf duyarsız), gRPC metadata'sı ya da mesaj header'ı
Durum (boş) Durum: HTTP'de 200 gibi kod, gRPC'de OK gibi ad

Değişken çıkar sekmesi: değişken adı, kaynak, ifade ve varsayılanDeğişken çıkar sekmesi: değişken adı, kaynak, ifade ve varsayılan

Bilmeniz gerekenler:

  • Extract edilen variable, aynı iteration'daki sonraki step'lerde ve VU'nun sonraki iteration'larında kullanılabilir. Editör, bir step'te kullanabileceğiniz variable'ları step kartındaki yardım satırında listeler (yalnız önceki step'lerde çıkarılanlar görünür).
  • Bir değer bu sefer bulunamazsa önceki iteration'dan kalan değer kullanılmaz: variable varsayılan değerine, varsayılan yoksa testteki aynı adlı variable'ın değerine (o da yoksa boş metne) döner. Böylece süresi geçmiş bir token sonraki istekleri yanlışlıkla başarılı göstermez.
  • Regex'te olmayan bir grubu isterseniz regex yalnızca N grup içeriyor hatası alırsınız.
  • Response body'leri saklamama seçeneği (Seçenekler → Response body'lerini saklama) extract'i bozmaz; body okuyan step'ler etkilenmez.

Check tanımlamak

Check, response'un doğru olup olmadığını denetler. Ekrandaki yardım metni önemli bir kuralı söyler: "Başarısız check iterasyonu durdurmaz; "checks" oranına sayılır. Eşik koyarak testi düşürebilirsiniz." Yani başarısız bir check'ten sonra iteration'ın kalan step'leri yine çalışır; testi kırmızıya çevirmek için checks metriğine bir threshold koyarsınız (ör. rate>0.99).

Adım adım:

  1. Step kartında Check sekmesine tıklayın (varsayılan açık sekmedir).
  2. Check ekle'ye tıklayın.
  3. Check türü listesinden türü seçin.
  4. JSON alanı, XML alanı ya da Header türlerinde Yol kutusuna yolu yazın.
  5. Operatör listesinden karşılaştırmayı seçin.
  6. Değer kutusuna beklenen değeri yazın. "şunlardan biri" için virgülle ayırın: 200, 201.
Check türü Yol Operatörler Örnek
Durum — =, ≠, <, şunlardan biri = 200; şunlardan biri 200, 201
Yanıt süresi (ms) — <, ≤ < 800
Body içerir — içerir, içermez içerir "orderId"
JSON alanı $.status =, ≠, >, ≥, <, ≤, içerir, var, şunlardan biri $.status = "PAID"
XML alanı (XPath) /order/total =, ≠, >, ≥, <, ≤, içerir, var /order/total > 0
Header / metadata Content-Type =, içerir, var Content-Type içerir json
Satır sayısı (SQL/Mongo) — =, ≠, >, ≥, <, ≤ ≥ 1

Header türü HTTP, gRPC, AMQP ve Kafka step'lerinde; Satır sayısı yalnız SQL ve MongoDB step'lerinde listelenir.

Check'in bir adı vardır; boş bırakırsanız otomatik üretilir (status == 200, latency < 800ms, $.status == PAID). Bu ad koşu sayfasının Check'ler kartında görünür ve threshold filtrelerinde kullanılır.

Check sekmesi: check türü, yol, operatör ve değerCheck sekmesi: check türü, yol, operatör ve değer

İpucu

Değer kutusuna yazdığınız metin JSON olarak okunabiliyorsa öyle okunur: 200 sayı, "200" metin, true mantıksal değerdir. Sayısal karşılaştırmalar her iki taraf da sayıysa sayısal, değilse metin olarak yapılır.

Think time ve VU başına bir kez

Step kartındaki Diğer sekmesinde iki ayar vardır:

  • VU başına bir kez çalıştır: step, her VU'nun yalnız ilk iteration'ında çalışır. "Giriş gibi adımlar için. Başarısız olursa sonraki iterasyonda yeniden denenir." Başarılı sayılması için hem request'in hata vermemesi hem de bütün extract'lerinin değer bulması gerekir. Başlıkta "bir kez" rozeti görünür. Cookie'ler VU başına tutulduğu için (varsayılan), girişte alınan oturum cookie'si sonraki iteration'larda da gönderilir.
  • Düşünme süresi (adımdan sonra bekleme): step bittikten sonra VU'nun bekleyeceği süre, yani think time. İki kutu vardır: en az (1s) ve en çok (3s). İkisi de doluysa bekleme bu aralıkta rastgele seçilir; yalnız "en az" doluysa sabittir. Gerçek kullanıcıların sayfalar arasında beklemesini taklit eder.

Diğer sekmesi: VU başına bir kez, think time ve step kimliğiDiğer sekmesi: VU başına bir kez, think time ve step kimliği

Dikkat

Think time, kapalı modellerde (constant-vus, ramping-vus) VU başına request hızını düşürür. Açık modellerde (*-arrival-rate) iteration'lar zaman çizelgesiyle başladığı için uzun think time daha çok VU gerektirir; VU yetmezse iteration'lar düşer. Bkz. Yük modeli.

Ortamlar

Ortamlar sekmesi aynı testi farklı ortamlara (staging, production…) karşı koşturmanızı sağlar: "her ortam bazı değişkenlerin değerini ve adımların kullandığı bağlantıları değiştirir. Ortam koşu ya da zamanlama başlatılırken seçilir."

Adım adım:

  1. Önce Genel ve değişkenler sekmesinde ortama göre değişecek variable'ları tanımlayın (ör. base). Ortam yalnız testte var olan variable'ları değiştirebilir.
  2. Ortamlar sekmesinde Ortam ekle'ye tıklayın.
  3. Ortam adı'nı yazın: küçük harf, rakam, - ve _, en çok 32 karakter (staging, prod-eu).
  4. Değişkenler bölümünde bu ortamda farklı olacak değerleri girin. "Boş bırakılan değişken testteki değeriyle kalır."
  5. Bağlantılar bölümünde, step'lerin kullandığı kayıtlı bağlantıları bu ortamdaki karşılığıyla eşleyin (ör. orders-db → orders-db-staging). Yalnız aynı türden bir bağlantı seçilebilir. Hiçbir step kayıtlı bağlantı kullanmıyorsa "Hiçbir adım kayıtlı bir bağlantı kullanmıyor." yazar.
  6. Eşdeğerlik (karşılaştırmalı koşu) ve Sürüm endpoint'i (isteğe bağlı) bölümleri yalnız karşılaştırmalı (A/B) koşular içindir; normal koşu için boş bırakabilirsiniz.
  7. Kaydedin. Çalıştır penceresinde Ortam ve ölçek → Ortam listesinde bu ortam çıkar.

Ortamlar sekmesi: ortam adı, variable değerleri ve bağlantı eşlemesiOrtamlar sekmesi: ortam adı, variable değerleri ve bağlantı eşlemesi

JSON'daki karşılığı:

json
"variables": { "base": "https://shop.example.com" },
"environments": {
  "staging": {
    "variables": { "base": "https://shop.staging.example.com" },
    "connections": { "orders-db": "orders-db-staging" }
  }
}

Seçenekler

Seçenekler sekmesi testin bütününe uygulanan ayarları tutar. Çoğu testte varsayılanlar yeterlidir.

Ayar Varsayılan Ne zaman değiştirilir
İstek zaman aşımı 30s Hedef yavaşsa ve 30 saniyeden uzun yanıtlar normalse. Aşılan request "zaman aşımı" hatası sayılır.
Durdurmada bekleme (gracefulStop) 30s Durdurulan ya da süresi biten koşuda süren iteration'ların bitmesi için verilen süre.
HTTP sürümü Otomatik (HTTP/2 varsa) Yalnız HTTP/1.1 ya da HTTP/2'ye zorlamak için.
En çok yönlendirme 10 Yönlendirmeleri hiç izlememek için 0.
Runner kaybında Koşuyu durdur Kalanlarla devam et (yük azalır): bir runner koparsa koşu sürer ama toplam yük düşer.
Cookie'ler Her VU'nun kendi oturumu (önerilen) Kapalı: yalnız step'in kendi Cookie header'ı gönderilir.
Hatalı yanıt örnekleri Açık Response'larda saklanmaması gereken veri varsa Kapalı.
traceparent header'ı Kapalı Sistemin trace'leriyle birleştirme (Backend sekmesi) için Açık.
User-Agent spitfire/1 Hedef User-Agent'a göre davranıyorsa.
TLS sertifikasını doğrulama kapalı Yalnız kendinden imzalı sertifikalı test ortamlarında. Üretimde kapalı tutun.
Response body'lerini saklama kapalı Çok yüksek yükte bellek için; extract ve body check'leri etkilenmez.
Bağlantıları hiç yeniden kullanma kapalı Her request yeni TCP/TLS bağlantısı açar; kaynak port tükenebilir.
İterasyonlar arası bağlantı kapat kapalı Her iteration'ın yeni bir kullanıcı gibi bağlanması gerekiyorsa.

Seçenekler sekmesiSeçenekler sekmesi

Doğrulama ve kaydetme

Canlı doğrulama

Editör her değişiklikten kısa bir süre (yaklaşık 0,6 saniye) sonra tanımı sunucuya doğrulatır ve yük planını yeniden çizer. Sonuç üç yerde görünür:

  1. Başlığın altındaki sarı kutu: "N hata:" ve ilk dört hatanın yolu ve mesajı.
  2. Sekme adlarındaki kırmızı ünlem simgeleri.
  3. Hatalı alanın hemen altındaki kırmızı mesaj.

Ayrıca test veri değiştiren işlemler içeriyorsa (HTTP step'inde Bu istek hedefte veri değiştirir, SQL/Mongo yazmaları, tehlikeli Redis komutları) kırmızı bir kutu çıkar: "Bu test veriyi değiştiriyor. Koşu ve deneme başlatılırken ayrıca onay istenir." Bu bir hata değil, uyarıdır; test kaydedilebilir.

Kaydetmek

  1. Sağ üstteki Kaydet (var olan testte Yeni sürüm olarak kaydet) düğmesine tıklayın.
  2. Test yeni bir sürüm olarak kaydedilir (v1, v2, …) ve test sayfasına geçilir.
  3. Koşu başlatmak için test sayfasında Çalıştır'a tıklayın.

Kaydetmeden sayfadan çıkmaya çalışırsanız Kaydedilmemiş değişiklikler penceresi açılır: "Bu testte kaydetmediğiniz değişiklikler var. Sayfadan çıkarsanız kaybolurlar." Kaydetmeden çık değişiklikleri atar; Vazgeç editöre döner.

Aynı testi iki kişi düzenlerse

Siz editörü açtıktan sonra başka biri aynı testi kaydettiyse sizin kaydınız reddedilir: "Siz açtıktan sonra bu testi başka biri kaydetti. Değişikliklerinizi kopyalayın (JSON sekmesi), sayfayı yenileyip yeniden uygulayın." Böyle bir durumda:

  1. JSON sekmesine geçin ve Kopyala'ya tıklayın (ya da metni bir yere yapıştırın).
  2. Sayfayı yenileyin; editör en güncel sürümle açılır.
  3. Değişikliklerinizi yeniden yapın (ya da JSON'u yapıştırıp Uygula deyin; bu durumda öbür kişinin değişikliklerini ezmediğinizden emin olun).

Sürüm geçmişi

Test sayfasının altındaki Sürüm geçmişi (güncel: vN) başlığına tıklayınca bütün sürümler listelenir:

  • Güncelle farkı: o sürümle güncel sürüm arasındaki farkı satır satır gösterir.
  • Bu sürüme dön: o sürümün tanımını yeni bir sürüm olarak kaydeder; geçmiş ve koşular olduğu gibi kalır. Tanım bugünkü kurallara uymuyorsa (ör. silinmiş bir bağlantıyı kullanıyorsa) geri yükleme reddedilir.

Test sayfasında sürüm geçmişiTest sayfasında sürüm geçmişi

JSON görünümü

JSON sekmesi testin tamamını gösterir: "Tanımın tamamı. Düzenleyip "Uygula" deyin; form buna göre güncellenir. CLI ile aynı biçim: spitfire run test.json".

Adım adım:

  1. JSON sekmesine tıklayın.
  2. Metni düzenleyin (ya da başka bir yerden yapıştırın).
  3. Uygula'ya tıklayın. JSON geçersizse "Geçersiz JSON: …" yazar; içinde scenarios dizisi yoksa ""scenarios" dizisi gerekli" yazar.
  4. Form JSON'a göre güncellenir; canlı doğrulama hataları normal şekilde çıkar.
  5. Kaydetmek için yine Kaydet'e tıklayın. Uygula tek başına kaydetmez.

Kopyala düğmesi metni panoya alır. Formda olmayan alanlar (ör. step kimliği, threshold'larda scenario ya da check filtresi) yalnız buradan düzenlenir.

JSON sekmesi: tanımın tamamı, Uygula ve KopyalaJSON sekmesi: tanımın tamamı, Uygula ve Kopyala

Süreler metin olarak yazılır: "500ms", "30s", "1m30s", "2h". Elle yazılmış bir JSON'da çıplak sayı milisaniye sayılır (500 = yarım saniye).

Tam örnek

Aşağıdaki test üç step'li bir alışveriş akışıdır: her VU bir kez giriş yapar ve token'ı alır, ürünleri listeler, ilk ürünün kimliğini alır ve bir sipariş oluşturur. JSON sekmesine yapıştırıp Uygula diyebilirsiniz (base adresini kendi sisteminizle değiştirin).

json
{
  "version": 1,
  "name": "Ödeme akışı",
  "variables": {
    "base": "https://shop.example.com",
    "password": "Test1234!"
  },
  "options": { "timeout": "30s" },
  "scenarios": [
    {
      "name": "checkout",
      "executor": {
        "type": "ramping-vus",
        "startVUs": 0,
        "stages": [
          { "duration": "1m", "target": 20 },
          { "duration": "3m", "target": 20 },
          { "duration": "30s", "target": 0 }
        ]
      },
      "steps": [
        {
          "id": "login",
          "name": "Giriş",
          "once": true,
          "protocol": "http",
          "request": {
            "method": "POST",
            "url": "{{base}}/api/login",
            "body": {
              "type": "json",
              "content": "{\"email\": \"vu{{__VU}}@example.com\", \"password\": \"{{password}}\"}"
            }
          },
          "extract": [
            { "var": "token", "from": "jsonpath", "expr": "$.token" }
          ],
          "checks": [
            { "type": "status", "op": "eq", "value": 200 },
            { "type": "jsonPath", "path": "$.token", "op": "exists" }
          ]
        },
        {
          "id": "list_products",
          "name": "Ürünleri listele",
          "protocol": "http",
          "request": {
            "method": "GET",
            "url": "{{base}}/api/products",
            "headers": [ { "key": "Authorization", "value": "Bearer {{token}}" } ],
            "query": [ { "key": "page", "value": "{{$randInt 1 5}}" } ]
          },
          "extract": [
            { "var": "productId", "from": "jsonpath", "expr": "$.items[0].id", "default": "1" }
          ],
          "checks": [
            { "type": "status", "op": "eq", "value": 200 },
            { "type": "latency", "op": "lt", "value": 800 }
          ],
          "thinkTime": { "min": "1s", "max": "3s" }
        },
        {
          "id": "create_order",
          "name": "Sipariş oluştur",
          "protocol": "http",
          "request": {
            "method": "POST",
            "url": "{{base}}/api/orders",
            "headers": [
              { "key": "Authorization", "value": "Bearer {{token}}" },
              { "key": "Idempotency-Key", "value": "{{$uuid}}" }
            ],
            "body": {
              "type": "json",
              "content": "{\"productId\": \"{{productId}}\", \"quantity\": 1}"
            },
            "modifiesData": true
          },
          "checks": [
            { "type": "status", "op": "in", "value": [200, 201] },
            { "type": "jsonPath", "path": "$.status", "op": "eq", "value": "CREATED" }
          ]
        }
      ]
    }
  ],
  "thresholds": [
    { "metric": "req_duration", "expr": "p(95)<500" },
    { "metric": "req_failed", "expr": "rate<0.01" },
    { "metric": "req_duration", "filter": { "step": "create_order" }, "expr": "p(95)<800" },
    { "metric": "checks", "expr": "rate>0.99" }
  ]
}

Bu örnekte dikkat edilecekler:

  • login step'i "once": true olduğu için her VU yalnız bir kez giriş yapar; token VU'nun bütün iteration'larında kullanılır.
  • create_order step'inde "modifiesData": true olduğu için koşu başlatılırken yazma onayı istenir.
  • Üçüncü threshold yalnız create_order step'ine uygulanır (filter.step step kimliğidir, step adı değil).
  • Kendi sisteminizdeki JSON alan adları farklıysa ($.token, $.items[0].id, $.status) Dene ile gerçek response'u görüp ifadeleri ona göre düzeltin.

Dene ile tek iterasyon denemek

Dene testi yük uygulamadan, seçili scenario'dan 1 VU ile 1 iteration olarak gerçek sisteme gönderir. Hangi scenario'nun denendiği, Senaryolar ve adımlar sekmesinde seçili scenario düğmesine göre belirlenir.

  1. Hata kutusu olmadığından emin olun (hata varken Dene pasiftir).
  2. Doğru scenario'yu seçin.
  3. Dene'ye tıklayın. Test veri değiştiriyorsa önce Veri değiştiren deneme penceresi açılır ve hangi işlemlerin veri değiştireceği listelenir; devam etmek için Anladım, dene'ye tıklayın.
  4. Deneme (1 VU, 1 iterasyon) penceresinde her step için şunları okuyun: durum ve süre, check sonuçları (başarısızsa "gelen" değerle), Çıkarılan variable'lar, Bulunamadı listesi, İstek ve Yanıt (header'lar ve body). En altta Son VU değişkenleri listelenir.

Deneme penceresi: step'lerin request, response, check ve extract sonuçlarıDeneme penceresi: step'lerin request, response, check ve extract sonuçları

Sık karşılaşılan sorunlar

Belirti Neden Çözüm
scenarios[0].name: harf, rakam veya _ olmalı ve rakamla başlamamalı Scenario adında tire, boşluk ya da Türkçe karakter var ya da ad rakamla başlıyor. checkout-flow yerine checkout_flow yazın. Aynı kural variable ve extract adları için de geçerlidir.
...request.url: tam bir http(s) adresi olmalı URL'de variable yok ve http:///https:// ile başlamıyor. Adresi tam yazın ya da {{base}}/yol kullanın ve base'i tam adres olarak tanımlayın.
bilinmeyen değişken {token} Variable tanımlı değil ya da sonraki bir step'te çıkarılıyor. Variable'ı Genel ve değişkenler'de tanımlayın ya da extract'i bu step'ten önceki bir step'e koyun. Yazımı kontrol edin (büyük/küçük harf duyarlı).
şablon hatası: unterminated {{ at offset 12 {{ açılmış ama }} ile kapatılmamış. Template'i düzeltin.
geçersiz JSON: … (body) JSON body'de virgül, tırnak hatası. Body'de {{ yoksa sunucu JSON'u denetler. JSON'u düzeltin; metin içine variable koyuyorsanız tırnak içinde yazın: "id": "{{productId}}".
geçersiz JSONPath: … İfade $ ile başlamıyor ya da sözdizimi hatalı. $.data.token, $.items[0].id biçimini kullanın.
'şunlardan biri' için liste gerekli Operatör şunlardan biri ama tek değer girilmiş. Değerleri virgülle ayırın: 200, 201.
{op} operatörü burada geçersiz Check türüyle uyumsuz operatör (ör. Durum için içerir). Tabloda o tür için listelenen operatörlerden birini seçin.
yinelenen değer: login İki step'in kimliği ya da iki scenario'nun adı aynı. JSON sekmesinde step id'lerinden birini değiştirin.
{protocol} için bir bağlantı seçilmeli HTTP/WS/SSE dışı step'te Bağlantı seçilmemiş. Listeden bir bağlantı seçin; yoksa Bağlantı oluştur.
Dene'de "Bulunamadı: token" Extract ifadesi gerçek response'la eşleşmiyor ya da step hata verdi. Deneme penceresinde Yanıt body'sine bakın ve ifadeyi ona göre düzeltin.
Kaydet düğmesi pasif Doğrulama hatası var. Sarı kutudaki ve sekmelerdeki kırmızı işaretleri izleyip düzeltin.
"Siz açtıktan sonra bu testi başka biri kaydetti…" Eşzamanlı düzenleme. Aynı testi iki kişi düzenlerse bölümündeki adımları izleyin.
Başarısız check'ler var ama koşu "Geçti" Check'ler iteration'ı durdurmaz ve kendi başına koşuyu düşürmez. checks metriğine threshold ekleyin: rate>0.99.

İlgili sayfalar

  • Yük modeli: executor'lar, aşamalar, threshold'lar ve kapasite testi.
  • Veri: CSV data dosyaları, fake data ve step'ler arası değer taşıma.
  • Koşu ve sonuçlar: koşu başlatma, canlı izleme, sonuçları okuma ve rapor.
  • Testler Spitfire'da: /tests · Bağlantılar Spitfire'da: /connections · Veri dosyaları Spitfire'da: /data-files