Sobes.tech
Junior — Middle

Czy możesz wyjaśnić, co oznacza pojęcie Scope w kontekście PyTest i jak wpływa na wykonywanie testów?

sobes.tech AI

Odpowiedź od AI

W PyTest parametr scope określa zakres życia (cykl życia) fixture — czyli, jak długo będzie tworzona i używana w testach.

Główne wartości scope:

  • function (domyślnie): fixture jest tworzona na nowo dla każdego testu.
  • class: fixture jest tworzona raz na każdą klasę testową.
  • module: fixture jest tworzona raz na każdy moduł (plik testowy).
  • package: fixture jest tworzona raz na pakiet.
  • session: fixture jest tworzona raz na całą sesję testową.

Na przykład, jeśli fixture ma scope="module", to jest inicjalizowana raz przed uruchomieniem wszystkich testów w module i niszczona po ich wykonaniu. To pozwala zaoszczędzić czas i zasoby, szczególnie jeśli fixture tworzy np. połączenie z bazą danych lub serwerem.

Przykład fixture z scope:

import pytest

@pytest.fixture(scope="module")
def db_connection():
    conn = create_connection()
    yield conn
    conn.close()

W ten sposób, scope wpływa na wydajność i izolację testów, pozwalając kontrolować, jak często tworzone i niszczone są zasoby.