Uygulamanız e-posta gönderiyorsa — kayıt onayları, parola sıfırlama, faturalar, bildirimler — bu e-postaların gerçekten ulaştığını ve doğru içeriğe sahip olduğunu doğrulayan otomatik testlere ihtiyacınız var. Pek çok ekibin e-posta testlerini karmaşık olduğu gerekçesiyle atladığını gördük. Aslında karmaşık değil ve bu rehber bunu kanıtlayacak.
E-posta akışlarını test etmenin temel sorunu, programatik olarak okuyabileceğiniz gerçek ve erişilebilir gelen kutularına ihtiyaç duymanızdır. CI pipeline'larında kişisel Gmail hesapları kullanmak kırılgan, güvensiz ve ölçeklenebilir değildir. Olgun bir test altyapısında tek kullanımlık e-posta API'lerinin değerini tam olarak burada gösteriyor.
Test Ortamınızı Hazırlama Öncelikle EvilMail panelinden API anahtarınızı alın. Anahtarı CI sisteminizde ortam değişkeni olarak saklayın — API anahtarlarını kesinlikle versiyon kontrolüne eklemeyin. ``` export EVILMAIL_API_KEY="your_api_key_here" ```
Test E-posta Adresi Oluşturma Her test çalıştırmasından önce yeni bir tek kullanımlık e-posta oluşturun: ``` curl -X POST https://evilmail.pro/api/temp-email \ -H 'Content-Type: application/json' \ -H 'X-API-Key: '"$EVILMAIL_API_KEY" \ -d '{"domain": "evilmail.pro", "ttlMinutes": 30}' ```
Dönen yanıt, e-posta adresini ve oturum token'ını içerir. E-posta adresini uygulamanızda bir test hesabı kaydetmek için kullanın.
Gelen Kutusunu Sorgulama Uygulamanızda e-posta gönderen bir eylemi tetikledikten sonra (kayıt, parola sıfırlama vb.), mesaj gelene kadar gelen kutusu endpoint'ini sorgulayın: ``` curl https://evilmail.pro/api/inbox \ -H 'X-API-Key: '"$EVILMAIL_API_KEY" ```
Gerçek bir testte bunu bir zaman aşımı süresiyle yeniden deneme döngüsüne sarmanız gerekir. İşte pratik bir Python örneği: ``` import requests import time
API_KEY = os.environ['EVILMAIL_API_KEY'] BASE = 'https://evilmail.pro'
def wait_for_email(subject_contains, timeout=60): deadline = time.time() + timeout while time.time() < deadline: r = requests.get(f'{BASE}/api/inbox', headers={'X-API-Key': API_KEY}) messages = r.json().get('data', []) for msg in messages: if subject_contains in msg['subject']: return msg time.sleep(3) raise TimeoutError('Email not received') ```
CI/CD Pipeline'larına Entegrasyon Bu yaklaşım herhangi bir CI sistemiyle sorunsuz çalışır — GitHub Actions, GitLab CI, Jenkins, CircleCI fark etmez. Temel prensip şudur: her test çalıştırması benzersiz bir tek kullanımlık adres alır, doğrulamalarını yapar ve adresin süresi otomatik olarak dolar. Temizlik scriptlerine gerek yok, paylaşılan posta kutularının dolması yok, önceki çalıştırmalardan kalan e-postaların neden olduğu tutarsız testler yok.
Bir GitHub Actions iş akışı adımı şöyle görünebilir: ``` - name: Run email integration tests env: EVILMAIL_API_KEY: ${'{ secrets.EVILMAIL_API_KEY }'} run: pytest tests/email/ -v --timeout=120 ```
Neyi Doğrulamalısınız Sadece bir e-postanın gelip gelmediğini kontrol etmekle yetinmeyin. Konu satırını, gönderici adresini, kritik bağlantıların varlığını (doğrulama URL'leri, sıfırlama token'ları) ve bu bağlantıların gerçekten geçerli sayfalara yönlendirdiğini doğrulayın. Eksiksiz bir e-posta testi, tetiklemeden teslimata ve içerik doğruluğuna kadar tüm zinciri kapsar.
Yüzlerce Teste Ölçeklendirme Çok sayıda eşzamanlı e-posta adresine ihtiyaç duyan büyük test paketleri için, kendi alan adınız altında adres oluşturmak üzere hesap oluşturma endpoint'ini kullanın. Bu size ad alanı üzerinde tam kontrol sağlar ve temp-email endpoint'indeki olası hız sınırlamalarını devre dışı bırakır: ``` curl -X POST https://evilmail.pro/api/accounts \ -H 'X-API-Key: '"$EVILMAIL_API_KEY" \ -H 'Content-Type: application/json' \ -d '{"email": "[email protected]", "password": "testpass"}' ```
Test paketi tamamlandıktan sonra test hesaplarını toplu olarak silin: ``` curl -X DELETE https://evilmail.pro/api/accounts \ -H 'X-API-Key: '"$EVILMAIL_API_KEY" \ -H 'Content-Type: application/json' \ -d '{"emails": ["[email protected]"]}' ```
Sonuç E-posta testleri, test paketinizdeki kırılgan bir sonradan düşünce olmamalı. Doğru bir tek kullanımlık e-posta API'siyle, diğer entegrasyon testleriniz kadar belirleyici ve güvenilir hale gelir. E-postalarınızın gerçekten çalıştığından emin olarak yayına alın.
