
Otomatik test pipeline’ı; bir değişiklik yapıldığında (ör. pull request açıldığında) testlerin belirli bir sırayla çalışması, sonuçların raporlanması ve gerekirse dağıtımın (CD) durdurulması için kurgulanan CI/CD akışıdır. Amaç sadece “testleri koşturmak” değil; hızlı geri bildirim, tekrarlanabilirlik ve ekipçe güven üretmektir.
Genel bir kural olarak, bir pipeline iki soruya cevap vermelidir:
Test Piramidi, testlerin katmanlı dağılımını önerir: tabanda çok sayıda hızlı unit testi, ortada daha az sayıda servis/integration testi, en üstte ise az sayıda fakat daha pahalı UI/E2E testi. Bu çerçeve, Martin Fowler’ın “Test Pyramid” yazısında da pratik bir dengeleme yaklaşımı olarak anlatılır: hızlı geri bildirim için alt katmanları güçlü tutarken, üst katmanı (E2E) amaç odaklı sınırlamak (kaynak).
Ancak piramit “evrensel oranlar” demek değildir. Mimari (monolit/mikroservis), ürün riski ve ekip olgunluğu; PR kapısına hangi testlerin gireceğini ve planlı koşulda neyin genişletileceğini belirler. 2025 tarihli akademik inceleme de piramidin, güvenlik kontrolleri ve AI destekli yaklaşımlarla genişletilmesini tartışırken aynı noktaya işaret eder: uyarlama gereklidir (kaynak).
Piramidi bir “test sayısı hedefi” olarak değil, pipeline maliyeti ve güven olarak düşünmek daha işlevseldir:
| Katman | Amaç | CI’de tipik kullanım | Başarısızlıkta ipucu |
|---|---|---|---|
| Unit | Fonksiyon/sınıf düzeyi doğruluk, hızlı geri bildirim | Her PR’da zorunlu | Genellikle kod değişikliğine doğrudan işaret eder |
| Integration/Servis | Bileşenlerin birlikte çalışması, API sözleşmeleri | PR’da kritik subset, ana dal/planlı koşuda geniş set | Konfigürasyon, bağımlılık, veri akışı sorunlarını açığa çıkarabilir |
| UI/E2E | Kullanıcı akışlarının uçtan uca doğrulanması | PR’da smoke; planlı koşuda regresyon | Ortam/veri/perf dalgalanması etkileyebilir; teşhis için iyi çıktı gerekir |
Birçok ekip için sürdürülebilir desen şudur: PR’da hızlı bir kapı koşusu, ana dala birleşince daha kapsamlı doğrulama ve belirli aralıklarla tam tarama. GitHub Actions belgeleri; bu tür akışlarda tetikleyiciler, runner seçenekleri, paralelleştirme ve temel CI kavramlarını özetler (kaynak).
Burada amaç “her şeyi” test etmek değil; yüksek sinyal üretmektir. Smoke seti genellikle en kritik 3–10 kullanıcı akışını kapsayan küçük bir gruptur.
Bu koşu daha uzun sürebilir; amaç, PR kapısına sığmayan riskli alanları düzenli ve izlenebilir şekilde doğrulamaktır.
UI/E2E tarafında modern ekiplerin değerlendirdiği araçlardan biri Playwright’tır. Playwright’ın resmi CI rehberi; CI entegrasyonu, raporlama ve trace alma gibi pratiklere odaklanır (kaynak). Bu tür çıktılar, özellikle CI koşullarında (kısıtlı yeniden üretim, headless çalıştırma, farklı runner performansı) sorunun nerede ve hangi adımda oluştuğunu görmeyi kolaylaştırabilir; yine de ortam/veri dalgalanması varsa tek başına “garanti” değildir.
Selenium ise ekosistemi geniş ve uzun süredir kullanılan bir seçenektir. Kurumsal ortamlarda mevcut altyapı ve ekip deneyimi Selenium’u mantıklı kılabilir. Seçim yaparken şu kriterleri değerlendirin:
GitHub Actions’ta bir CI tasarımını anlamanın en kolay yolu, akışı “tetikleyiciler” ve “job’lar” olarak bölmektir (resmi CI özeti: GitHub Docs).
Not: Aşağıdaki yapı kopyala-yapıştır amaçlı tam bir YAML değildir; pseudocode gibi, proje komutlarınıza göre uyarlamanız gereken bir iskelet olarak düşünün.
| Akış | Tetikleyici | Hedef |
|---|---|---|
| PR doğrulama | pull_request | Hızlı kapı: unit + kritik integration + E2E smoke |
| Ana dal doğrulama | push (main) | Daha geniş doğrulama ve raporlama |
| Planlı tam koşu | schedule (cron) | Tam E2E regresyonu + arşivleme |
| Job | Koşu | İçerik |
|---|---|---|
| unit | PR + main | Hızlı, güvenilir temel testler |
| integration | PR (subset) + main/schedule (geniş) | Servis bağımlılıkları / sözleşme kontrolleri |
| e2e_smoke | PR | Kritik kullanıcı akışları (küçük set) |
| e2e_full | main + schedule | Geniş regresyon + rapor/trace arşivi |
| Adım | Örnek amaç | Not |
|---|---|---|
| Checkout | Kodu al | Repo state’i sabitlenir |
| Dependencies | Bağımlılıkları kur | Cache, süreyi düşürmeye yardımcı olabilir (uygun tasarlanırsa) |
| Run tests | Testleri koştur | PR’da kısa; schedule’da geniş |
| Collect artifacts | Rapor/log sakla | CI’da teşhis için kritik |
CI’de E2E testleri bazen kimlik bilgileri veya API anahtarları gerektirebilir. Bu noktada iki temel ilke önemlidir (GitHub Actions ve Playwright CI dokümanları, secrets kullanımına özellikle dikkat çeker: GitHub Docs, Playwright CI):
Test sayısı arttıkça sık görülen iki problem: sürelerin uzaması ve güvenin azalması (özellikle flaky testler). Ölçeklenebilir bir tasarım için aşağıdaki yapı taşlarını birlikte düşünün.
CI sistemleri birden fazla job’ı paralel çalıştırabilir; bu, geri bildirim döngüsünü kısaltmanın en doğrudan yollarından biridir. GitHub Actions belgeleri, paralel iş yürütme ve runner seçenekleri için temel çerçeveyi sunar (kaynak). E2E tarafında ise testleri parçalara ayırmak toplam süreyi azaltabilir; ancak parçalama stratejisi (tarayıcı/özellik/dosya bazlı) testlerin dağılımına göre belirlenmelidir.
Cache ile bağımlılık indirmeyi hızlandırabilir; artifact ile rapor/trace/log gibi çıktıları saklayabilirsiniz. İyi bir pratik, şu iki soruya net cevap vermektir:
Flaky test, kod değişmeden bazen geçen bazen kalan testtir. Tamamen sıfırlamak her zaman kısa vadede mümkün olmayabilir; bu yüzden hedef, önce ölçmek ve etkisini sınırlamak olmalıdır.
Flaky testlerin kök nedenleri sıklıkla test izolasyonu, paylaşılan test verisi, zaman aşımı ve çevresel bağımlılıklardır. Hangi aracı kullandığınızdan bağımsız olarak, izole test verisi ve deterministik kurulum iyileştirmenin temelidir.
2025 tarihli akademik çalışma, test piramidi yaklaşımının modernleştirilerek güvenlik kontrollerinin ve AI destekli tekniklerin katmanlara entegre edilebileceğini tartışır (The Test Pyramid 2.0). Bunu pratikte şöyle ele almak daha güvenlidir:
Not: Bu yazı genel bilgilendirme amaçlıdır; pipeline tasarımını takım yapısı, mimari ve risk profiline göre uyarlamak gerekir.
Yorumlar