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.
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 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.
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 mainadı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_durationiçinp(95)<500vereq_failediçinrate<0.01
En üstteki Test adı kutusuna anlamlı bir ad yazın (ör. "Ödeme akışı"). Ad zorunludur; boş bırakırsanız
name: zorunluhatası çıkar.Genel ve değişkenler sekmesine geçin. Değişkenler bölümünde
basevariable'ı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.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).
Adımlar başlığının altındaki ilk step kartında:
- Kartın başındaki metin kutusuna Adım adı yazın (ör. "Giriş").
- Protokol listesinde HTTP seçili kalsın.
- Metot listesinden metodu seçin (
GET,POST,PUT,PATCH,DELETE,HEAD,OPTIONS). - URL alanına adresi yazın:
{{base}}/api/login. - Gerekirse Header'lar, Query ve Body alt sekmelerini doldurun (ayrıntılar aşağıda, HTTP isteği).
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).
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.
Yeni step için Adım ekle'ye tıklayın ve 5–7. adımları tekrarlayın.
Eşikler (N) sekmesinde testin geçti/kaldı ölçütlerini gözden geçirin (bkz. Threshold tanımlamak).
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.
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.
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.
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:
- Protokol listesi: HTTP, WebSocket, SSE (olay akışı), gRPC, MQTT, RabbitMQ (AMQP), Kafka, Redis, SQL, MongoDB.
- 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: /connectionsbağ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. - Protokolün kendi formu (HTTP için aşağıda).
- 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ü.
- Üç alt sekme: Check, Değişken çıkar, Diğer.
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.
"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'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üğ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,:1parametrelerini 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:
- Değeri üretecek step'in kartında Değişken çıkar sekmesine tıklayın.
- Değişken ekle'ye tıklayın. Bir satır çıkar.
- Değişken adı kutusuna variable adını yazın (ör.
token). - Kaynak listesinden değerin nereden alınacağını seçin.
- İfade kutusuna kaynağa uygun ifadeyi yazın (aşağıdaki tablo).
- İsterseniz varsayılan kutusuna, değer bulunamazsa kullanılacak değeri yazın.
- Sonraki step'te
{{token}}yazın (ör. header değeriBearer {{token}}). - 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ı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çeriyorhatası 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:
- Step kartında Check sekmesine tıklayın (varsayılan açık sekmedir).
- Check ekle'ye tıklayın.
- Check türü listesinden türü seçin.
- JSON alanı, XML alanı ya da Header türlerinde Yol kutusuna yolu yazın.
- Operatör listesinden karşılaştırmayı seçin.
- 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ğer
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ği
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:
- Ö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. - Ortamlar sekmesinde Ortam ekle'ye tıklayın.
- Ortam adı'nı yazın: küçük harf, rakam,
-ve_, en çok 32 karakter (staging,prod-eu). - 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."
- 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. - 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.
- 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şlemesi
JSON'daki karşılığı:
"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. |
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:
- Başlığın altındaki sarı kutu: "N hata:" ve ilk dört hatanın yolu ve mesajı.
- Sekme adlarındaki kırmızı ünlem simgeleri.
- 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
- Sağ üstteki Kaydet (var olan testte Yeni sürüm olarak kaydet) düğmesine tıklayın.
- Test yeni bir sürüm olarak kaydedilir (v1, v2, …) ve test sayfasına geçilir.
- 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:
- JSON sekmesine geçin ve Kopyala'ya tıklayın (ya da metni bir yere yapıştırın).
- Sayfayı yenileyin; editör en güncel sürümle açılır.
- 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.
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:
- JSON sekmesine tıklayın.
- Metni düzenleyin (ya da başka bir yerden yapıştırın).
- Uygula'ya tıklayın. JSON geçersizse "Geçersiz JSON: …" yazar; içinde
scenariosdizisi yoksa ""scenarios" dizisi gerekli" yazar. - Form JSON'a göre güncellenir; canlı doğrulama hataları normal şekilde çıkar.
- 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 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).
{
"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:
loginstep'i"once": trueolduğu için her VU yalnız bir kez giriş yapar; token VU'nun bütün iteration'larında kullanılır.create_orderstep'inde"modifiesData": trueolduğu için koşu başlatılırken yazma onayı istenir.- Üçüncü threshold yalnız
create_orderstep'ine uygulanır (filter.stepstep 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.
- Hata kutusu olmadığından emin olun (hata varken Dene pasiftir).
- Doğru scenario'yu seçin.
- 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.
- 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ı
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ılarSpitfire'da: /connections· Veri dosyalarıSpitfire'da: /data-files


