Spec-Zone.ru › pytest

Как реализовать настройку в стиле xUnit

В этом разделе описан классический и популярный способ реализации фикстур (настройки и очистки состояния тестов) на уровне модуля, класса или функции.

Примечание

Хотя эти методы настройки и очистки просты и знакомы тем, кто пришёл из мира unittest или nose, можно также рассмотреть более мощный механизм фикстур pytest, который использует концепцию внедрения зависимостей и позволяет более модульно и масштабируемо управлять состоянием тестов, особенно в крупных проектах и при функциональном тестировании. В одном файле можно сочетать оба механизма фикстур, но методы тестов подклассов unittest.TestCase не могут получать аргументы фикстур.

Настройка и очистка на уровне модуля

Если в одном модуле у вас есть несколько тестовых функций и классов, вы можете при необходимости реализовать следующие методы фикстур, которые обычно вызываются один раз для всех функций:

def setup_module(module):
    """setup any state specific to the execution of the given module."""


def teardown_module(module):
    """teardown any state that was previously setup with a setup_module
    method.
    """

Начиная с pytest-3.0, параметр module является необязательным.

Настройка и очистка на уровне класса

Аналогично, следующие методы вызываются на уровне класса до и после вызова всех тестовых методов класса:

@classmethod
def setup_class(cls):
    """setup any state specific to the execution of the given class (which
    usually contains tests).
    """


@classmethod
def teardown_class(cls):
    """teardown any state that was previously setup with a call to
    setup_class.
    """

Настройка и очистка на уровне метода и функции

Аналогично, следующие методы вызываются при каждом вызове метода:

def setup_method(self, method):
    """setup any state tied to the execution of the given method in a
    class.  setup_method is invoked for every test method of a class.
    """


def teardown_method(self, method):
    """teardown any state that was previously setup with a setup_method
    call.
    """

Начиная с pytest-3.0, параметр method является необязательным.

Если вы предпочитаете определять тестовые функции непосредственно на уровне модуля, можно также использовать следующие функции для реализации фикстур:

def setup_function(function):
    """setup any state tied to the execution of the given function.
    Invoked for every test function in the module.
    """


def teardown_function(function):
    """teardown any state that was previously setup with a setup_function
    call.
    """

Начиная с pytest-3.0, параметр function является необязательным.

Примечания:

  • Пары функций настройки и очистки могут вызываться несколько раз в рамках одного процесса тестирования.
  • Функции очистки не вызываются, если соответствующая функция настройки существует, но завершилась с ошибкой или была пропущена.
  • До pytest-4.2 функции в стиле xUnit не соблюдали правила области видимости фикстур, поэтому, например, setup_method могла быть вызвана до автоматически используемой фикстуры с областью видимости сеанса.

    Теперь функции в стиле xUnit интегрированы с механизмом фикстур и соблюдают правила областей видимости фикстур, участвующих в вызове.

© 2015–2026 Holger Krekel and pytest-dev team
Licensed under the MIT License.
https://docs.pytest.org/en/stable/how-to/xunit_setup.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API