Spitfire

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

Test verisi

Gerçekçi bir yük testi, her VU'nun aynı kullanıcı adıyla aynı ürünü almasından fazlasını ister: farklı kullanıcı hesapları, farklı ürün kimlikleri, geçerli TC kimlik numaraları, girişte alınan token'lar… Bu sayfa Spitfire'da test verisinin nereden gelebileceğini, CSV data dosyalarının nasıl yüklenip teste bağlanacağını, fake data üreticilerini, step'ler arasında değer taşımayı ve parola gibi hassas değerlerin nerede tutulması gerektiğini anlatır.

Ne işe yarar

  • Veri dosyaları sayfasına yüklediğiniz CSV dosyalarının satırları iteration'lara dağıtılır: her iteration her data bağından bir satır alır.
  • Satırlar sırayla, rastgele ya da koşu boyunca tekil verilebilir; birden çok runner varsa satırlar aralarında bölünür.
  • {{fake.tckn}}, {{fake.iban}}, {{fake.phone}} gibi fake data yazımları her kullanımda yeni, algoritmaya uygun Türkçe test verisi üretir.
  • Bir step'in response'undan extract ile alınan değer sonraki step'lerde kullanılır.

Ne zaman kullanılır

  • Her VU'nun farklı bir kullanıcıyla giriş yapması gerektiğinde (CSV'de e-posta ve parola).
  • Önbelleği yanıltmamak için farklı kayıtlar okunması gerektiğinde (CSV'de ürün ya da müşteri kimlikleri).
  • Form doğrulaması olan uç noktalara (TCKN, IBAN, telefon) geçerli görünen değerler göndermek gerektiğinde (fake data).
  • Her kaydın yalnız bir kez kullanılması gerektiğinde (ör. tek kullanımlık kuponlar: Tekil mod).

Veri kaynakları

Kaynak Yazım Nerede tanımlanır Ne zaman değişir
Test variable'ı {{base}} Editör → Genel ve değişkenler → Değişkenler Testte sabit; ortama ya da koşuya göre değiştirilebilir
Data dosyası sütunu {{users.email}} Veri dosyaları + editör → Veri (CSV) Her iteration'da yeni satır
Fake data {{fake.email}} Hiçbir yerde; doğrudan yazılır Her kullanımda yeni değer
Extract edilen değer {{token}} Step → Değişken çıkar Step her çalıştığında
Hazır değerler {{__VU}}, {{__ITER}}, {{$uuid}}, {{$randInt 1 100}}… Yerleşik Her kullanımda / her iteration'da

Hazır değerlerin tam listesi için bkz. Test editörü.

CSV data dosyası yüklemek

  1. Sol menüde Veri dosyaları'na gidin (Veri dosyaları Spitfire'da: /data-files).
  2. Sağ üstteki CSV yükle'ye tıklayın. Veri dosyası yükle penceresi açılır.
  3. CSV dosyası alanından dosyayı seçin. Kurallar:
    • İlk satır başlıktır: sütun adları harf, rakam veya _ olmalı ve rakamla başlamamalı (email, sifre, musteri_id). Türkçe karakter, boşluk ve tire kullanılamaz.
    • Aynı sütun adı iki kez geçemez; en çok 100 sütun.
    • Başlıktan sonra en az bir veri satırı olmalı.
    • Dosya en çok 20 MB olabilir.
    • Excel'in "CSV UTF-8" çıktısındaki BOM sorun değildir.
  4. Ad alanına dosya için bir ad yazın (listede görünen ad).
  5. CSV yükle'ye tıklayın. Dosya listede sütunları, satır sayısı, boyutu ve yüklenme tarihiyle görünür.
  6. Satırın sağındaki göz simgesi (Önizle) ilk 20 satırı ve Kullanan testler'i gösterir.

Veri dosyaları sayfasıVeri dosyaları sayfası

Veri dosyası yükle penceresiVeri dosyası yükle penceresi

Örnek users.csv:

csv
email,password,customer_id
ayse.demir@example.com,Test1234!,100231
mehmet.kaya@example.com,Test1234!,100232
zeynep.yilmaz@example.com,Test1234!,100233

Önizle penceresi: ilk 20 satır ve dosyayı kullanan testlerÖnizle penceresi: ilk 20 satır ve dosyayı kullanan testler

Not

Bir test tarafından kullanılan veri dosyası silinemez: "Bir test kullanıyorsa silinemez." Önce testlerdeki data bağını kaldırın.

Veri dosyası üretmek

Gerçek müşteri verisi kullanmadan binlerce satırlık bir dosya için Veri dosyaları → Veri üret:

  1. Veri dosyaları sayfasında Veri üret'e tıklayın. Test verisi üret penceresi açılır.
  2. Ad alanına dosya adını yazın (ör. musteriler).
  3. Satır alanına satır sayısını yazın: 1 ile 50.000 arası.
  4. Tabloda istediğiniz değer türlerini işaretleyin (TC kimlik no, IBAN (TR), Cep telefonu, Ad, Soyad, Ad soyad, E-posta, İl, İlçe, Adres, Tarih) ve gerekirse Sütun adı'nı değiştirin. Tarih için Başlangıç ve Bitiş seçilebilir.
  5. Üret ve kaydet'e tıklayın. Dosya listeye eklenir; yüklenmiş bir CSV gibi teste bağlanır.

"Bir satırın sütunları tek bir kişiyi anlatır: e-posta addan üretilir, ilçe o ile aittir." Yani aynı satırdaki ad, e-posta ve adres birbiriyle tutarlıdır; {{fake.*}} yazımları ise her kullanımda birbirinden bağımsız değer üretir.

Test verisi üret penceresiTest verisi üret penceresi

Data dosyasını teste bağlamak

Yüklenen dosya, teste bir data bağı ile bağlanır. Bağın adı, template'lerde sütunların önüne yazılan addır.

  1. Testi editörde açın ve Genel ve değişkenler sekmesine geçin.
  2. Sağ sütunda Veri (CSV) bölümünü bulun. Hiç dosya yoksa "Önce bir CSV yükleyin:" yazar ve Veri dosyaları bağlantısı çıkar.
  3. Veri bağı ekle'ye tıklayın. Bir satır eklenir.
  4. Ad alanına bağın adını yazın (ör. users). Kurallar: harf, rakam, _; rakamla başlamaz; testte tekil; fake adı kullanılamaz (fake data için ayrılmış).
  5. Dosya listesinden yüklenen dosyayı seçin.
  6. Mod listesinden Sırayla, Rastgele ya da Tekil'i seçin (aşağıda).
  7. Satırın altında, kullanabileceğiniz yazımlar listelenir: {{users.email}}, {{users.password}}, {{users.customer_id}}.
  8. Step'lerde bu yazımları kullanın, örneğin giriş body'sinde: {"email": "{{users.email}}", "password": "{{users.password}}"}.
  9. Dene ile kontrol edin, sonra kaydedin.

Genel ve değişkenler sekmesinde Veri (CSV) bölümüGenel ve değişkenler sekmesinde Veri (CSV) bölümü

Ekrandaki ipucu en önemli kuralı söyler: "Her iterasyon her bağdan bir satır alır; o iterasyonun bütün adımları aynı satırı görür." Bir scenario yalnız kendi step'lerinin kullandığı bağlardan satır alır; bağı hiç kullanmayan scenario o dosyadan satır tüketmez.

JSON'daki karşılığı (dataFileId dosyanın kimliğidir; editör onu siz dosyayı seçtiğinizde doldurur):

json
"data": [
  { "name": "users", "dataFileId": "8d3c1f6e-2b7a-4f1e-9c55-0a6b2e4d9f10", "mode": "unique" }
]

Bağlama modları

Mod JSON Nasıl çalışır Ne zaman
Sırayla sequential "Satırlar sırayla verilir, bitince başa döner. Runner'lar satırları paylaşır, aynı satırı kullanmaz." Çoğu durumda; satırların dengeli kullanımı.
Rastgele random "Her iterasyonda rastgele bir satır; aynı satır tekrar gelebilir." Okuma ağırlıklı testler, kimlik listeleri.
Tekil unique "Her satır bütün koşuda en fazla bir kez kullanılır. Satırlar bitince VU'lar yeni iterasyon başlatmaz, koşu süresi dolunca biter." Tek kullanımlık kuponlar, bir kez kaydedilebilecek kullanıcılar, veri yükleme.

Birden çok runner

Koşu birden çok runner'a dağıtıldığında:

  • Sırayla ve Tekil: her runner dosyanın kendine düşen, ardışık bir parçasını alır; iki runner aynı satırı kullanmaz. Sırayla modda runner sayısı satır sayısından fazlaysa her runner dosyanın tamamını kullanır; Tekil modda bu olmaz (satırlar tekrar etmesin diye).
  • Rastgele: her runner dosyanın tamamını alır.
Dikkat

Tekil modda satır sayısı, koşunun yapacağı iteration sayısından azsa satırlar bittiğinde yük düşer: VU'lar yeni iteration başlatmaz (açık modellerde zaman çizelgesi durur), ama koşu planlanan süre dolana kadar sürer. Toplam iteration sayısını plan grafiğinden görüp dosyayı ona göre hazırlayın. shared-iterations modeliyle "her satırı bir kez işle" türünden işler için idealdir.

Karşılaştırmalı koşularda

Karşılaştırmalı (A/B) koşularda Tekil bağlar iki kola eşit ikiye bölünür (A ilk yarıyı, B ikinci yarıyı alır; tek sayıda satır varsa son satır kullanılmaz), böylece iki kol aynı satırı kullanmaz. Sırayla ve Rastgele bağlarda iki kol aynı dosyanın tamamını okur. Sıralı karşılaştırmada da her tur Tekil dosyanın kendi eşit dilimini alır.

Fake data

Fake data, test sırasında runner'da üretilen sentetik Türkçe veridir. Step'teki herhangi bir template alanına yazılır ve her kullanımda yeni bir değer üretir.

Yazım Değer
{{fake.tckn}} Kontrol haneleri geçerli 11 haneli TC kimlik numarası
{{fake.iban}} Mod-97 kontrol hanesi geçerli, gerçek banka kodlu TR IBAN
{{fake.phone}} Cep telefonu, +905XXXXXXXXX
{{fake.firstName}}, {{fake.lastName}}, {{fake.fullName}} Türkçe ad, soyad, ad soyad
{{fake.email}} ad.soyad42@example.com (posta almayan örnek alan adları)
{{fake.city}}, {{fake.district}} İl ve ilçe (81 ilin tamamı)
{{fake.address}} Cumhuriyet Mah. Lale Sk. No: 12 Daire: 3, 35040 Bornova/İzmir biçiminde adres
{{fake.date}} 1960–2005 arası bir gün (YYYY-MM-DD)
{{fake.date 2024-01-01 2024-12-31}} Verilen aralıkta (iki uç dahil) bir gün

Kopyalamak için: step kartındaki Sentetik test verisi (fake.…) başlığını açın ve istediğiniz yazımın düğmesine tıklayın (panoya kopyalanır).

Step kartında fake data düğmeleriStep kartında fake data düğmeleri

Örnek: kayıt formu body'si

json
{
  "tckn": "{{fake.tckn}}",
  "name": "{{fake.fullName}}",
  "email": "{{fake.email}}",
  "phone": "{{fake.phone}}",
  "iban": "{{fake.iban}}",
  "birthDate": "{{fake.date 1970-01-01 2000-12-31}}",
  "city": "{{fake.city}}"
}
Dikkat

Bu değerler sentetik test verisidir. TC kimlik numarası ya da IBAN formların yaptığı kontrol hanesi doğrulamasından geçer ama rastgele rakamlardır; gerçek bir kişiye ya da hesaba ait değildir. Test dışında kullanmayın.

Bilmeniz gerekenler:

  • Aynı step'te iki kez {{fake.email}} yazarsanız iki farklı e-posta çıkar. Aynı değeri iki yerde kullanmak için ya Veri üret ile bir dosya oluşturup bağlayın ya da değeri bir step'te gönderip response'tan extract edin.
  • {{fake.tckn 5}} gibi argüman almayan bir üreticiye argüman vermek ve bilinmeyen bir ad ({{fake.tc}}) şablon hatasıdır; hata mesajı bilinen adları listeler.
  • Tarih aralığı YYYY-MM-DD biçimindedir ve bitiş başlangıçtan önce olamaz.

Adımlar arasında değer taşımak

Bir step'in response'undaki değeri sonraki step'lerde kullanmanın yolu extract'tir (ayrıntı: Test editörü).

Değerlerin kapsamı:

  • VU başına: her VU'nun kendi variable kopyası vardır. Bir VU'nun aldığı token başka bir VU'ya geçmez.
  • Iteration'lar arasında: extract edilen değer VU'nun sonraki iteration'larında da durur (bir sonraki extract onu değiştirene kadar). VU başına bir kez çalıştır işaretli bir giriş step'inin token'ı bu sayede bütün iteration'larda kullanılır.
  • Bulunamazsa: değer önceki iteration'dan kalmaz; extract'in varsayılan değerine, yoksa testteki aynı adlı variable'a, o da yoksa boş metne döner.
  • Data satırı: bir iteration'ın bütün step'leri aynı satırı görür; sonraki iteration yeni satır alır.

Tipik akış:

  1. login step'i (VU başına bir kez çalıştır işaretli): body'de {{users.email}} ve {{users.password}}; Değişken çıkar: token ← JSONPath $.access_token.
  2. create_order step'i: header Authorization: Bearer {{token}}; Değişken çıkar: orderId ← JSONPath $.id.
  3. get_order step'i: URL {{base}}/api/orders/{{orderId}}.

Dene penceresinde her step'in altında "Çıkarılan" variable'lar, en altta Son VU değişkenleri görünür; değerlerin doğru aktığını buradan kontrol edin.

Deneme penceresinde çıkarılan değerlerDeneme penceresinde çıkarılan değerler

Parolalar ve hassas değerler

Spitfire'da template'ler için ayrı bir sır kasası yoktur. Nerede ne tutulacağını bilmek önemlidir:

Değer Nerede tutun Neden
Veritabanı, Kafka, RabbitMQ, Redis, MongoDB, gRPC parolaları Bağlantılar sayfasındaki kayıtlı bağlantı Bağlantı sırları şifreli saklanır ve test tanımına girmez; step yalnız bağlantının adını tutar.
İstemci sertifikası ve anahtarı (mTLS) Bağlantılar → İstemci sertifikası (mTLS) Anahtar şifreli saklanır, test tanımına hiç girmez.
Test kullanıcılarının parolaları CSV data dosyası ya da test variable'ı İkisi de şifresiz saklanır: variable'lar test tanımında, JSON'da ve sürüm geçmişinde; CSV'nin içeriği Önizle'de görünür. Yalnız test ortamına ait, yetkisi kısıtlı test hesapları kullanın.
API anahtarı, token Mümkünse bir giriş step'inden extract Token koşu sırasında alınır, testte saklanmaz.

Ek öneriler:

  • Çalıştır penceresindeki Değişkenleri bu koşu için değiştir ile verilen değerler koşuya kaydedilir ve koşu sayfasında gösterilir; buraya da üretim sırrı yazmayın.
  • Hatalı yanıt örnekleri, sır gibi görünen sorgu değerlerini ve URL parolalarını maskeler, cookie'leri hiç saklamaz. Response'lar yine de kişisel veri içerebiliyorsa editörde Seçenekler → Hatalı yanıt örnekleri → Kapalı yapın.
  • Üretim sistemine karşı test yapıyorsanız veri değiştiren step'leri işaretleyin (Bu istek hedefte veri değiştirir); koşu başlatılırken ayrıca onay istenir.

Tam örnek

CSV'den kullanıcıyla giriş, fake data ile kayıt ve extract ile zincirleme:

json
{
  "version": 1,
  "name": "Müşteri kaydı ve sipariş",
  "variables": { "base": "https://shop.staging.example.com" },
  "data": [
    { "name": "users", "dataFileId": "8d3c1f6e-2b7a-4f1e-9c55-0a6b2e4d9f10", "mode": "sequential" }
  ],
  "options": {},
  "scenarios": [
    {
      "name": "register_and_order",
      "executor": { "type": "constant-vus", "vus": 20, "duration": "5m" },
      "steps": [
        {
          "id": "login",
          "name": "Giriş",
          "once": true,
          "protocol": "http",
          "request": {
            "method": "POST",
            "url": "{{base}}/api/login",
            "body": { "type": "json", "content": "{\"email\": \"{{users.email}}\", \"password\": \"{{users.password}}\"}" }
          },
          "extract": [ { "var": "token", "from": "jsonpath", "expr": "$.access_token" } ],
          "checks": [ { "type": "status", "op": "eq", "value": 200 } ]
        },
        {
          "id": "add_customer",
          "name": "Müşteri ekle",
          "protocol": "http",
          "request": {
            "method": "POST",
            "url": "{{base}}/api/customers",
            "headers": [ { "key": "Authorization", "value": "Bearer {{token}}" } ],
            "body": { "type": "json", "content": "{\"tckn\": \"{{fake.tckn}}\", \"name\": \"{{fake.fullName}}\", \"phone\": \"{{fake.phone}}\", \"iban\": \"{{fake.iban}}\"}" },
            "modifiesData": true
          },
          "extract": [ { "var": "customerId", "from": "jsonpath", "expr": "$.id" } ],
          "checks": [ { "type": "status", "op": "in", "value": [200, 201] } ]
        },
        {
          "id": "get_customer",
          "name": "Müşteriyi oku",
          "protocol": "http",
          "request": {
            "method": "GET",
            "url": "{{base}}/api/customers/{{customerId}}",
            "headers": [ { "key": "Authorization", "value": "Bearer {{token}}" } ]
          },
          "checks": [
            { "type": "status", "op": "eq", "value": 200 },
            { "type": "jsonPath", "path": "$.id", "op": "exists" }
          ],
          "thinkTime": { "min": "1s", "max": "2s" }
        }
      ]
    }
  ],
  "thresholds": [
    { "metric": "req_failed", "expr": "rate<0.01" },
    { "metric": "req_duration", "expr": "p(95)<600" }
  ]
}

SQL step'lerinde değerler sorguya değil Parametreler'e yazılır; data sütunları ve fake data parametre değeri olabilir:

json
"sql": {
  "query": "SELECT id, status FROM orders WHERE customer_id = $1 ORDER BY created_at DESC LIMIT 10",
  "params": [ "{{users.customer_id}}" ]
}

SQL step formu: sorgu ve parametrelerSQL step formu: sorgu ve parametreler

Sık karşılaşılan sorunlar

Belirti Neden Çözüm
Yüklerken email-adresi sütun adı harf, rakam veya _ olmalı ve rakamla başlamamalı Başlıkta tire, boşluk ya da Türkçe karakter. Sütunları email_adresi gibi yeniden adlandırıp tekrar yükleyin.
dosyada veri satırı yok (ilk satır başlıktır) Yalnız başlık satırı var. En az bir veri satırı ekleyin.
geçerli bir CSV dosyası değil: … Ayırıcı noktalı virgül, kapanmamış tırnak ya da satırlarda farklı sütun sayısı. Dosyayı virgül ayırıcıyla, "CSV UTF-8" olarak yeniden kaydedin.
dosya 20 MB'tan büyük Dosya sınırı aşıldı. Gereksiz sütunları atın ya da dosyayı bölüp ayrı bağlar kullanın.
users dosyasında mail sütunu yok (sütunlar: email, password) Template'teki sütun adı dosyada yok. {{users.email}} gibi dosyadaki adla yazın (büyük/küçük harf duyarlı).
bilinmeyen değişken {user.email} Bağ adı yanlış yazılmış (users yerine user). Bağın Ad'ını ve template'i eşleştirin.
veri dosyası bulunamadı (silinmiş olabilir) / Dosya listesinde "(dosya bulunamadı)" Bağlı dosya silinmiş ya da test başka bir kurulumdan gelmiş. Dosya listesinden mevcut bir dosya seçin.
fake üretilen test verisi için ayrılmış (fake.tckn, fake.iban, …); başka bir ad seçin Data bağına fake adı verilmiş. Başka bir ad seçin.
şablon hatası: unknown fake.tc (known: tckn, iban, …) Fake data adı yanlış. Tablodaki adlardan birini kullanın.
Koşunun ortasında yük düştü, VU'lar boşta Tekil modda satırlar bitti. Daha çok satır yükleyin ya da Sırayla moda geçin.
Bütün VU'lar aynı kullanıcıyla giriş yapıyor gibi Kullanıcı bilgisi variable'dan geliyor, data dosyasından değil. Data bağı ekleyip {{users.email}} kullanın.
Veri dosyası silinemiyor Bir test dosyayı kullanıyor. Önizle'deki Kullanan testler'den data bağlarını kaldırın.

İlgili sayfalar

  • Test editörü: extract, check ve template kuralları.
  • Yük modeli: iteration sayısını ve runner'lara bölünmeyi anlamak.
  • Koşu ve sonuçlar: koşu başına variable değiştirmek.
  • Veri dosyaları Spitfire'da: /data-files · Bağlantılar Spitfire'da: /connections