Teardown fixtury

Úvod do testování v Pythonu

Alexander Levin

Data Scientist

Co je teardown fixtury

  • Teardown fixtury – proces uvolnění ("teardown") zdrojů alokovaných nebo vytvořených při nastavení testovacího prostředí.

Připomeňte si analogii s "piknikem":

  1. Pozveme přátele a připravíme jídlo
  2. Bavíme se!
  3. Úklid – to je teardown
Úvod do testování v Pythonu

Proč používat teardown

Je důležité vyčistit prostředí po skončení testu. Bez teardownu mohou nastat závažné problémy:

  • Úniky paměti
  • Nízká rychlost a problémy s výkonem
  • Neplatné výsledky testů
  • Selhání pipeline a chyby
Úvod do testování v Pythonu

Kdy použít

Kdy použít:

  • Velké objekty
  • Více než jeden test
  • Použití autouse

Kdy není nutné použít:

  • Jednoduchý skript s jedním testem
Úvod do testování v Pythonu

Líné vyhodnocování v Pythonu

  • yield – klíčové slovo Pythonu umožňující vytváření generátorů
# 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
Úvod do testování v Pythonu

Jak použít

Jak použít:

  • Nahraďte return klíčovým slovem yield
  • Umístěte kód teardownu za yield
  • Zajistěte, aby kód nastavení byl pouze před yield
Úvod do testování v Pythonu

Příklad teardownu

@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
Úvod do testování v Pythonu

Shrnutí

  • Definice: Teardown fixtury – proces uvolnění zdrojů alokovaných při nastavení.
  • Použití:
    • Klíčové slovo yield místo return
    • Kód teardownu za yield
  • Výhody:
    • Předchází chybám softwaru
    • Předchází poklesům výkonu
  • Kdy použít: Vždy, když máte více než jeden test!
Úvod do testování v Pythonu

Pojďme si procvičit!

Úvod do testování v Pythonu

Preparing Video For Download...