Fixture Teardown’ları

Python'da Teste Giriş

Alexander Levin

Data Scientist

Fixture teardown nedir

  • Fixture Teardown — test ortamı kurulumunda ayrılan/oluşturulan kaynakların temizlenmesi ("sökülmesi") süreci.

“Piknik” benzetmesini anımsayın:

  1. Arkadaşları davet edip yiyecekleri hazırlayın
  2. Eğlenin!
  3. Toparlayın — işte bu teardown’dır
Python'da Teste Giriş

Neden teardown kullanılır

Bir testin sonunda ortamı temizlemek önemlidir. Teardown kullanılmazsa ciddi sorunlara yol açabilir:

  • Bellek sızıntıları
  • Düşük yürütme hızı ve performans sorunları
  • Geçersiz test sonuçları
  • Pipeline hataları ve arızalar
Python'da Teste Giriş

Ne zaman kullanılır

Ne zaman kullanılır:

  • Büyük nesneler
  • Birden fazla test
  • autouse kullanımı

Gerekli olmadığında:

  • Tek test içeren basit bir betik
Python'da Teste Giriş

Python’da tembel değerlendirme

  • yield — Python’da jeneratör oluşturmaya yarayan bir anahtar sözcüktür
# Example of generator function
def lazy_increment(n):
    for i in range(n):
        yield i
f = lazy_increment(5)
next(f) # 0
next(f) # 1
next(f) # 2
Python'da Teste Giriş

Nasıl kullanılır

Nasıl kullanılır:

  • return yerine yield yazın
  • Teardown kodunu yield sonrasına koyun
  • Kurulum kodu yalnızca yield öncesinde olsun
Python'da Teste Giriş

Teardown örneği

@pytest.fixture
def init_list():
    return []

@pytest.fixture(autouse=True)
def add_numbers_to_list(init_list):
    # Fixture Setup
    init_list.extend([i for i in range(10)])
    # Fixture output
    yield init_list
    # Teardown statement
    init_list.clear()

def test_9(init_list):
    assert 9 in init_list
Python'da Teste Giriş

Özet

  • Tanım: Fixture Teardown — kurulumda ayrılan kaynakların temizlenmesi süreci.
  • Kullanım:
    • return yerine yield
    • yield sonrası teardown kodu
  • Avantajlar:
    • Yazılım hatalarını önler
    • Olası performans düşüşlerini önler
  • Ne zaman kullanılır: Birden fazla testiniz varsa her zaman!
Python'da Teste Giriş

Hadi pratik yapalım!

Python'da Teste Giriş

Preparing Video For Download...