Как реализовать настройку в стиле 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