KISA ÖZET
Bir test durumu, belirli bir davranışı veya gereksinimi kontrol eden tek bir test senaryosuyken, bir test paketi organize edilmiş yürütme için bir araya getirilen ilgili test durumlarının bir koleksiyonudur. Test durumları neyi ve nasıl test edeceğimizi tanımlar. Test paketleri, birden çok test durumunu verimli test iş akışları için mantıksal gruplara ayırır.
Giriş
Bir API oluşturuyorsunuz. İlk testinizi yazıyorsunuz. Sonra bir tane daha. Kısa süre içinde farklı dosyalara dağılmış 50 testiniz oluyor. Hangileri kimlik doğrulamayı test ediyor? Hangileri dağıtımdan önce çalışıyor? Sadece kritik testleri nasıl çalıştırırsınız?
Bu karışıklık, geliştiricilerin test durumları ve test paketleri arasındaki farkı anlamadıklarında ortaya çıkar. 1.200 geliştiriciyle yapılan 2023 tarihli bir anket, %67'sinin test organizasyonuyla mücadele ettiğini ve bunun daha yavaş CI/CD işlem hatlarına ve daha zor hata ayıklamaya yol açtığını ortaya koydu. Bu iki kavram, organize testin temelini oluşturur, ancak genellikle birbirinin yerine kullanılır veya yanlış anlaşılır.
Ayrımı anlamak, testleri mantıksal olarak düzenlemenize, verimli bir şekilde çalıştırmanıza ve API'niz büyüdükçe onları sürdürmenize yardımcı olur. İster Apidog ister başka bir araçla test yapıyor olun, yeni bir test durumunu ne zaman oluşturacağınızı ve durumları ne zaman paketler halinde gruplandıracağınızı bilmek, test iş akışınızı daha hızlı ve daha güvenilir hale getirir.
Bu kılavuzda, test durumları ve test paketleri arasındaki kesin farkları öğrenecek, gerçek API test örneklerini görecek ve maksimum verimlilik için her ikisini nasıl organize edeceğinizi keşfedeceksiniz. Sonunda, API testlerinizi her proje boyutu için tam olarak nasıl yapılandıracağınızı bileceksiniz.
Test Durumu Nedir?
Bir test durumu, yazılımınızın tek bir davranışını veya gereksinimini doğrulayan tek, spesifik bir test senaryosudur. Bunu kodunuza sorduğunuz tek bir soru olarak düşünün: "Bu doğru çalışıyor mu?"

Her test durumu şunları içerir:
- Test ID: Benzersiz tanımlayıcı (örn. TC_001)
- Test açıklaması: Ne test ettiğiniz
- Ön koşullar: Testten önce gereken kurulum
- Test adımları: Yapılacak eylemler
- Beklenen sonuç: Ne olması gerektiği
- Gerçek sonuç: Gerçekte ne olduğu
- Durum: Başarılı veya Başarısız
Bir Test Durumunun Anatomisi
Bir API uç noktası için basit bir test durumu örneği:
Test Durumu ID: TC_AUTH_001
Başlık: Geçerli kimlik bilgileriyle kullanıcı girişini doğrula
Ön koşullar: Veritabanında kullanıcı hesabı mevcut
Test Adımları:
1. /api/auth/login adresine POST isteği gönder
2. İstek gövdesine geçerli e-posta ve şifre ekle
3. Yanıt durum kodunu kontrol et
4. Bir JWT token'ının döndürüldüğünü doğrula
Beklenen Sonuç:
- Durum kodu: 200
- Yanıt geçerli bir JWT token'ı içeriyor
- Token 24 saat içinde sona eriyor
Gerçek Sonuç: [Yürütme sırasında doldurulacak]
Durum: [Başarılı/Başarısız]
Test durumları atomiktir. Yalnızca bir şeyi test ederler. Test durumunuz hem giriş hem de profil güncellemesini kontrol ediyorsa, bunu iki test durumuna ayırın.
Koddaki Test Durumu Örneği
Aynı test durumu JavaScript'te Jest kullanarak şöyle görünür:
describe('Authentication API', () => {
test('TC_AUTH_001: geçerli kimlik bilgileriyle kullanıcı girişi yapmalı', async () => {
const response = await fetch('https://api.example.com/auth/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
email: 'user@example.com',
password: 'SecurePass123'
})
});
expect(response.status).toBe(200);
const data = await response.json();
expect(data.token).toBeDefined();
expect(data.expiresIn).toBe(86400); // 24 saat saniye cinsinden
});
});
Bu test durumunun tek bir senaryoya odaklandığına dikkat edin: başarılı giriş. Başarısız giriş, şifre sıfırlama veya çıkış yapmayı test etmez. Bunlar ayrı test durumları olurdu.
Test Durumları Neden Önemlidir?
Test durumları size şunları sağlar:
- İzlenebilirlik: Her testi belirli bir gereksinimle eşleştirin
- Tekrarlanabilirlik: Aynı testi tutarlı bir şekilde çalıştırın
- Dokümantasyon: Testler canlı dokümantasyon görevi görür
- Hata ayıklama: Bir test başarısız olduğunda tam olarak neyin bozulduğunu tespit edin
Açık test durumları olmadan, aynı anda birden fazla şeyi kontrol eden belirsiz testlerle karşılaşırsınız. Başarısız olduklarında, hangi kısmın bozulduğunu bulmak için zaman kaybedersiniz.
Test Paketi Nedir?
Bir test paketi, organize edilmiş yürütme için bir araya getirilen test durumlarının bir koleksiyonudur. Test durumları bireysel sorularsa, bir test paketi ilgili soruları içeren bir sınavdır.

Test paketleri test durumlarını şu şekilde düzenler:
- Özellik: Kullanıcı kimlik doğrulaması için tüm testler
- Öncelik: Dağıtımdan önce geçmesi gereken kritik testler
- Tip: Smoke testler, regresyon testleri, entegrasyon testleri
- Ortam: Staging vs üretim için testler
- Yürütme süresi: Hızlı testler vs yavaş testler
Test Paketi Yapısı
Test paketleri test durumlarını şöyle düzenler:
Test Paketi: Kimlik Doğrulama Modülü
├── Test Durumu 1: Geçerli kimlik bilgileriyle giriş
├── Test Durumu 2: Geçersiz şifreyle giriş
├── Test Durumu 3: Mevcut olmayan e-postayla giriş
├── Test Durumu 4: Süresi dolmuş token ile giriş
├── Test Durumu 5: Başarılı çıkış
└── Test Durumu 6: Erişim token'ını yenile
Test Paketi: Kullanıcı Profili Modülü
├── Test Durumu 1: Kullanıcı profilini al
├── Test Durumu 2: Profil bilgilerini güncelle
├── Test Durumu 3: Profil resmi yükle
└── Test Durumu 4: Kullanıcı hesabını sil
Her test paketi birden çok ilgili test durumu içerir. Bir paketin tamamını aynı anda çalıştırabilir veya çalıştırmak için bireysel test durumlarını seçebilirsiniz.
Koddaki Test Paketi Örneği
JavaScript'te test paketleri şöyle görünür:
// Kimlik doğrulama test paketi
describe('Kimlik Doğrulama API Test Paketi', () => {
test('TC_AUTH_001: Geçerli kimlik bilgileriyle giriş', async () => {
// Test uygulaması
});
test('TC_AUTH_002: Geçersiz şifreyle giriş', async () => {
// Test uygulaması
});
test('TC_AUTH_003: Mevcut olmayan e-postayla giriş', async () => {
// Test uygulaması
});
test('TC_AUTH_004: Başarılı çıkış', async () => {
// Test uygulaması
});
});
// Kullanıcı Profili test paketi
describe('Kullanıcı Profili API Test Paketi', () => {
test('TC_PROFILE_001: Kullanıcı profilini al', async () => {
// Test uygulaması
});
test('TC_PROFILE_002: Profil bilgilerini güncelle', async () => {
// Test uygulaması
});
});
describe() blokları test paketleri oluşturur. İçindeki her test() bir test durumudur. Tüm kimlik doğrulama testlerini tek bir komutla çalıştırabilir veya tüm test dosyasını çalıştırabilirsiniz.
İç İçe Test Paketleri
Test paketleri, karmaşık projeler için başka test paketleri içerebilir:
describe('API Test Paketi', () => {
describe('Kimlik Doğrulama', () => {
describe('Giriş', () => {
test('geçerli kimlik bilgileriyle', () => {});
test('geçersiz şifreyle', () => {});
});
describe('Kayıt', () => {
test('geçerli verilerle', () => {});
test('yinelenen e-postayla', () => {});
});
});
describe('Kullanıcı Yönetimi', () => {
test('kullanıcı listesini al', () => {});
test('kullanıcı rolünü güncelle', () => {});
});
});
Bu, bir hiyerarşi oluşturur: Ana Paket → Alt Paketler → Test Durumları. Bu yapı, API'nizin mimarisini yansıtır.
Test Paketleri ve Test Durumları Arasındaki Temel Farklar
İşte açık bir karşılaştırma:
| Yön | Test Durumu | Test Paketi |
|---|---|---|
| Tanım | Tek test senaryosu | Test durumlarının koleksiyonu |
| Kapsam | Tek bir spesifik davranışı test eder | Birden çok ilgili davranışı test eder |
| Granülerlik | Atomik (ayrılamaz) | Birleşik (birden çok öğe içerir) |
| Yürütme | Tek bir test çalıştırır | Birden çok test çalıştırır |
| Amaç | Tek bir gereksinimi doğrula | Testleri organize et ve gruplandır |
| Sonuç | Başarılı veya Başarısız | Tüm test sonuçlarının özeti |
| Örnek | "Geçerli kimlik bilgileriyle giriş" | "Kimlik Doğrulama Modülü Testleri" |
| Kod | Tek test() veya it() fonksiyonu |
Tek describe() veya suite() bloğu |
| Yeniden Kullanılabilirlik | Birden çok pakete eklenebilir | Paylaşılan test durumları içerebilir |
| Bakım | Tek bir testi güncelle | Birden çok testi aynı anda güncelle |
Konteyner Analojisi
Şu şekilde düşünün:
- Test Durumu = Bilgisayarınızdaki tek bir dosya
- Test Paketi = İlgili dosyaları içeren bir klasör
Klasörsüz dosyalar (paketsiz test durumları) olabilir, ancak klasörler dosyaları düzenlemeye yardımcı olur (paketler test durumlarını düzenlemeye yardımcı olur). Ayrıca klasörlerin içinde klasörler (iç içe test paketleri) de olabilir.
Yürütme Farkları
Bir test durumunu çalıştırdığınızda:
# Belirli bir testi çalıştır
npm test -- --testNamePattern="Geçerli kimlik bilgileriyle giriş"
Bir test paketini çalıştırdığınızda:
# Kimlik Doğrulama paketindeki tüm testleri çalıştır
npm test -- --testPathPattern="authentication"
Test paketleri, tüm test koleksiyonunuzu çalıştırmadan ilgili test gruplarını çalıştırmanıza olanak tanır.
Test Paketleri ve Test Durumları Birlikte Nasıl Çalışır?
Test durumları ve test paketleri birbirleriyle rekabet eden kavramlar değildir. Düzenli, bakımı kolay test kodu oluşturmak için birlikte çalışırlar.
İlişki
Proje
└── Test Paketleri (Klasörler)
└── Test Durumları (Dosyalar)
└── Test Adımları (Kod)
Her test durumu en az bir test paketine aittir. Bir test durumu birden çok pakete ait olabilir:
// smoke-tests.suite.js
describe('Smoke Testler', () => {
test('TC_SMOKE_001: API sağlık kontrolü', () => {});
test('TC_SMOKE_002: Veritabanı bağlantısı', () => {});
test('TC_AUTH_001: Geçerli kimlik bilgileriyle giriş', () => {}); // Paylaşılan
});
// authentication.suite.js
describe('Kimlik Doğrulama Testleri', () => {
test('TC_AUTH_001: Geçerli kimlik bilgileriyle giriş', () => {}); // Paylaşılan
test('TC_AUTH_002: Geçersiz şifreyle giriş', () => {});
test('TC_AUTH_003: Şifre sıfırlama akışı', () => {});
});
TC_AUTH_001 test durumu hem smoke test paketinde hem de kimlik doğrulama test paketinde görünür. Bu yeniden kullanılabilirlik, aynı testi farklı bağlamlarda tekrarlamadan çalıştırmanıza olanak tanır.
İş Akışı Entegrasyonu
Tipik bir geliştirme iş akışında nasıl çalıştıkları:
- Yeni özellikler için test durumları yazın
- Test durumlarını mantıksal test paketlerinde gruplandırın
- Geliştirme sırasında belirli paketleri çalıştırın (hızlı geri bildirim)
- Dağıtımdan önce tüm paketleri çalıştırın (kapsamlı kontrol)
- Sorunlu alanları belirlemek için paket sonuçlarını analiz edin
Yürütme Stratejisi
Farklı durumlar farklı yürütme stratejileri gerektirir:
# Geliştirme sırasında: Tek bir test durumu çalıştır
npm test -- --testNamePattern="TC_AUTH_001"
# Commit etmeden önce: İlgili test paketini çalıştır
npm test -- authentication.test.js
# CI/CD'de: Tüm kritik test paketlerini çalıştır
npm test -- --testPathPattern="(smoke|critical)"
# Sürümden önce: Her şeyi çalıştır
npm test
Bu katmanlı yaklaşım zamandan tasarruf sağlar. Geliştirme sırasında 5 dakikada 200 test yerine 10 saniyede 5 smoke testi çalıştırın. Tam paketi CI/CD için saklayın.
API Testinde Test Paketi ve Test Durumu
API testlerinin, test durumlarını ve test paketlerini nasıl organize edeceğinizi etkileyen benzersiz özellikleri vardır.
API Test Durumu Yapısı
API test durumları genellikle şunları doğrular:
- İstek doğrulama: Doğru uç nokta, metod, başlıklar, gövde
- Yanıt doğrulama: Durum kodu, yanıt gövdesi, başlıklar
- Veri doğrulama: Doğru veri formatı, değerler, tipler
- Hata işleme: Doğru hata mesajları ve kodları
- Performans: Kabul edilebilir sınırlar içindeki yanıt süresi
İşte eksiksiz bir API test durumu:
test('TC_USER_001: POST /api/users ile yeni kullanıcı oluştur', async () => {
// Hazırlık
const newUser = {
name: 'John Doe',
email: 'john@example.com',
role: 'user'
};
// Eylem
const response = await fetch('https://api.example.com/users', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer test-token'
},
body: JSON.stringify(newUser)
});
const data = await response.json();
// Doğrulama
expect(response.status).toBe(201);
expect(data.id).toBeDefined();
expect(data.name).toBe(newUser.name);
expect(data.email).toBe(newUser.email);
expect(data.createdAt).toBeDefined();
});
Bu test durumu tek bir API işlemini kontrol eder: kullanıcı oluşturma. Kullanıcıları güncelleme, silme veya listeleme işlemlerini test etmez.
API Test Paketi Organizasyonu
API'ler için test paketlerini şu şekilde düzenleyin:
1. Uç Noktaya Göre
Test Paketi: /api/users
├── GET /api/users (kullanıcıları listele)
├── POST /api/users (kullanıcı oluştur)
├── GET /api/users/:id (kullanıcıyı al)
├── PUT /api/users/:id (kullanıcıyı güncelle)
└── DELETE /api/users/:id (kullanıcıyı sil)
2. Özelliğe Göre
Test Paketi: Kullanıcı Yönetimi
├── Kullanıcı kaydı
├── Kullanıcı kimlik doğrulaması
├── Profil yönetimi
└── Hesap silme
3. Test Tipine GöreTest Paketi: Smoke Testleri ├── API sağlık kontrolü ├── Veritabanı bağlantısı └── Kritik uç noktalar yanıt veriyor Test Paketi: Entegrasyon Testleri ├── Kullanıcı kayıt akışı ├── Sipariş işleme akışı └── Ödeme işleme akışı
Apidog Test Paketi Yönetimi
Apidog, API test paketlerini görsel ve sezgisel hale getirir. Kod yazmak yerine, GUI'de test durumları oluşturur ve bunları sürükle ve bırak ile test paketlerinde gruplandırırsınız. Bu, kod tabanlı yaklaşımlara kıyasla test oluşturma süresini %60 oranında azaltır.
Apidog, test organizasyonunu şu şekilde ele alır:
Apidog'da Test Durumları:
Test durumlarını birkaç farklı şekilde oluşturabilirsiniz:
Uç nokta detay sayfasının Test Durumları sekmesinde, manuel olarak bir tane oluşturmak için + Vaka Ekle'ye tıklayın.
Bir test durumu eklerken şunları seçebilirsiniz:
- Mevcut hata ayıklama durumlarını test durumlarına kopyalamak veya taşımak için Hata Ayıklama Vakalarından İçe Aktar.
- Kopyala: Hızlı doğrulama için hata ayıklama durumuna hala ihtiyacınız olduğunda, ancak onu bir test durumu olarak da istediğinizde bunu kullanın.
- Taşı: Hata ayıklama durumunun artık sıkça hata ayıklama için kullanılmadığı ve öncelikli olarak istisnaları test etmek için yazıldığı durumlarda bunu kullanın. Bu, onu doğrudan bir test durumuna dönüştürür ve test durumları başlangıçta hata ayıklama durumları olarak oluşturulduysa geçişi hızlandırır.
Bir test durumu aşağıdaki bilgileri içerir:
- Grup: Test amacına göre organize edilmiş (pozitif, negatif, sınır vb.).
- Vaka Adı: Test durumunun adı.
- İstek Parametreleri: Yol, Sorgu, Başlık ve form-data Gövde parametreleri.
- İstek Gövdesi: RAW, JSON, XML vb. destekler.
- Ön/Son İşlemciler
- Yanıt Doğrulama: Doğrulamayı etkinleştirin/devre dışı bırakın ve doğrulanacak yanıt bileşenlerini belirtin.
Apidog'da Test Paketleri:
- Apidog'u açtıktan sonra
Testlermodülüne gidin ve ardındanTest Paketi'ni bulun.
+ Yenidüğmesine tıklayın (veya klasörün yanındaki...menüsüne tıklayın veTest Paketi Oluştur'u seçin).- Açılır pencerede test paketi adını doldurun ve öncelik gibi temel bilgileri ayarlayın.
- Başarıyla oluşturmak için
Devam Et'e tıklayın ve test paketi tasarım sayfasına girin.
Faydaları:
- Temel testler için kodlama gerektirmez
- Görsel test organizasyonu
- Yerleşik iddialar ve doğrulamalar
- Otomatik test raporu oluşturma
- Otomatik çalıştırmalar için CI/CD entegrasyonu
Gerekirse Apidog test paketlerini koda aktarabilirsiniz, bu da size GUI ve kod tabanlı testler arasında esneklik sağlar.
Test Durumları ve Test Paketleri Ne Zaman Kullanılmalı?
Yeni bir test durumunu ne zaman oluşturacağınızı ve durumları ne zaman paketlerde gruplandıracağınızı bilmek, sürdürülebilir testler için çok önemlidir.
Yeni Bir Test Durumu Oluşturma Zamanları:
- Yeni bir gereksinimi test ederken: Her gereksinimin en az bir test durumu olmalıdır
- Farklı bir senaryoyu test ederken: Geçerli giriş vs geçersiz giriş = iki test durumu
- Uç durumları test ederken: Boş giriş, maksimum giriş, özel karakterler
- Hata koşullarını test ederken: 400 hataları, 500 hataları, zaman aşımı senaryoları
- Farklı verileri test ederken: Farklı kullanıcı rolleri, farklı izinler
Yeni Bir Test Paketi Oluşturma Zamanları:
- 5'ten fazla ilgili test durumunuz olduğunda: Düzenlemek için gruplandırın
- Tam bir özelliği test ederken: Tüm kimlik doğrulama testleri bir arada
- Bir test kategorisi oluştururken: Smoke testleri, regresyon testleri, performans testleri
- Önceliğe göre organize ederken: Kritik testler, yüksek öncelik, düşük öncelik
- Ortama göre ayırırken: Staging testleri, üretim testleri
Kaçınılması Gereken Anti-Desenler
Bunu yapmayın:
// KÖTÜ: Her şeyi test eden devasa bir test durumu
test('Tüm kullanıcı akışını test et', () => {
// Kullanıcı kaydet
// Kullanıcı girişi yap
// Profili güncelle
// Gönderi oluştur
// Gönderiyi sil
// Çıkış yap
// Hesabı sil
});
Bunun yerine bunu yapın:
// İYİ: Organize edilmiş paketlerde ayrı test durumları
describe('Kullanıcı Yönetimi Paketi', () => {
test('TC_001: Yeni kullanıcı kaydet', () => {});
test('TC_002: Kimlik bilgileriyle giriş yap', () => {});
test('TC_003: Kullanıcı profilini güncelle', () => {});
});
describe('İçerik Yönetimi Paketi', () => {
test('TC_004: Yeni gönderi oluştur', () => {});
test('TC_005: Gönderiyi sil', () => {});
});
Bunu yapmayın:
// KÖTÜ: Çok fazla iç içe paket
describe('API', () => {
describe('V1', () => {
describe('Kullanıcılar', () => {
describe('Kimlik Doğrulama', () => {
describe('Giriş', () => {
describe('Geçerli Kimlik Bilgileri', () => {
test('e-posta ile', () => {});
});
});
});
});
});
});
Bunun yerine bunu yapın:
// İYİ: Makul iç içe geçme (maksimum 2-3 seviye)
describe('API V1: Kullanıcı Kimlik Doğrulaması', () => {
describe('Giriş', () => {
test('geçerli e-posta ve şifreyle', () => {});
test('geçersiz şifreyle', () => {});
});
describe('Kayıt', () => {
test('geçerli verilerle', () => {});
});
});
Test Durumlarını ve Test Paketlerini Düzenlemek İçin En İyi Uygulamalar
Testlerinizi düzenli ve sürdürülebilir tutmak için bu kanıtlanmış stratejileri izleyin.
1. Açık Adlandırma Kuralları Kullanın
Test Durumları:
// İyi: Açıklayıcı ve spesifik
test('kullanıcı geçerli kimlik bilgileriyle giriş yaptığında 200 dönmeli', () => {});
test('şifre yanlış olduğunda 401 dönmeli', () => {});
test('kullanıcı mevcut olmadığında 404 dönmeli', () => {});
// Kötü: Belirsiz ve anlaşılmaz
test('giriş testi', () => {});
test('test 1', () => {});
test('kullanıcıyı kontrol et', () => {});
Test Paketleri:
// İyi: Açık kapsam ve amaç
describe('Kimlik Doğrulama API - Giriş Uç Noktası', () => {});
describe('Kullanıcı Profili Yönetimi', () => {});
describe('Ödeme İşleme Entegrasyon Testleri', () => {});
// Kötü: Çok genel
describe('Testler', () => {});
describe('API', () => {});
describe('Şeyler', () => {});
2. Test Durumlarını Bağımsız Tutun
Her test durumu, diğer testlere bağımlı olmadan bağımsız olarak çalışmalıdır:
// KÖTÜ: Testler birbirine bağlı
let userId;
test('kullanıcı oluştur', async () => {
const response = await createUser();
userId = response.id; // Durum depolama
});
test('kullanıcıyı güncelle', async () => {
await updateUser(userId); // Önceki teste bağlı
});
// İYİ: Her test bağımsızdır
test('kullanıcı oluştur', async () => {
const response = await createUser();
expect(response.status).toBe(201);
await cleanup(response.id); // Testten sonra temizlik
});
test('kullanıcıyı güncelle', async () => {
const user = await createUser(); // Kendi test verisini oluştur
const response = await updateUser(user.id);
expect(response.status).toBe(200);
await cleanup(user.id);
});
3. Paketleri Özelliğe veya Modüle Göre Düzenleyin
Test organizasyonunuzda API yapınızı yansıtın:
src/
├── auth/
│ ├── login.js
│ └── register.js
├── users/
│ ├── profile.js
│ └── settings.js
└── posts/
├── create.js
└── delete.js
tests/
├── auth/
│ ├── login.test.js (Test Paketi)
│ └── register.test.js (Test Paketi)
├── users/
│ ├── profile.test.js (Test Paketi)
│ └── settings.test.js (Test Paketi)
└── posts/
├── create.test.js (Test Paketi)
└── delete.test.js (Test Paketi)
4. Kurulum ve Yıkım Kancaları Kullanın
Önce/sonra kancalarıyla tekrarları azaltın:
describe('Kullanıcı API Test Paketi', () => {
let authToken;
let testUser;
// Bu paketteki tüm testlerden önce bir kez çalışır
beforeAll(async () => {
authToken = await getAuthToken();
});
// Her test durumundan önce çalışır
beforeEach(async () => {
testUser = await createTestUser();
});
// Her test durumundan sonra çalışır
afterEach(async () => {
await deleteTestUser(testUser.id);
});
// Bu paketteki tüm testlerden sonra bir kez çalışır
afterAll(async () => {
await revokeAuthToken(authToken);
});
test('TC_001: Kullanıcı profilini al', async () => {
// testUser ve authToken mevcut
});
test('TC_002: Kullanıcı profilini güncelle', async () => {
// testUser ve authToken mevcut
});
});
5. Esnek Yürütme İçin Testleri Etiketleyin
Belirli test gruplarını çalıştırmak için etiketler veya kategoriler kullanın:
describe('Kimlik Doğrulama Paketi', () => {
test('[smoke] API sağlık kontrolü', () => {});
test('[critical] Geçerli kimlik bilgileriyle giriş', () => {});
test('[regression] Süresi dolmuş token ile giriş', () => {});
test('[edge-case] Şifrede özel karakterlerle giriş', () => {});
});
// Yalnızca smoke testlerini çalıştır
// npm test -- --testNamePattern="smoke"
// Kritik testleri çalıştır
// npm test -- --testNamePattern="critical"
6. Test Paketi Hiyerarşisini Koruyun
Büyük projeler için açık bir hiyerarşi oluşturun:
Seviye 1: Test Tipi (Smoke, Entegrasyon, E2E)
└── Seviye 2: Özellik Modülü (Kimlik Doğrulama, Kullanıcılar, Siparişler)
└── Seviye 3: Belirli Fonksiyonellik (Giriş, Kayıt)
└── Seviye 4: Test Durumları (Geçerli, Geçersiz, Uç Durumlar)
Örnek:
describe('[Entegrasyon] Kullanıcı Yönetimi', () => {
describe('Kimlik Doğrulama', () => {
describe('Giriş', () => {
test('geçerli kimlik bilgileriyle', () => {});
test('geçersiz şifreyle', () => {});
test('mevcut olmayan e-postayla', () => {});
});
});
});
Kaçınılması Gereken Yaygın Hatalar
1. Aşırı Kapsamlı Test Durumları Oluşturma
Sorun:
test('kullanıcı işlevselliğini test et', () => {
// Kayıt, giriş, profil güncelleme ve silmeyi test eder
// Bu başarısız olursa, hangi kısım bozuldu?
});
Çözüm:
test('yeni kullanıcı kaydetmeli', () => {});
test('kayıtlı kullanıcı giriş yapmalı', () => {});
test('kullanıcı profilini güncellemelidir', () => {});
test('kullanıcı hesabını silmelidir', () => {});
2. İlgili Test Durumlarını Gruplandırmama
Sorun:
test('giriş testi 1', () => {});
test('profil testi 1', () => {});
test('giriş testi 2', () => {});
test('sipariş testi 1', () => {});
test('profil testi 2', () => {});
Çözüm:
describe('Giriş Testleri', () => {
test('test 1', () => {});
test('test 2', () => {});
});
describe('Profil Testleri', () => {
test('test 1', () => {});
test('test 2', () => {});
});
3. Çok Fazla İç İçe Paket Oluşturma
Sorun:
describe('API', () => {
describe('Sürüm 1', () => {
describe('Kullanıcılar', () => {
describe('Profil', () => {
describe('Güncelleme', () => {
test('geçerli verilerle', () => {});
});
});
});
});
});
Çözüm:
describe('API V1: Kullanıcı Profili', () => {
test('geçerli verilerle profili güncellemelidir', () => {});
});
4. Test Yürütme Sırasını Göz Ardı Etme
Sorun:
describe('Kullanıcı Akışı', () => {
test('kullanıcıyı sil', () => {}); // İlk çalışır
test('kullanıcı oluştur', () => {}); // İkinci çalışır
test('kullanıcıyı güncelle', () => {}); // Üçüncü çalışır
});
Çözüm:
describe('Kullanıcı Akışı', () => {
test('1. kullanıcı oluştur', () => {});
test('2. kullanıcıyı güncelle', () => {});
test('3. kullanıcıyı sil', () => {});
});
// Veya uygun kurulumu sağlamak için beforeEach kullanın
5. Açıklayıcı Adlar Kullanmama
Sorun:
describe('Paket 1', () => {
test('test 1', () => {});
test('test 2', () => {});
});
Çözüm:
describe('Kimlik Doğrulama API Testleri', () => {
test('başarılı girişle JWT token dönmelidir', () => {});
test('geçersiz kimlik bilgileriyle 401 dönmelidir', () => {});
});
Gerçek Dünya Örnekleri
Örnek 1: E-ticaret API Test Organizasyonu
// Smoke Test Paketi - Her commit'te çalışır
describe('[Smoke] Kritik API Uç Noktaları', () => {
test('TC_SMOKE_001: API sağlık kontrolü 200 dönüyor', async () => {
const response = await fetch('https://api.shop.com/health');
expect(response.status).toBe(200);
});
test('TC_SMOKE_002: Veritabanı bağlantısı aktif', async () => {
const response = await fetch('https://api.shop.com/db-status');
expect(response.json()).toHaveProperty('connected', true);
});
});
// Kimlik Doğrulama Test Paketi
describe('[Entegrasyon] Kimlik Doğrulama Modülü', () => {
describe('Kullanıcı Kaydı', () => {
test('TC_AUTH_001: Geçerli e-posta ve şifreyle kaydol', async () => {
// Test uygulaması
});
test('TC_AUTH_002: Yinelenen e-posta ile kaydı reddet', async () => {
// Test uygulaması
});
test('TC_AUTH_003: Zayıf şifreleri reddet', async () => {
// Test uygulaması
});
});
describe('Kullanıcı Girişi', () => {
test('TC_AUTH_004: Geçerli kimlik bilgileriyle giriş yap', async () => {
// Test uygulaması
});
test('TC_AUTH_005: Geçersiz şifreyi reddet', async () => {
// Test uygulaması
});
});
});
// Ürün Yönetimi Test Paketi
describe('[Entegrasyon] Ürün Yönetimi', () => {
test('TC_PROD_001: Ürün listesini al', async () => {
// Test uygulaması
});
test('TC_PROD_002: ID ile ürünü al', async () => {
// Test uygulaması
});
test('TC_PROD_003: Adına göre ürün ara', async () => {
// Test uygulaması
});
test('TC_PROD_004: Ürünleri kategoriye göre filtrele', async () => {
// Test uygulaması
});
});
// Sipariş İşleme Test Paketi
describe('[Entegrasyon] Sipariş İşleme', () => {
test('TC_ORDER_001: Geçerli öğelerle sipariş oluştur', async () => {
// Test uygulaması
});
test('TC_ORDER_002: Doğru sipariş toplamını hesapla', async () => {
// Test uygulaması
});
test('TC_ORDER_003: İndirim kodu uygula', async () => {
// Test uygulaması
});
test('TC_ORDER_004: Ödemeyi işle', async () => {
// Test uygulaması
});
});
Örnek 2: Apidog Test Paketi Yapısı
Apidog'da testleri görsel olarak düzenlersiniz:
📁 E-ticaret API Testleri
📁 Smoke Testleri (Paket)
✓ API Sağlık Kontrolü (Test Durumu)
✓ Veritabanı Durumu (Test Durumu)
📁 Kimlik Doğrulama (Paket)
📁 Kayıt (Alt Paket)
✓ Geçerli Kayıt (Test Durumu)
✓ Yinelenen E-posta (Test Durumu)
✓ Zayıf Şifre (Test Durumu)
📁 Giriş (Alt Paket)
✓ Geçerli Giriş (Test Durumu)
✓ Geçersiz Şifre (Test Durumu)
📁 Ürünler (Paket)
✓ Ürünleri Listele (Test Durumu)
✓ Ürün Detaylarını Al (Test Durumu)
✓ Ürün Ara (Test Durumu)
📁 Siparişler (Paket)
✓ Sipariş Oluştur (Test Durumu)
✓ Toplamı Hesapla (Test Durumu)
✓ İndirim Uygula (Test Durumu)
Apidog'daki her test durumu şunları içerir:
- İstek yapılandırması (URL, metod, başlıklar, gövde)
- İstek öncesi betikler (kurulum)
- İddialar (doğrulamalar)
- Yanıt sonrası betikler (temizleme)
Bireysel test durumlarını, tüm paketleri veya birden çok paketten durumları birleştiren özel test çalıştırmaları oluşturabilirsiniz.
Sonuç
Test durumları ve test paketleri, API testinde farklı ancak tamamlayıcı amaçlara hizmet eder. Test durumları, belirli girdiler ve beklenen çıktılarla bireysel davranışları doğrular. Test paketleri, ilgili test durumlarını verimli yürütme ve bakım için mantıksal gruplara ayırır.
Anahtar çıkarımlar:
- Test durumları, tek senaryolar için atomik testlerdir
- Test paketleri, ilgili test durumlarının koleksiyonlarıdır
- Belirli gereksinimleri doğrulamak için test durumlarını kullanın
- Test gruplarını organize etmek ve yürütmek için test paketlerini kullanın
- Test durumlarını bağımsız ve odaklanmış tutun
- Paketleri özelliğe, önceliğe veya test tipine göre düzenleyin
- Her ikisini de açık ve açıklayıcı bir şekilde adlandırın
- Karmaşık test hiyerarşilerini görsel olarak yönetmek için Apidog gibi araçları kullanın
Her API uç noktası için odaklanmış test durumları yazarak başlayın. Test koleksiyonunuz büyüdükçe, ilgili durumları paketlerde gruplandırın. Testleri kolayca bulmak ve çalıştırmak için etiketler ve adlandırma kuralları kullanın. İster kodda test yazın ister Apidog gibi bir araç kullanın, prensipler aynı kalır: atomik test durumları, mantıksal test paketleri, açık organizasyon.
API testlerinizi düzenlemeye hazır mısınız? Apidog'un görsel test paketi yönetimini deneyin - kod yazmadan test durumları oluşturun, düzenleyin ve çalıştırın. Test kurulum sürenizi %60 oranında azaltın ve ilk test paketinizi 5 dakikadan kısa sürede çalıştırın.
Sıkça Sorulan Sorular
Test durumu ile test paketi arasındaki temel fark nedir?
Bir test durumu, belirli bir davranışı veya gereksinimi doğrulayan tek bir testtir. Bir test paketi, organize edilmiş yürütme için bir araya getirilen birden çok ilgili test durumunun bir koleksiyonudur. Test durumlarını bireysel sorular, test paketlerini ise bu soruları içeren sınav olarak düşünebilirsiniz.
Bir test durumu birden çok test paketine ait olabilir mi?
Evet. Tek bir test durumu birden çok test paketine dahil edilebilir. Örneğin, kritik bir giriş test durumu hem "Smoke Testler" paketinizde hem de "Kimlik Doğrulama Testleri" paketinizde görünebilir. Bu yeniden kullanılabilirlik, farklı amaçlar için farklı test kombinasyonlarını çalıştırmanıza yardımcı olur.
Bir test paketinde kaç test durumu olmalıdır?
Kesin bir kural olmamakla birlikte, bir paket başına 5-15 test durumu iyi bir aralıktır. Bir pakette 20'den fazla test durumunuz varsa, bunu daha küçük, daha odaklanmış paketlere ayırmayı düşünün. 5'ten az test durumunuz varsa, bir pakete hiç ihtiyacınız olmayabilir.
Önce test durumlarını mı yoksa test paketlerini mi yazmalıyım?
Önce test durumlarını yazın. Belirli davranışlar için bireysel testler oluşturarak başlayın. Birkaç ilgili test durumunuz olduğunda, bunları test paketlerinde gruplandırın. Bu aşağıdan yukarıya yaklaşım, test durumlarınızın odaklanmış ve paketlerinizin mantıksal olarak düzenlenmiş olmasını sağlar.
Test paketi ile test senaryosu arasındaki fark nedir?
Bir test senaryosu, neyi test edeceğinize dair üst düzey bir açıklamadır (örn. "Kullanıcı giriş akışı"). Bir test paketi, yürütülebilir test durumlarının gerçek koleksiyonudur. Bir test senaryosu, o senaryonun farklı yönlerini doğrulayan birden çok test durumu içeren bir test paketi haline gelebilir.
Büyük API'ler için test paketlerini nasıl düzenlerim?
Hiyerarşik bir yapı kullanın: en üst seviyede özelliğe veya modüle göre, ardından fonksiyonelliğe göre, sonra test tipine göre düzenleyin. Örneğin: "Kullanıcı Yönetimi" (modül) → "Kimlik Doğrulama" (fonksiyonellik) → "Giriş Testleri" (test paketi) → bireysel test durumları. İç içe geçmeyi maksimum 2-3 seviyede tutun.
Test paketleri başka test paketleri içerebilir mi?
Evet. Test paketleri, hiyerarşiler oluşturmak için iç içe yerleştirilebilir. Örneğin, bir "API Testleri" paketi "Kimlik Doğrulama Testleri" ve "Kullanıcı Yönetimi Testleri" alt paketlerini içerebilir. Ancak, testlerin gezinmesini ve bakımını zorlaştırdığı için aşırı iç içe geçmekten (3 seviyeden fazla) kaçının.
Test durumlarını ve test paketlerini yönetmeye hangi araçlar yardımcı olur?
Popüler araçlar arasında JavaScript için Jest ve Mocha, Python için Pytest, Java için JUnit ve API testi için Postman bulunur. Apidog, kodlama yapmadan görsel test paketi yönetimi sunar, bu da bir GUI arayüzü aracılığıyla API test durumlarını düzenlemeyi ve yürütmeyi kolaylaştırır.
