Sürüm: 0.21.0Bu dokümantasyon Spitfire 0.21.0 içindir.
HTTP, WebSocket ve SSE
HTTP(S), WebSocket ve Server-Sent Events (SSE) adımları adresi doğrudan adımda taşır; bu yüzden bir connection gerekmez. Bağlantı yalnızca sunucu bir istemci sertifikası (mTLS) istiyorsa ya da özel bir CA'ya güvenmeniz gerekiyorsa kullanılır.
HTTP
Ne işe yarar
Bir REST, JSON, XML ya da form tabanlı web servisine gerçek kullanıcı gibi istek gönderir: metot, URL, header'lar, query parametreleri ve body. Yanıttan değer çıkarıp (ör. giriş token'ı) sonraki adımlarda kullanabilir, status, gecikme, JSON alanı, XPath, header gibi check'lerle doğrulayabilirsiniz.
Ne zaman kullanılır
- Web uygulamanızın, API gateway'inizin ya da mikroservisinizin HTTP uç noktalarını yük altında ölçmek için.
- Giriş → listeleme → sepete ekleme → ödeme gibi bir kullanıcı akışını zincirlemek için.
- Tarayıcı kaydından (HAR) ya da API dokümanından gelen testleri koşturmak için (bkz. İçe aktarma).
Adım adım
- Testler sayfasında testi açın ve düzenleyiciye geçin (ya da Yeni test).
- Senaryolar ve adımlar sekmesinde Adım ekle'ye tıklayın.
- Adım adı alanına anlamlı bir ad yazın (ör. "Siparişlerim"). Bu ad sonuç tablolarında görünür.
- Protokol olarak HTTP seçili kalsın.
- Metot (GET, POST, PUT, PATCH, DELETE…) ve URL'yi girin. Tam bir
http://ya dahttps://adresi olmalı; ortak kısmı değişkene almak için{{base}}/api/ordersyazın vebasedeğişkenini Genel ve değişkenler sekmesinde tanımlayın. - Gerekirse Header'lar (ör.
Authorization: Bearer {{token}}) ve Query parametrelerini ekleyin (Header ekle, Parametre ekle). - Body türünü seçin: Yok, JSON, XML, Form (urlencoded), Form (multipart / dosya) ya da Ham. Content-Type header'ını vermezseniz body türüne göre eklenir.
- İstek hedefte veri oluşturuyor, güncelliyor ya da siliyorsa Bu istek hedefte veri değiştirir kutusunu işaretleyin. İşaretli adımı olan testin her koşusu başlamadan önce ayrıca onay ister.
- Check sekmesinde doğrulamaları ekleyin (ör. Durum = 200, Yanıt süresi (ms) < 500).
- Yanıttan değer almak için Değişken çıkar sekmesini kullanın (ör. JSONPath
$.token→token). - Giriş gibi her sanal kullanıcı (VU) için bir kez yapılacak adımlarda VU başına bir kez çalıştır'ı işaretleyin.
- Düzenleyicinin üstündeki Dene düğmesiyle tek bir iterasyon gönderip istek ve yanıtı görün, sonra Kaydet.
Örnek
Bir kez giriş yapıp token'ı alan, sonra her iterasyonda bu token'la sipariş listesini çeken iki adım:
[
{"id": "login", "name": "Giriş", "once": true,
"request": {"method": "POST", "url": "{{base}}/api/login",
"body": {"type": "json", "content": "{\"user\": \"vu{{__VU}}\", \"password\": \"{{password}}\"}"}},
"extract": [{"var": "token", "from": "jsonpath", "expr": "$.token"}],
"checks": [{"type": "status", "value": 200}]},
{"id": "orders", "name": "Siparişlerim",
"request": {"url": "{{base}}/api/orders",
"headers": [{"key": "Authorization", "value": "Bearer {{token}}"}]},
"checks": [{"type": "status", "value": 200}, {"type": "latency", "op": "lt", "value": 500}]}
]Spitfire'da ayrı bir "kimlik doğrulama" bölümü yoktur; kimlik bilgisi bir header'dır. Bearer token için yukarıdaki gibi giriş adımından token çıkarıp Authorization header'ında kullanın. Sabit bir API anahtarı ise bir değişkende tutup header'a {{apiKey}} olarak yazın.
Test geneli HTTP seçenekleri
Düzenleyicinin Seçenekler sekmesi testteki bütün HTTP isteklerini etkiler:
| Seçenek | Varsayılan | Açıklama |
|---|---|---|
| İstek zaman aşımı | 30s | Bir isteğin en uzun süresi. Aşılırsa istek zaman aşımı hatası sayılır. |
| HTTP sürümü | Otomatik (HTTP/2 varsa) | Yalnız HTTP/1.1 seçilirse HTTP/2 kullanılmaz. |
| En çok yönlendirme | 10 | Takip edilecek en çok 3xx yönlendirmesi. |
| TLS sertifikasını doğrulama | kapalı | Yalnızca bu testin HTTP istekleri için sertifika doğrulamasını kapatır; kendinden imzalı test ortamları içindir. Açıksa kaydederken TLS sertifika doğrulaması kapalı uyarısı çıkar. |
| Cookie'ler | Her VU'nun kendi oturumu (önerilen) | Her VU kendi cookie'lerini tutar (tarayıcıdaki gibi). Kapalı seçilirse yalnızca adımın kendi Cookie header'ı gönderilir. |
| Bağlantıları hiç yeniden kullanma | kapalı | Her istek yeni TCP/TLS bağlantısı açar. Yüksek yükte kaynak port tükenmesine yol açabilir. |
| İterasyonlar arası bağlantı kapat | kapalı | Her iterasyon yeni bir kullanıcı gibi bağlanır. |
| Response body'lerini saklama | kapalı | Bellek kazanmak içindir; değişken çıkaran ve body check'i olan adımlar etkilenmez. |
| Hatalı yanıt örnekleri | açık | Birkaç hatalı yanıtın body'sinin 2 KB'ı saklanır. Yanıtlar saklanmamalıysa kapatın. |
mTLS ile istemci sertifikası
Sunucu istemci sertifikası (mTLS) istiyorsa ya da sunucu sertifikası özel bir CA ile imzalanmışsa:
- Bağlantılar → Bağlantı ekle'ye tıklayın, Tür olarak İstemci sertifikası (mTLS) seçin.
- Ad verin (ör.
partner-mtls). - İstemci sertifikası (PEM), İstemci anahtarı (PEM, şifreli saklanır) ve gerekiyorsa CA sertifikası alanlarını doldurun. Sertifika ya da CA'dan en az biri zorunludur. Sertifikanın adı adresten farklıysa Sunucu adı (SNI) yazın.
- Kaydet. Kaydederken sertifika ile anahtarın eşleştiği denetlenir; Test et sertifikanın süresini kontrol eder.
- Test editöründe HTTP (ya da WebSocket / SSE) adımının İstemci sertifikası (mTLS) alanında bu bağlantıyı seçin. Varsayılan Yok'tur.
{"id": "pay", "name": "Ödeme (mTLS)", "connection": "partner-mtls",
"request": {"method": "POST", "url": "https://partner.example.com/pay",
"body": {"type": "json", "content": "{\"amount\": 10}"}, "modifiesData": true}}Anahtar test tanımına hiçbir zaman girmez; adım yalnızca bağlantının adını taşır.
Ürettiği metrikler
| Metrik | Anlamı |
|---|---|
reqs |
Gönderilen istek sayısı |
req_duration |
İsteğin toplam süresi (ms); p50/p95/p99 bu metrikten |
req_failed |
Hatalı istek oranı (bağlantı hatası, zaman aşımı, 4xx/5xx) |
http_req_connecting |
TCP bağlantısının kurulma süresi |
http_req_tls_handshaking |
TLS el sıkışma süresi |
http_req_waiting |
İlk byte'a kadar bekleme süresi (TTFB) |
data_sent, data_received |
Gönderilen ve alınan veri miktarı |
checks |
Başarılı check oranı |
Eşik örneği: {"metric": "req_duration", "filter": {"step": "orders"}, "expr": "p(95)<500"}.
WebSocket
Ne işe yarar
Bir WebSocket sunucusuna (ör. sohbet, canlı bildirim, oyun sunucusu) bağlanır, mesaj gönderir ve sunucunun gönderdiği mesajları bekler. Her VU URL başına tek bir bağlantı tutar, tıpkı bir tarayıcı sekmesi gibi: ilk WebSocket adımı bağlanır, sonraki adımlar aynı bağlantıyı kullanır.
Ne zaman kullanılır
Sunucunuz kalıcı bağlantı tutuyor ve kaç eşzamanlı bağlantıyı, mesaj gecikmesini ya da yayın (push) hızını kaldırabildiğini öğrenmek istiyorsanız.
Adım adım
- Adım ekle → Protokol olarak WebSocket seçin.
- URL'yi
ws://ya dawss://ile yazın. - Eylem seçin:
- Gönder ve yanıt bekle: mesajı gönderir, yanıt gelene kadar bekler; süre gönderimden yanıta kadardır ve yanıt check'lere gider.
- Gönder: mesajı gönderir, yanıt beklemez.
- Mesaj bekle: sunucunun ittiği sıradaki mesajı bekler. Adımlar arasında gelen mesajlar tamponda tutulur.
- Bağlantıyı kapat: bağlantıyı kapatır; sonraki WebSocket adımı yeniden bağlanır.
- Mesaj alanına gönderilecek metni yazın. İkili çerçeve göndermek için Mesaj base64 (ikili çerçeve olarak gönderilir) kutusunu işaretleyip base64 yazın.
- Belirli bir yanıtı beklemek için Beklenen mesajda geçen metin alanını doldurun; içermeyen mesajlar atlanır.
- Bekleme süresi (varsayılan 10s) dolarsa adım başarısız sayılır.
- Handshake'te header ya da alt protokol gerekiyorsa Bağlantı header'ları ve alt protokol bölümünü açın (Alt protokoller (virgülle)).
- Mesajlar veri değiştiriyorsa Bu mesajlar hedefte veri değiştirir kutusunu işaretleyin; editör bunu WebSocket mesajları her iterasyonda hedefte veri değiştirir uyarısıyla gösterir.
{"id": "ws-ping", "name": "WS ping", "protocol": "ws",
"ws": {"action": "request", "url": "wss://chat.example.com/ws",
"message": "{\"type\": \"ping\"}", "match": "pong", "wait": "5s"}}Ürettiği metrikler
req_duration (gönderimden yanıta ya da beklenen mesaja kadar), req_failed, ve bağlanan adımda ws_connecting (WebSocket handshake süresi).
SSE
Ne işe yarar
Bir Server-Sent Events akışını açar (GET, Accept: text/event-stream), istenen sayıda olay gelince kapatır. Fiyat, skor, bildirim gibi tek yönlü canlı akışları test eder.
Adım adım
- Adım ekle → Protokol olarak SSE (olay akışı) seçin.
- Akışın URL'sini yazın.
- Yalnızca belirli olayları saymak için Olay türü (ör.
price) ve/veya Veride geçen metin doldurun. - Olay sayısı (varsayılan 1) kadar olay gelince akış kapanır.
- Bekleme süresi (varsayılan 30s) dolarsa adım başarısız sayılır.
{"id": "prices", "name": "Fiyat akışı", "protocol": "sse",
"sse": {"url": "https://api.example.com/events", "event": "price", "count": 5, "wait": "30s"}}Son olayın verisi check'lere gider; türü ve id'si Sse-Event / Sse-Id header'larındadır.
Ürettiği metrikler
req_duration (son beklenen olaya kadar), req_failed ve sse_time_to_first_event (akış açılışından ilk olaya kadar).
Sık karşılaşılan sorunlar
Belirti: req_failed yüksek, hata türü "reddedilen bağlantı" (connection refused).
Neden: Hedef port kapalı, servis ayakta değil ya da runner'dan erişim yok.
Çözüm: URL'nin host ve portunu kontrol edin; runner makinesinden curl -v <url> deneyin.
Belirti: x509: certificate signed by unknown authority.
Neden: Hedef özel bir CA ile imzalı.
Çözüm: CA'yı bir İstemci sertifikası (mTLS) bağlantısının CA sertifikası alanına koyup adımda seçin. Yalnızca test ortamında geçici olarak Seçenekler → TLS sertifikasını doğrulama kullanılabilir.
Belirti: Sunucu 400 No required SSL certificate was sent ya da handshake hatası veriyor.
Neden: Sunucu mTLS istiyor, adım sertifika sunmuyor.
Çözüm: mTLS ile istemci sertifikası adımlarını izleyin.
Belirti: 401/403 hataları, ilk iterasyonlardan sonra artıyor. Neden: Token'ın süresi doluyor ya da giriş adımı yalnızca bir kez çalışıyor. Çözüm: Token süresini koşu süresinden uzun tutun ya da giriş adımında VU başına bir kez çalıştır'ı kaldırın.
Belirti: Koşu başlatılırken Bu test veriyi değiştiriyor; başlatmak için onaylayın. Neden: Bir HTTP adımında Bu istek hedefte veri değiştirir işaretli (ya da testte SQL, MongoDB veya Redis için onaylı bir yazma var). Çözüm: Koşu penceresinde Bu testin gerçek veriyi değiştireceğini biliyorum, başlat kutusunu işaretleyin. Bu bir güvenlik önlemidir; doğru ortamı hedeflediğinizden emin olun.
Belirti: WebSocket Mesaj bekle adımı zaman aşımına uğruyor. Neden: Beklenen metin hiç gelmiyor ya da mesaj bir önceki adımda tüketildi. Çözüm: Beklenen mesajda geçen metin alanını kontrol edin; Bekleme süresini artırın; Dene ile gelen mesajları görün.

