Spitfire

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

İçe aktarma

Ne işe yarar

Testi sıfırdan yazmak yerine elinizdekinden başlatın. Spitfire şu kaynakları bir Spitfire testine çevirir:

Kaynak Nereden Sonuç
k6 betiği (.js, .mjs, .ts) Testler → Dosyadan aç Düzenleyicide açılan test + çeviri raporu
JMeter planı (.jmx) Testler → Dosyadan aç Düzenleyicide açılan test + çeviri raporu
Spitfire testi (.json) Testler → Dosyadan aç Düzenleyicide açılan test
Birden çok k6 / JMeter / JSON dosyası Testler → Dosyadan aç (çoklu seçim) Toplu içe aktar sayfası
OpenAPI 3.x, Swagger 2.0, Postman koleksiyonu Testler → API / HAR içe aktar Seçtiğiniz işlemlerden bir test
HAR (tarayıcı kaydı) Testler → API / HAR içe aktar Kullanıcı akışını tekrarlayan bir test
Erişim logu ya da trace dışa aktarımı Testler → Gerçek trafikten Endpoint karışımını ve geliş hızını yeniden oynatan bir test

Hiçbir dosya çalıştırılmaz: betikler ve planlar yalnızca okunur. İçe aktarılan her test, kaydetmeden önce düzenleyicide gözden geçirilir.

Testler sayfasındaki içe aktarma düğmeleriTestler sayfasındaki içe aktarma düğmeleri

Not

İçe aktarma düğmeleri yalnızca yöneticilere görünür; user rolündeki hesaplar test oluşturamaz ve düzenleyemez.

Ne zaman kullanılır

  • k6 ya da JMeter'dan Spitfire'a geçiyorsanız ve mevcut test takımınızı taşımak istiyorsanız.
  • API'nizin bir OpenAPI dokümanı ya da Postman koleksiyonu varsa ve her uç nokta için hızla bir başlangıç testi istiyorsanız.
  • Gerçek bir kullanıcı akışını (giriş, arama, sepete ekleme…) tarayıcıda kaydedip yük altında tekrarlamak istiyorsanız.
  • Üretimin gerçek trafik profilini (hangi uç nokta ne sıklıkla, günün hangi saatinde ne yoğunlukta) yeniden üretmek istiyorsanız.

k6 ve JMeter

Adım adım

  1. Testler sayfasında Dosyadan aç'a tıklayın.
  2. Bir .js / .mjs / .ts (k6) ya da .jmx (JMeter) dosyası seçin. Birden çok dosya seçerseniz Toplu içe aktarma sayfası açılır.
  3. Controller dosyayı çevirir ve düzenleyici Yeni test olarak açılır. Üstte dosya.js dosyasından çevrildi (k6) başlıklı bir kutu ve N kısım çevrilmedi, M kısım kontrol edilmeli. özeti görünür.
  4. Raporu göster (N)'e tıklayın. Her satırın bir seviyesi vardır:
    • not: çevrildi, nasıl çevrildiğine dair bilgi;
    • kontrol et: çevrildi ama birebir değil, gözden geçirin;
    • çevrilmedi: karşılığı yok, elle eklemeniz gerekir. k6 betiklerinde satırlar satır N bilgisiyle gelir. Rapor mesajları İngilizcedir.
  5. Adımları, eşikleri ve değişkenleri gözden geçirip kaydedin. Önerilen kontrol listesi için Kaydetmeden önce gözden geçirme.
  6. Kaydet.

k6'dan neler çevrilir

  • options: executor'lar (yük modelleri), vus/duration, stages, thresholds ve birkaç HTTP seçeneği. options yoksa k6'daki gibi 1 VU, 1 iterasyon.
  • http.get/post/put/patch/del/head/options/request: header'lı, body'li istekler adım olur.
  • Bir yanıt üzerindeki check()'ler check olur.
  • sleep() düşünme süresi olur.
  • Yanıttan alınan değerler (res.json(...), res.headers[...]) değişken çıkarma olur ve sonraki isteklerde kullanılır.
  • __ENV değişkenleri varsayılanlarıyla test değişkeni olur; __VU / __ITER karşılıklarına çevrilir.
  • setup()'ın döndürdüğü değerler; setup() içindeki istekler VU başına bir kez çalışan adımlar olur (rapor bunu "kontrol et" olarak yazar).
  • k6 metrik adları Spitfire'ınkilere çevrilir (http_req_duration → req_duration, http_req_failed → req_failed, http_reqs → reqs…). Eşik sözdizimi ve CI çıkış kodları k6 ile aynıdır.

Çevrilmeyenler (raporda satır numarasıyla): döngüler, if koşulları, argüman alan fonksiyonlar, özel metrikler (k6/metrics), veri dosyaları (SharedArray, papaparse), WebSocket/gRPC modülleri, http.batch, teardown(), externally-controlled executor'ı.

JMeter'dan neler çevrilir

  • Thread Group → senaryo. Süreli (scheduler) ve ramp-up'lı grup ramping-vus; ramp-up'sız süreli grup constant-vus; döngü sayılı grup per-vu-iterations olur. Sonsuz döngülü ve süresiz bir grup 10 dakikalık constant-vus yapılır ve raporda uyarı çıkar.
  • HTTP Request sampler'ları → adım. HTTP Request Defaults ve HTTP Header Manager uygulanır.
  • Response Assertion, Duration Assertion, JSON Assertion → check.
  • JSON Extractor, Regular Expression Extractor, XPath Extractor → değişken çıkarma.
  • Constant, Uniform Random, Gaussian Random Timer → düşünme süresi.
  • User Defined Variables ve ${__P(ad,varsayılan)} → test değişkenleri (varsayılan değerle). __Random, __UUID, __time, __threadNum karşılıklarına çevrilir.

Çevrilmeyenler: mantık controller'ları (If, While, Loop, ForEach, Switch, Random, Once Only, Throughput… — içlerindeki istekler de dışarıda kalır), CSV Data Set (rapor dosya adını ve değişkenleri yazar: CSV'yi Veri dosyaları Spitfire'da: /data-files sayfasına yükleyip testte bağlayın), setUp/tearDown thread grupları, HTTP dışı sampler'lar ve eklentiler. Listener'lar yok sayılır, çünkü sonuçları Spitfire kendisi toplar.

Dikkat

JMeter planlarında eşik yoktur. Testin geçip kalması için düzenleyicinin Eşikler sekmesinden eşik ekleyin (ör. req_duration p(95)<500, req_failed rate<0.01).

Not

Hem k6 hem JMeter'dan gelen POST, PUT, PATCH ve DELETE istekleri Bu istek hedefte veri değiştirir işaretli gelir; bu yüzden her koşu onay ister. Giriş ya da arama gibi veri değiştirmeyen POST'larda işareti kaldırın.

Toplu içe aktarma

Toplu içe aktar sayfasıToplu içe aktar sayfası

Bütün bir test takımını tek seferde taşımak için:

  1. Testler → Dosyadan aç'ta birden çok dosya seçin ya da Toplu içe aktar sayfasında Dosya ekle'ye tıklayın. k6 (.js, .ts), JMeter (.jmx) ve Spitfire (.json) dosyaları karışık olabilir.
  2. Her dosya çevrilir, doğrulanır ve bir satırda listelenir: Dosya, Test adı (düzenlenebilir), Adım, Rapor, Durum.
  3. Durum değerleri: çevriliyor, hazır, düzeltilmeli (doğrulama hatası var), çevrilecek istek yok, çevrilemedi, kaydediliyor, kaydedildi, kaydedilemedi.
  4. Üstteki özet satırı sayıları verir: N dosya · X hazır · Y düzeltilmeli · ….
  5. düzeltilmeli satırlarda Düzenleyicide düzelt ile testi düzenleyicide açıp hatayı giderin.
  6. Kaydetmek istediğiniz satırları işaretleyin (Hazır olanların hepsini seç başlık kutusuyla) ve Seçilenleri kaydet (N)'e tıklayın. Her test dosya dosyasından çevrildi (k6) açıklamasıyla kaydedilir.

Komut satırından: Bir klasörün tamamı için

spitfire convert <klasör> -o testler/ -r rapor.csv

her betik için bir test dosyası üretir; raporun her satırı bir CSV'ye yazılır.

API dokümanından test

API dokümanından içe aktarmaAPI dokümanından içe aktarma

  1. Testler → API / HAR içe aktar'a tıklayın. API dokümanı ya da tarayıcı kaydından test oluştur sayfası açılır.
  2. Kaynağı seçin:
    • Adresten: dokümanın URL'sini yazın (ör. https://api.example.com/openapi.json). Controller dokümanı indirir; bu yüzden URL controller'dan erişilebilir olmalıdır.
    • Dosyadan: dosyayı seçin.
  3. Oku'ya tıklayın. Desteklenenler: OpenAPI 3.x, Swagger 2.0, Postman koleksiyonu v2.0/v2.1 (JSON veya YAML, en fazla 10 MB) ve HAR (en fazla 50 MB).
  4. Dokümanın başlığı, biçimi ve N işlem görünür.
  5. Alınacak metotlar: varsayılan olarak yalnızca GET seçilidir (Yalnız okuma istekleri seçili: hedefte veri değişmez.). POST, PUT/PATCH, DELETE'i eklerseniz kırmızı bir uyarı çıkar: bu istekler yük testinde her iterasyonda tekrarlanır.
  6. Test adı'nı yazın.
  7. Temel adres (base): dokümandaki sunuculardan biri önerilir; test ortamınızın adresini yazın. Testte {{base}} değişkeni olur.
  8. Postman koleksiyonunun değişkenleri teste taşınır (Koleksiyonun N değişkeni teste taşınır); Postman'in dinamik değişkenleri karşılıklarına çevrilir ({{$guid}} → {{$uuid}}), karşılığı olmayanlar sabit bir örnek değer olur.
  9. Yol, özet veya etikete göre ara ile işlemleri süzün; etiket gruplarından istediklerinizi işaretleyin (Görünenleri seç, Görünenleri bırak). Özet N seçili · M veri değiştiren biçimindedir.
  10. N adımlı test oluştur'a tıklayın.
  11. Seçimde veri değiştiren istek varsa Veri değiştiren istekler penceresi açılır:
    • her grubu ayrı ayrı onaylayın (POST — N istek hedefte yeni kayıt oluşturur, PUT / PATCH — …, DELETE — N istek hedefte kayıt SİLER);
    • Onaylamak için hedef sunucuyu yazın: altındaki host adını aynen yazın;
    • Onaylıyorum, testi oluştur'a tıklayın. Onay; kullanıcı, zaman, IP, dokümanın SHA-256 özeti ve işlem listesiyle denetim kaydına yazılır.
  12. Düzenleyici açılır; testi gözden geçirip kaydedin.

Üretilen test: her seçili işlem bir adım (doküman sırasıyla), 1 VU ile 1 dakika, her adımda dokümanın belgelediği başarı koduna bir Durum check'i. GET dışı adımlar Bu istek hedefte veri değiştirir işaretli gelir ve testin her koşusu yeniden onay ister. Dokümanda tanımlı kimlik doğrulama header'a çevrilir ve doldurmanız gereken boş bir değişken olur: Bearer → Authorization: Bearer {{token}}, Basic → Authorization: Basic {{basicAuth}}, API key → header ya da query'de {{apiKey}}. Path parametreleri (/pets/{petId}, Postman :id) değişken olur.

Not

JSDoc, Javadoc, Sphinx gibi kod dokümantasyonları HTTP isteklerini tarif etmez ve desteklenmez. Bu araçları kullanan framework'lerin çoğu ayrıca bir OpenAPI dokümanı da sunar (springdoc, swagger-jsdoc, FastAPI…).

HAR tarayıcı kaydı

  1. Tarayıcıda geliştirici araçlarını açın → Ağ (Network) sekmesi → akışı (giriş, arama, sepete ekleme…) gerçek bir kullanıcı gibi yapın → HAR olarak kaydet (Save all as HAR).

  2. Testler → API / HAR içe aktar → Dosyadan ile HAR dosyasını seçin, Oku.

    Dosyadan içe aktarmaDosyadan içe aktarma

  3. Sayfa kayıttan neyin çıkarıldığını yazar: N istekten X statik dosya ve Y CORS ön isteği çıkarıldı.

  4. Kalan istekler kayıt sırasıyla listelenir; yukarıdaki 5–12. adımlar aynen geçerlidir.

HAR'a özgü dönüşümler:

  • Korelasyon: bir yanıtın döndürüp sonraki bir isteğin geri gönderdiği değerler (token, sipariş id'si) sabit olarak tekrarlanmaz; değişkene çıkarılır. Örneğin girişin döndürdüğü {"token": "eyJ…"} sonraki her çağrıda Authorization: Bearer {{token}} olur.
  • Düşünme süresi: kullanıcının istekler arasındaki duraklamaları düşünme süresine dönüşür.
  • Cookie'ler kayıttan atılır; her VU kendi cookie'lerini tutar. Kaydedilmiş bir session cookie'si bütün VU'ları tek bir kullanıcı yapardı.
  • Kaydın hiçbir yanıtın üretmediği bir kimlik bilgisi (süresi dolmuş bir token) teste yazılmaz; yerine boş {{authToken}} değişkeni konur.
  • Tarayıcının kendi eklediği header'lar (sec-*, cache doğrulayıcıları, user agent…) atılır.
  • Her origin bir değişken olur: en yoğun olanı {{base}}, diğerleri {{base2}}… Böylece aynı kayıt bir staging sunucusuna yönlendirilebilir.
Dikkat

HAR dosyaları parola, token ve kişisel veri içerebilir. Dosyayı paylaşmadan önce içeriğine dikkat edin; Spitfire kaydın kendisini teste yazmaz, yalnızca türetilmiş istekleri yazar.

Gerçek trafikten test

Gerçek trafikten test oluşturGerçek trafikten test oluştur

  1. Testler → Gerçek trafikten'e tıklayın.
  2. Log ya da trace dosyası seçin (en çok 512 MB). Biçim: Biçimi algıla ya da elle: nginx (combined), JSON log satırları, AWS ALB erişim logu, AWS Classic ELB erişim logu (.gz de olur), CSV (başlık method,path,status,latency,timestamp, gecikme ms), OTLP JSON (trace), Jaeger JSON (trace).
  3. Oku. Özet N kayıttan M istek yazar; okunamayan kayıtlar ve okunurken atılan gizli değerler sayılır.
  4. Zaman penceresi: Başlangıç (yerel saatiniz) ve Bitiş'i seçin ya da En yoğun saat / Tüm dosya.
  5. Endpoint karışımı tablosunu inceleyin: yollar normalleştirilir (/orders/123 → /orders/:id; UUID'ler, özetler, tarihler, opak token'lar ve 20'den çok farklı değeri olan yol parçaları parametre olur). Her satırda İstek, Pay, Ort./sn ve Testte görünür.
  6. Üretilecek test bölümünde:
    • Test adı,
    • Temel URL: logdaki sunucudan önerilir; test ortamınızı yazın ({{base}}),
    • Ölçek çarpanı (0,01–100; 2 = gözlenen trafiğin iki katı),
    • Testteki endpoint (varsayılan 20, en çok 50; gerisi dışarıda kalır).
  7. Testin yapacağı özeti kapsama oranını, aşama süresini ve tepe hızını yazar. Testi oluştur'a tıklayın. Veri değiştiren endpoint'ler API dokümanı içe aktarmadaki gibi onaylanır.

Her endpoint, aşamaları kendi gözlenen hızını izleyen bir ramping-arrival-rate senaryosu olur; senaryolar birlikte karışımı ve eğriyi yeniden oynatır. Loglarda request body ve header yoktur: onları ve kimlik bilgilerini düzenleyicide ekleyin.

Gizlilik: Dosya satır satır okunur ve saklanmaz. Controller belleğinde en çok bir saat yalnızca türetilmiş değerler kalır (zaman, yöntem, yol şablonu, durum, gecikme) ve test oluşunca silinir. İstemci adresleri, kullanıcılar, tarayıcı bilgisi ve header'lar hiç okunmaz; gizli görünen sorgu değerleri ve yol parçaları (token, parola, oturum kimliği, e-posta) okunurken atılır.

Kaydetmeden önce gözden geçirme

Kaydetmeden önce her içe aktarılan testte şunları kontrol edin:

  1. Hedef adres: {{base}} ve diğer URL'ler test ortamınızı mı gösteriyor? Production'a yanlışlıkla yük göndermeyin.
  2. Boş değişkenler: Genel ve değişkenler sekmesinde token, basicAuth, apiKey, authToken gibi boş değişkenleri doldurun ya da bir giriş adımından çıkarın.
  3. Veri değiştiren adımlar: Bu istek hedefte veri değiştirir işaretli adımlar gerçekten veri değiştiriyor mu? Değiştirmeyenlerde işareti kaldırın.
  4. Yük modeli: Senaryolar ve adımlar sekmesindeki VU sayısı, süre ve aşamalar amacınıza uygun mu? API dokümanından gelen test yalnızca 1 VU, 1 dakikadır.
  5. Eşikler: JMeter ve doküman içe aktarmalarında eşik yoktur; ekleyin.
  6. Veri dosyaları: CSV Data Set / SharedArray kullanan betiklerde CSV'yi Veri dosyaları Spitfire'da: /data-files sayfasına yükleyip bağlayın.
  7. Rapordaki "çevrilmedi" satırları: her birini okuyun; gerekiyorsa adımı elle ekleyin.
  8. Dene ile tek iterasyon gönderip yanıtları kontrol edin, sonra Kaydet.

Sık karşılaşılan sorunlar

Belirti: dosya.json bir Spitfire test tanımı değil ("scenarios" içeren bir JSON dosyası). Neden: Seçilen JSON bir Spitfire testi değil (ör. bir OpenAPI ya da Postman dosyası). Çözüm: OpenAPI/Postman/HAR dosyalarını API / HAR içe aktar ile açın.

Belirti: Çeviriden sonra test boş ya da no thread group with an HTTP request could be converted. Neden: İstekler bir mantık controller'ının (ör. Loop, If) ya da k6'da bir döngünün içinde. Çözüm: Raporu okuyun; istekleri düzenleyicide elle ekleyin. Spitfire'da bir iterasyon adımları bir kez çalıştırır; tekrar için yük modelini kullanın.

Belirti: Toplu içe aktar'da satır düzeltilmeli. Neden: Çevrilen test doğrulamadan geçmedi (ör. tanımsız değişken, mutlak olmayan URL). Çözüm: Düzenleyicide düzelt ile açıp alanların altındaki hataları giderin.

Belirti: Adresten okuma başarısız. Neden: URL controller'dan erişilemiyor ya da kimlik doğrulama istiyor. Çözüm: Dosyayı indirip Dosyadan ile yükleyin.

Belirti: Doküman artık bellekte değil; yeniden okuyun. Neden: Okunan doküman controller belleğinde en çok bir saat tutulur. Çözüm: Oku'ya yeniden tıklayın.

Belirti: Onay penceresinde Yazdığınız hedef sunucu, testin yazacağı sunucuyla eşleşmiyor. Neden: Yazılan host, testin yazacağı host ile aynı değil. Çözüm: Onaylamak için hedef sunucuyu yazın: yanında gösterilen adı aynen (birden çoksa virgülle) yazın.

Belirti: HAR'dan gelen test 401 alıyor. Neden: Kayıttaki token teste yazılmadı ({{authToken}} boş) ya da giriş isteği kayıtta yok. Çözüm: Kayda giriş adımını da dahil edin ya da authToken değişkenini doldurun.

Belirti: Gerçek trafik testinde istekler 404 alıyor. Neden: Temel URL logdaki üretim sunucusunu gösteriyor ya da yol parametresinin örnek değeri test ortamında yok. Çözüm: Temel URL'yi test ortamınız yapın; yol değişkenlerini (ör. {{orderId}}) geçerli değerlerle ya da bir veri dosyasıyla doldurun.

İlgili sayfalar