E2E Test Nedir?
Uygulamanın tüm katmanlarını (UI, iş mantığı, API, veritabanı) birlikte test etme. Gerçek kullanıcı senaryolarını simüle eder. 2026 itibarıyla Maestro, basitliği ve güvenilirliği ile en hızlı büyüyen E2E test aracıdır.
Unit vs E2E
| Özellik | Unit Test | E2E Test |
|---|---|---|
| Kapsam | Tek fonksiyon | Tüm akış |
| Hız | Çok hızlı | Yavaş (dakikalar) |
| Güvenilirlik | Yüksek | Flaky olabilir |
| Kurulum | Kolay | Karmaşık |
| Bakım | Düşük | Yüksek |
| Değer | Mantık hataları | Entegrasyon hataları |
Araçlar
Detox (React Native)
- Wix tarafından geliştirildi
- Gray-box testing (uygulama state'ine erişim)
- iOS ve Android
- Jest ile entegre
- CI/CD uyumlu (EAS Build ile çalışır)
- Senkron test (animasyon bekleme otomatik)
Maestro
- Basit YAML formatında test yazma (düşük öğrenme eğrisi)
- iOS ve Android
- React Native, Flutter, Native destekli
- Maestro Cloud ile bulut test
- Öğrenmesi en kolay araç
- Görsel test recording ile test oluşturma
Appium
- Cross-platform (iOS + Android + Web)
- WebDriver protokolü
- Birçok dil desteği (JS, Python, Java)
- Selenium benzeri API
- Olgun ve yaygın (enterprise)
XCUITest (iOS)
- Apple'ın yerleşik UI test framework'ü
- Swift/ObjC ile test yazma
- Xcode entegre, performans testi desteği
Espresso (Android)
- Google'ın yerleşik UI test framework'ü
- Kotlin/Java ile test yazma
- Hızlı ve güvenilir, Android Studio entegre
Maestro YAML Örneği
# login-test.yaml
appId: com.example.myapp
---
- launchApp
- tapOn: "E-posta"
- inputText: "test@example.com"
- tapOn: "Şifre"
- inputText: "password123"
- tapOn: "Giriş Yap"
- assertVisible: "Ana Sayfa"
Test Senaryoları (Öncelik Sırası)
- Kritik akışlar: Kayıt, giriş, ödeme (para kaybı riski)
- Core özellikler: Ana değer önerisini sunan akışlar
- Regresyon: Daha önce hata olan akışlar
- Edge case'ler: Hata durumları, boş veri, offline
Flaky Test Sorunu
E2E testlerde en büyük sorun: Bazen geçiyor, bazen geçmiyor.
Nedenler
- Animasyon zamanlama sorunları
- Ağ bekleme sorunları (API yavaşlığı)
- Test sırası bağımlılığı
- Cihaz/emülatör durumu (bellek, CPU)
Çözümler
- Retry mekanizması (max 2-3 retry)
- Explicit wait kullan (sabit süre değil, element görünene kadar)
- Her test izole olsun (temiz başlangıç, app state reset)
- Deterministik test verisi kullan (mock API veya seed data)
- Animasyonları test modunda devre dışı bırak
Cloud Test Servisleri
| Servis | Özellik | Fiyat |
|---|---|---|
| BrowserStack | Gerçek cihaz bulutu | $39/ay'dan |
| Firebase Test Lab | Google'ın test bulutu | Ücretsiz kota var |
| AWS Device Farm | AWS test bulutu | Dakika bazlı |
| Maestro Cloud | Maestro test bulutu | Free tier var |
CI/CD Entegrasyonu
- GitHub Actions / GitLab CI ile otomatik test
- Her PR'da kritik E2E testlerini çalıştır
- Nightly build'de tam E2E suite
- Test sonuçlarını Slack/Discord'a bildir
- Screenshot comparison ile visual regression
Best Practices
- Test piramidi: Çok unit, az E2E (70% unit, 20% integration, 10% E2E)
- Sadece kritik akışları E2E ile test et
- Her gece otomatik çalıştır (nightly)
- Flaky testleri izole et ve düzelt
- Screenshot karşılaştırma kullan
- Test verilerini yönet (seed data, cleanup)
- Page Object pattern ile test bakımını kolaylaştır
E2E testler güvenlik ağıdır, ana test stratejiniz değil. Test piramidinde en tepede, en az sayıda olmalı.