Python Test Desenleri
pytest, TDD metodolojisi ve en iyi uygulamalar kullanarak Python uygulamaları için kapsamlı test stratejileri.
Ne Zaman Etkinleştirmeli
- Yeni Python kodu yazarken (TDD'yi takip et: red, green, refactor)
- Python projeleri için test suite'leri tasarlarken
- Python test coverage'ını gözden geçirirken
- Test altyapısını kurarken
Temel Test Felsefesi
Test-Driven Development (TDD)
Her zaman TDD döngüsünü takip edin:
- RED: İstenen davranış için başarısız bir test yaz
- GREEN: Testi geçirmek için minimal kod yaz
- REFACTOR: Testleri yeşil tutarken kodu iyileştir
Coverage Gereksinimleri
- Hedef: 80%+ kod coverage'ı
- Kritik yollar: 100% coverage gereklidir
- Coverage'ı ölçmek için
pytest --covkullanın
pytest Temelleri
Temel Test Yapısı
Assertion'lar
Fixture'lar
Temel Fixture Kullanımı
Setup/Teardown ile Fixture
Fixture Scope'ları
Parametreli Fixture
Birden Fazla Fixture Kullanma
Autouse Fixture'ları
Paylaşılan Fixture'lar için Conftest.py
Parametrizasyon
Temel Parametrizasyon
Birden Fazla Parametre
ID'li Parametrizasyon
Parametreli Fixture'lar
Marker'lar ve Test Seçimi
Özel Marker'lar
Belirli Testleri Çalıştırma
pytest.ini'de Marker'ları Yapılandırma
Mocking ve Patching
Fonksiyonları Mocking
Dönüş Değerlerini Mocking
Exception'ları Mocking
Context Manager'ları Mocking
Autospec Kullanma
Mock Class Instance'ları
Mock Property
Asenkron Kodu Test Etme
pytest-asyncio ile Asenkron Testler
Asenkron Fixture
Asenkron Fonksiyonları Mocking
Exception'ları Test Etme
Beklenen Exception'ları Test Etme
Exception Niteliklerini Test Etme
Yan Etkileri Test Etme
Dosya Operasyonlarını Test Etme
pytest'in tmp_path Fixture'ı ile Test Etme
tmpdir Fixture ile Test Etme
Test Organizasyonu
Dizin Yapısı
Test Class'ları
En İyi Uygulamalar
YAPIN
- TDD'yi takip edin: Koddan önce testleri yazın (red-green-refactor)
- Bir şeyi test edin: Her test tek bir davranışı doğrulamalı
- Açıklayıcı isimler kullanın:
test_user_login_with_invalid_credentials_fails - Fixture'ları kullanın: Tekrarı fixture'larla ortadan kaldırın
- Harici bağımlılıkları mock'layın: Harici servislere bağımlı olmayın
- Kenar durumları test edin: Boş input'lar, None değerleri, sınır koşulları
- %80+ coverage hedefleyin: Kritik yollara odaklanın
- Testleri hızlı tutun: Yavaş testleri ayırmak için marker'lar kullanın
YAPMAYIN
- İmplementasyonu test etmeyin: Davranışı test edin, iç yapıyı değil
- Testlerde karmaşık koşullar kullanmayın: Testleri basit tutun
- Test hatalarını göz ardı etmeyin: Tüm testler geçmeli
- Third-party kodu test etmeyin: Kütüphanelerin çalıştığına güvenin
- Testler arası state paylaşmayın: Testler bağımsız olmalı
- Testlerde exception yakalamayın:
pytest.raiseskullanın - Print statement'ları kullanmayın: Assertion'ları ve pytest çıktısını kullanın
- Çok kırılgan testler yazmayın: Aşırı spesifik mock'lardan kaçının
Yaygın Desenler
API Endpoint'lerini Test Etme (FastAPI/Flask)
Veritabanı Operasyonlarını Test Etme
Class Metodlarını Test Etme
pytest Yapılandırması
pytest.ini
pyproject.toml
Testleri Çalıştırma
Hızlı Referans
Unutmayın: Testler de koddur. Temiz, okunabilir ve bakımı kolay tutun. İyi testler hata yakalar; harika testler hataları önler.


