İlk pytest Testlerinizi Yazma
Test keşfini, assert deyimlerini ve test yapısını öğrenin.
İlk pytest Testlerinizi Yazma, CoddyKit'te ücretsiz bir Python Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Python Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Python Academy kursu toplamda 4 dersten oluşur.
pytest'i yükleme
pytest'i pip ile yükleyin. Zorunlu bir yapılandırması yoktur — sınamaları otomatik olarak keşfeder.
# pip install pytest
# Run all tests
# pytest
# Run a specific file
# pytest test_math.pyBasit bir sınama işlevi
pytest, test_ ile başlayan tüm işlevleri toplar. Sade assert ifadelerini kullanın — pytest, ayrıntılı çıktı sağlamak için bunları yeniden yazar.
# test_math.py
def add(a, b):
return a + b
def test_add():
assert add(2, 3) == 5
def test_add_negative():
assert add(-1, 1) == 0Sınama dosyaları ve keşif
pytest, test_*.py veya *_test.py adındaki sınama dosyalarını keşfeder ve test_* adındaki işlevleri veya Test* adındaki sınıfları toplar.
tests/
test_utils.py
test_models.py
conftest.py # shared fixturesSınamaları sınıflarda gruplama
İlişkili sınamaları Test ile başlayan bir sınıfta gruplandırın. unittest.TestCase gerekmez.
class TestCalculator:
def test_add(self):
assert 1 + 1 == 2
def test_multiply(self):
assert 3 * 4 == 12Özel durumları sınama
Belirli özel durumların oluşturulduğunu doğrulamak için bağlam yöneticisi olarak pytest.raises kullanın.
import pytest
def divide(a, b):
if b == 0:
raise ZeroDivisionError("cannot divide by zero")
return a / b
def test_divide_by_zero():
with pytest.raises(ZeroDivisionError, match="cannot divide"):
divide(10, 0)-v bayrağı
Her sınamanın adını ve başarılı/başarısız durumunu görmek için pytest'i -v (ayrıntılı) seçeneğiyle çalıştırın.
# pytest -v
# test_math.py::test_add PASSED
# test_math.py::test_add_negative PASSED
# Show print output too:
# pytest -v -sSınamaları atlama
Sınamaları koşullu olarak atlamak için @pytest.mark.skip veya @pytest.mark.skipif kullanın.
import pytest, sys
@pytest.mark.skip(reason="not implemented yet")
def test_future_feature():
assert False
@pytest.mark.skipif(sys.platform == "win32", reason="Unix only")
def test_unix_only():
assert TrueSınamaları beklenen başarısızlık olarak işaretleme
@pytest.mark.xfail, başarısız olmasını beklediğiniz bir sınamayı işaretler. Sınama başarısız olursa başarılı sayılır, beklenmedik şekilde başarılı olursa uyarı verir.
import pytest
@pytest.mark.xfail(reason="known bug #42")
def test_buggy():
assert 1 == 2 # will fail, but that's expectedassert yeniden yazımı
pytest, bir başarısızlığa neden olan değerleri göstermek için assert ifadelerini yeniden yazar — bu, yalnızca bir AssertionError göstermekten çok daha yararlıdır.
def test_list_equal():
result = [1, 2, 4]
expected = [1, 2, 3]
assert result == expected
# AssertionError:
# assert [1, 2, 4] == [1, 2, 3]
# At index 2 diff: 4 != 3conftest.py
conftest.py, pytest tarafından otomatik olarak yüklenir. Paylaşılan fikstürleri ve eklentileri burada, açıkça içe aktarmadan kullanabilirsiniz.
# conftest.py
import pytest
@pytest.fixture
def sample_data():
return {"key": "value"}
# Any test file in the same dir can use sample_data as a parameterSınama alt kümelerini çalıştırma
Bir anahtar sözcük ifadesiyle eşleşen sınamaları çalıştırmak için -k kullanın.
# Run tests containing "add"
# pytest -k "add"
# Run tests NOT containing "slow"
# pytest -k "not slow"
# Run a specific test
# pytest test_math.py::test_addHızlı kontrol
Bir pytest sınama işlevi adının otomatik olarak keşfedilebilmesi için hangi ön ekle başlaması gerekir?
Özet
pytest, kalıp kodu gerektirmez: dosyaları test_*.py, işlevleri test_* olarak adlandırın ve sade assert kullanın. Özel durumlar için pytest.raises, ayrıntılı çıktı için -v ve paylaşılan fikstürler için conftest.py kullanın.
Sıkça Sorulan Sorular
“İlk pytest Testlerinizi Yazma” dersi ücretsiz mi?
Evet — “İlk pytest Testlerinizi Yazma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Python Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Python Academy kursu toplamda 4 dersten oluşur.
“İlk pytest Testlerinizi Yazma” dersinde ne öğreneceğim?
Test keşfini, assert deyimlerini ve test yapısını öğrenin. Python Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Python Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Python Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“İlk pytest Testlerinizi Yazma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Python Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Python Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- İlk pytest Testlerinizi Yazma
- Fixture'lar ve Kurulum/Kapatma
- Parametreleştirme ve Test Kapsamı
- unittest.mock ile Sahte Nesne Kullanımı