Test Paketi ve Test Senaryosu: Farkları Nelerdir?

Ashley Innocent

Ashley Innocent

4 March 2026

Test Paketi ve Test Senaryosu: Farkları Nelerdir?

Kurumsal İçin Apidog

Şirket İçi (On-Premises) Dağıtım

SSO ve RBAC

SOC 2 Uyumlu

Apidog Enterprise'ı Keşfedin

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?"

Test durumu örneği

Her test durumu şunları içerir:

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:

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 paketi örneği

Test paketleri test durumlarını şu şekilde düzenler:

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:

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ı:

  1. Yeni özellikler için test durumları yazın
  2. Test durumlarını mantıksal test paketlerinde gruplandırın
  3. Geliştirme sırasında belirli paketleri çalıştırın (hızlı geri bildirim)
  4. Dağıtımdan önce tüm paketleri çalıştırın (kapsamlı kontrol)
  5. 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:

İş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.

Apidog'da test durumu ekleme

Bir test durumu eklerken şunları seçebilirsiniz:

Apidog'da hata ayıklama vakalarından içe aktarma

Bir test durumu aşağıdaki bilgileri içerir:

Apidog'da Test Paketleri:

Apidog'da test paketleri modülü
Apidog'da yeni test paketi oluşturma
Apidog'da test paketi tasarım sayfası

Faydaları:

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ı:

  1. Yeni bir gereksinimi test ederken: Her gereksinimin en az bir test durumu olmalıdır
  2. Farklı bir senaryoyu test ederken: Geçerli giriş vs geçersiz giriş = iki test durumu
  3. Uç durumları test ederken: Boş giriş, maksimum giriş, özel karakterler
  4. Hata koşullarını test ederken: 400 hataları, 500 hataları, zaman aşımı senaryoları
  5. Farklı verileri test ederken: Farklı kullanıcı rolleri, farklı izinler

Yeni Bir Test Paketi Oluşturma Zamanları:

  1. 5'ten fazla ilgili test durumunuz olduğunda: Düzenlemek için gruplandırın
  2. Tam bir özelliği test ederken: Tüm kimlik doğrulama testleri bir arada
  3. Bir test kategorisi oluştururken: Smoke testleri, regresyon testleri, performans testleri
  4. Önceliğe göre organize ederken: Kritik testler, yüksek öncelik, düşük öncelik
  5. 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:

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:

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.

button

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.

API Tasarım-Öncelikli Yaklaşımı Apidog'da Uygulayın

API'leri oluşturmanın ve kullanmanın daha kolay yolunu keşfedin