fixture
- Python kursu
- İleri seviye
- Ders 15/83
- 5 dk
@pytest.fixture ile fixture'ları öğrenirsin.
fixture
fixture, testlerin paylaştığı hazırlık kodudur. Veritabanı bağlantısı, örnek veri ya da geçici dosya gibi şeyleri kurar; test bittiğinde temizler.
Bir fonksiyonu @pytest.fixture ile süslersin; testler onu parametre adıyla çağırır. pytest, fixture'ı çalıştırıp sonucu parametreye enjekte eder.
import pytest
@pytest.fixture
def sample_list():
return [1, 2, 3]
def test_total(sample_list):
assert sum(sample_list) == 6Bu teknik, tekrarlanan kurulumu önler ve testleri kısa tutar.
fixture kapsamı
fixture'lar her test için yeniden çalışır (varsayılan scope="function"). Ağır hazırlıklarda bunu değiştirebilirsin: scope="module" modül başına bir kez, scope="session" tüm oturumda bir kez çalıştırır.
@pytest.fixture(scope="module")
def db():
return open_connection()Kapsamı büyütmek hız kazandırır ama durum paylaşımına dikkat et: bir test veriyi değiştirirse sonraki testler etkilenir. Bu yüzden çoğu fixture function kapsamında kalır.
Uygulama fixture ile sample_list kullan
import pytest ile başla. @pytest.fixture ile süslenmiş sample_list() fonksiyonu [1, 2, 3] döndürsün. test_total(sample_list) test fonksiyonu assert sum(sample_list) == 6 denetimi yapsın. Dosya sonunda test_total(sample_list()) çağrısı ve print("ok") olsun.
Başlangıç kodu
# pytest modülünü içe aktar
# sample_list: fixture, [1, 2, 3] döndürür
# test_total(sample_list): sum denetimi yapar
# test_total(sample_list()) çağrısı ve "ok" yazdırÖrnek çözüm
import pytest
@pytest.fixture
def sample_list():
return [1, 2, 3]
def test_total(sample_list):
assert sum(sample_list) == 6
test_total(sample_list())
print("ok")Beklenen çıktı
ok
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bir fixture testte nasıl kullanılır?
- import ile içe aktarılır
- Global değişken olarak atanır
- Test fonksiyonuna parametre olarak verilir Doğru cevap
- print ile yazdırılır
Açıklama: pytest, fixture adıyla aynı olan parametreye fixture sonucunu enjekte eder.
2 fixture kavramlarını eşleştir
| Kavram | Anlamı |
|---|---|
@pytest.fixture |
Fixture işaretçisi |
def sample_list |
Fixture tanımı |
test_total(sample_list) |
Fixture'ı kullanır |
scope="module" |
Modül başına bir kez |
3 fixture decorator'ünü ekle
import pytest
@____(scope="module")
def db():
return open_connection()
import pytest
@pytest.fixture(scope="module")
def db():
return open_connection()
Açıklama: @pytest.fixture işaretçisi fonksiyonu fixture yapar; scope module bir kez çalıştırır.