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
- Sol menüde Veri dosyaları'na gidin (Veri dosyaları
Spitfire'da: /data-files). - Sağ üstteki CSV yükle'ye tıklayın. Veri dosyası yükle penceresi açılır.
- 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.
- İlk satır başlıktır: sütun adları harf, rakam veya
- Ad alanına dosya için bir ad yazın (listede görünen ad).
- CSV yükle'ye tıklayın. Dosya listede sütunları, satır sayısı, boyutu ve yüklenme tarihiyle görünür.
- Satırın sağındaki göz simgesi (Önizle) ilk 20 satırı ve Kullanan testler'i gösterir.
Örnek users.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
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:
- Veri dosyaları sayfasında Veri üret'e tıklayın. Test verisi üret penceresi açılır.
- Ad alanına dosya adını yazın (ör.
musteriler). - Satır alanına satır sayısını yazın: 1 ile 50.000 arası.
- 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.
- Ü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.
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.
- Testi editörde açın ve Genel ve değişkenler sekmesine geçin.
- 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.
- Veri bağı ekle'ye tıklayın. Bir satır eklenir.
- Ad alanına bağın adını yazın (ör.
users). Kurallar: harf, rakam,_; rakamla başlamaz; testte tekil;fakeadı kullanılamaz (fake data için ayrılmış). - Dosya listesinden yüklenen dosyayı seçin.
- Mod listesinden Sırayla, Rastgele ya da Tekil'i seçin (aşağıda).
- Satırın altında, kullanabileceğiniz yazımlar listelenir:
{{users.email}},{{users.password}},{{users.customer_id}}. - Step'lerde bu yazımları kullanın, örneğin giriş body'sinde:
{"email": "{{users.email}}", "password": "{{users.password}}"}. - Dene ile kontrol edin, sonra kaydedin.
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):
"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.
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üğmeleri
Örnek: kayıt formu body'si
{
"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}}"
}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-DDbiç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ış:
loginstep'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.create_orderstep'i: headerAuthorization: Bearer {{token}}; Değişken çıkar:orderId← JSONPath$.id.get_orderstep'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ğ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:
{
"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:
"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 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ılarSpitfire'da: /connections


