Python'da test: pytest, sahte nesneler ve kapsam
pytest ile hızlı ve okunur testler yazar, dış bağımlılıkları sahte nesnelerle ayırır, kapsamı ölçer ve hataları testle önce yakalarsın.
Seviye 201 · 18 ders · 18 pratik lab
Dersler
pytest temelleri
- Neden test? Elle denemenin sınırları
- pytest ile ilk test ve assert
- Test keşfi ve proje düzeni
- Hata beklemek: pytest.raises
- parametrize ile tek testte çok durum
- Kısa görev: parola doğrulayıcısını test et
Fixture ve sahte nesneler
- Fixture'lar: hazırlık ve temizlik
- tmp_path ve monkeypatch
- unittest.mock ile sahte nesneler
- HTTP isteklerini ve saati sahtelemek
- Kısa görev: API'ye bağlanan fonksiyonu ağsız test et
Kalite ve yöntem
- Kapsam ölçmek: pytest-cov
- Testle geliştirme: kırmızı, yeşil, düzenle
- Özellik tabanlı test: hypothesis
- doctest, işaretler ve yavaş testleri ayırmak
- Güvenlik açığı için gerileme testi yazmak
- Kısa görev: testsiz eski koda güvenlik ağı ör
Bitirme
- Bitirme görevi: yüzde 90 kapsamlı küçük bir kütüphane
Pratik lablar
- İndirim fonksiyonuna ilk testi yazmak: Hazır bir indirim fonksiyonu için normal, sınır ve sıfır tutar durumlarını deneyen üç pytest testi yaz.
- Beklenen hatayı pytest.raises ile sınamak: Negatif yaşta ValueError yükselmesi gereken fonksiyonu pytest.raises ve match ile sına; hata mesajı da denetlensin.
- Vergi hesabını parametrize ile sınamak: Kopyala-yapıştır yazılmış on vergi testini tek bir parametrize testine indir ve her duruma okunur bir kimlik ver.
- Testle gizli hatayı ortaya çıkarmak: Çalışıyor görünen bir tarih aralığı fonksiyonunda ay sonu hatasını yakalayan testi yaz, sonra kodu düzelt.
- Geçici veritabanı için fixture yazmak: Her teste temiz bir SQLite veritabanı veren ve sonunda kapatan bir yield fixture yaz.
- Ortam değişkenine bağlı kodu sınamak: monkeypatch ile ortam değişkenini değiştirerek yükleyicinin değişken tanımlı ve tanımsız durumlarını sına.
- E-posta göndermeden bildirimi sınamak: Bildirim servisindeki e-posta göndericisini Mock ile değiştir ve doğru alıcı ile konunun çağrıldığını doğrula.
- Saate bağlı kodu sabit zamanla sınamak: Süresi dolan kuponları hesaplayan kodu saati dışarıdan alacak şekilde düzenle ve gece yarısı sınırını sına.
- Kapsanmayan dalları bulup sınamak: pytest-cov raporunda eksik görünen hata dallarına test yazarak dal kapsamını yüzde doksanın üstüne çıkar.
- Kısaltma fonksiyonunu önce testle geliştirmek: Verilen gereksinim listesinden önce başarısız testleri yaz, sonra en az kodla geçir ve en sonda yeniden düzenle.
- Eski fiyatlama kodunu testle sabitlemek: Belgesiz bir fiyatlama fonksiyonunun bugünkü davranışını karakterizasyon testleriyle sabitle, sonra davranışı bozmadan sadeleştir.
- Kodla-çöz çiftini hypothesis ile sınamak: Bir kodlama ve çözme fonksiyon çifti için gidiş-dönüş özelliğini hypothesis ile sına.
- Sıralama fonksiyonunun özelliklerini tanımlamak: Elle yazılmış bir sıralama için sıralılık ve eleman korunumu özelliklerini hypothesis ile yaz ve bulunan karşı örneği düzelt.
- Yavaş testleri işaretleyip ayırmak: Yavaş testlere özel bir işaret ekle, işareti pyproject.toml'da tanımla ve varsayılan çalıştırmada atlanmalarını sağla.
- Yetki atlama hatasına regresyon testi: Başkasının faturasını görmeye izin veren hatayı yeniden üreten testi yaz, kodu düzelt ve testin artık geçtiğini göster.
- Ortak fixture'ları kapsamlarıyla düzenlemek: Dosyalara kopyalanmış hazırlık kodunu conftest.py içinde oturum ve fonksiyon kapsamlı fixture'lara taşı; pahalı kurulum bir kez çalışsın ama testler birbirinin verisini görmesin.
- Bildirilen hatayı önce testle yakalamak: Hata bildirimindeki girdiyle başarısız olan bir test yaz, sonra iade tutarı hesabını düzelt; test düzeltmeden önce kırmızı, sonra yeşil olmalı.
- Alışveriş sepetini durumlu testle sınamak: hypothesis'in kural tabanlı durum makinesiyle sepet sınıfını basit bir modelle karşılaştır; bulunan en küçük hatalı adım dizisini incele ve hatayı düzelt.
Kurs hakkında
pytest ile hızlı ve okunur testler yazar, dış bağımlılıkları sahte nesnelerle ayırır, kapsamı ölçer ve hataları testle önce yakalarsın.
Ne öğreneceksin
- pytest temelleri
- Fixture ve sahte nesneler
- Kalite ve yöntem
- Bitirme
Ön koşullar
Aynı yolun 101 düzeyindeki kurslarını bitirmiş olmak ya da o konuları biliyor olmak yeterlidir.
Lab ortamı
Dersler, tarayıcında açılan sana özel bir Kali Linux terminalinde geçer. Kurulum gerekmez; lab her derste temiz başlar.
Sık sorulan sorular
- Bu kurs benim düzeyime uygun mu?
- Kurs 201 düzeyindedir; daha düşük düzeydeki kursların konularını bildiğin varsayılır.
- Kurulum gerekir mi?
- Hayır. Her ders tarayıcında açılan sana özel bir lab ortamında geçer.
- Dersler nasıl işleniyor?
- Her ders 8 ile 10 adımdan ve bir kısa sınavdan oluşur. İlk adımlarda yazman gereken komut gösterilir, sonraki adımlarda yardım azalır; iki denemede takılırsan çözüm açılır.
- Ücretsiz deneyebilir miyim?
- Evet. Her kursun ilk üç dersi ücretsizdir.