Справочник по API

Эта страница содержит полную справку по API pytest.

Константы

pytest.__version__

Текущая версия pytest, в виде строки:

>>> import pytest
>>> pytest.__version__
'7.0.0'

pytest.version_tuple

Добавлено в версии 7.0.

Текущая версия pytest, в виде кортежа:

>>> import pytest
>>> pytest.version_tuple
(7, 0, 0)

Для предварительных версий последним компонентом будет строка с версией предварительной версии:

>>> import pytest
>>> pytest.version_tuple
(7, 0, '0rc1')

Функции

pytest.approx

approx(expected, rel=None, abs=None, nan_ok=False)[исходный код]

Утверждение, что два числа (или две упорядоченные последовательности чисел) равны друг другу в пределах некоторого допуска.

Из-за Floating Point Arithmetic: Issues and Limitations числа, которые мы интуитивно считаем равными, не всегда таковыми являются:

>>> 0.1 + 0.2 == 0.3
False

Эта проблема часто встречается при написании тестов, например, при проверке того, что значения с плавающей точкой являются тем, что вы ожидаете. Один из способов решения этой проблемы - утверждать, что два числа с плавающей точкой равны в пределах некоторого соответствующего допуска:

>>> abs((0.1 + 0.2) - 0.3) < 1e-6
True

Однако подобные сравнения утомительны для написания и сложны для понимания. Более того, абсолютные сравнения, подобные приведенному выше, обычно не рекомендуются, потому что не существует допуска, который хорошо подходит для всех ситуаций. 1e-6 хорошо подходит для чисел около 1, но слишком мал для очень больших чисел и слишком велик для очень маленьких. Лучше выразить допуск в виде доли от ожидаемого значения, но такие относительные сравнения еще сложнее написать правильно и кратко.

Класс approx выполняет сравнение с плавающей точкой, используя максимально интуитивно понятный синтаксис:

>>> from pytest import approx
>>> 0.1 + 0.2 == approx(0.3)
True

Этот же синтаксис работает и для упорядоченных последовательностей чисел:

>>> (0.1 + 0.2, 0.2 + 0.4) == approx((0.3, 0.6))
True

numpy массивы:

>>> import numpy as np                                                          
>>> np.array([0.1, 0.2]) + np.array([0.2, 0.4]) == approx(np.array([0.3, 0.6])) 
True

И для массива numpy против скаляра:

>>> import numpy as np                                         
>>> np.array([0.1, 0.2]) + np.array([0.2, 0.1]) == approx(0.3) 
True

Поддерживаются только упорядоченные последовательности, так как approx должен выводить относительное положение последовательностей без двусмысленности. Это означает, что sets и другие неупорядоченные последовательности не поддерживаются.

Наконец, словарные значения также можно сравнивать:

>>> {'a': 0.1 + 0.2, 'b': 0.2 + 0.4} == approx({'a': 0.3, 'b': 0.6})
True

Сравнение будет истинным, если оба отображения имеют одинаковые ключи и их соответствующие значения соответствуют ожидаемым допускам.

Допуски

По умолчанию approx считает равными числа в пределах относительного допуска 1e-6 (т.е. одна часть на миллион) от ожидаемого значения. Такое обращение привело бы к удивительным результатам, если бы ожидаемое значение было 0.0, поскольку ничто, кроме самого 0.0, не является относительно близким к 0.0. Чтобы справиться с этим случаем менее неожиданно, approx также считает равными числа в пределах абсолютного допуска 1e-12 от его ожидаемого значения. Бесконечность и NaN являются особыми случаями. Бесконечность считается равной только самой себе, независимо от относительного допуска. NaN по умолчанию не считается равным ничему, но вы можете сделать его равным самому себе, установив аргумент nan_ok в True. (Это сделано для облегчения сравнения массивов, в которых NaN означает «нет данных»).

Относительные и абсолютные допуски могут быть изменены путем передачи аргументов в конструктор approx:

>>> 1.0001 == approx(1)
False
>>> 1.0001 == approx(1, rel=1e-3)
True
>>> 1.0001 == approx(1, abs=1e-3)
True

Если указать abs, но не rel, сравнение вообще не будет учитывать относительный допуск. Другими словами, два числа, которые находятся в пределах относительного допуска по умолчанию 1e-6, будут считаться неравными, если они превышают указанный абсолютный допуск. Если вы укажете и abs, и rel, то числа будут считаться равными при соблюдении любого из допусков:

>>> 1 + 1e-8 == approx(1)
True
>>> 1 + 1e-8 == approx(1, abs=1e-12)
False
>>> 1 + 1e-8 == approx(1, rel=1e-6, abs=1e-12)
True

Вы также можете использовать approx для сравнения нечисловых типов или массивов и последовательностей, содержащих нечисловые типы, в этом случае он возвращается к строгому равенству. Это может быть полезно для сравнения массивов и последовательностей, которые могут содержать необязательные значения:

>>> {"required": 1.0000005, "optional": None} == approx({"required": 1, "optional": None})
True
>>> [None, 1.0000005] == approx([None,1])
True
>>> ["foo", 1.0000005] == approx([None,1])
False

Если вы думаете об использовании approx, то, возможно, вам захочется узнать, как он сопоставляется с другими хорошими способами сравнения чисел с плавающей точкой. Все эти алгоритмы основаны на относительных и абсолютных допусках и по большей части должны совпадать, но у них есть и существенные различия:

  • math.isclose(a, b, rel_tol=1e-9, abs_tol=0.0): Истинно, если относительный допуск соблюдается по отношению к a или b или если соблюдается абсолютный допуск. Поскольку относительный допуск рассчитывается относительно a и b, этот тест является симметричным (т.е. ни a, ни b не являются «опорным значением»). Вы должны указать абсолютный допуск, если хотите сравнить с 0.0, так как по умолчанию допуск отсутствует. Дополнительная информация: math.isclose().

  • numpy.isclose(a, b, rtol=1e-5, atol=1e-8): Истинно, если разница между a и b меньше суммы относительного допуска по отношению к b и абсолютного допуска. Поскольку относительный допуск вычисляется только по отношению к b, этот тест является асимметричным, и вы можете считать b эталонным значением. Поддержка сравнения последовательностей обеспечивается numpy.allclose(). Дополнительная информация: numpy.isclose.

  • unittest.TestCase.assertAlmostEqual(a, b): True, если a и b находятся в пределах абсолютного допуска 1e-7. Относительный допуск не учитывается, поэтому эта функция не подходит для очень больших или очень маленьких чисел. Кроме того, она доступна только в подклассах unittest.TestCase и является уродливой, поскольку не соответствует PEP8. Дополнительная информация: unittest.TestCase.assertAlmostEqual().

  • a == pytest.approx(b, rel=1e-6, abs=1e-12): Истинно, если относительный допуск соблюдается по отношению к b или если соблюдается абсолютный допуск. Поскольку относительный допуск рассчитывается только относительно b, этот тест является асимметричным, и вы можете считать b эталонным значением. В особом случае, когда вы явно указываете абсолютный допуск, но не относительный допуск, учитывается только абсолютный допуск.

Примечание

approx может работать с массивами numpy, но мы рекомендуем специализированные помощники тестирования в Test Support (numpy.testing), если вам нужна поддержка сравнений, NaNs или допусков на основе ULP.

Для сопоставления строк с помощью regex можно использовать Matches из re_assert package.

Предупреждение

Изменено в версии 3.2.

Чтобы избежать непоследовательного поведения, для сравнений TypeError, >, >= и < выдается :py``<=``. Приведенный ниже пример иллюстрирует проблему:

assert approx(0.1) > 0.1 + 1e-10  # calls approx(0.1).__gt__(0.1 + 1e-10)
assert 0.1 + 1e-10 > approx(0.1)  # calls approx(0.1).__lt__(0.1 + 1e-10)

Во втором примере ожидается вызов approx(0.1).__le__(0.1 + 1e-10). Но вместо этого для сравнения используется approx(0.1).__lt__(0.1 + 1e-10). Это происходит потому, что иерархия вызовов богатых сравнений следует фиксированному поведению. Дополнительная информация: object.__ge__().

Изменено в версии 3.7.1: approx выдает TypeError, когда встречает значение dict или элемент последовательности нечислового типа.

Изменено в версии 6.1.0: approx возвращается к строгому равенству для нечисловых типов вместо того, чтобы поднять TypeError.

pytest.fail

Учебник: Как использовать skip и xfail для работы с тестами, которые не могут быть успешными

fail(reason[, pytrace=True, msg=None])[исходный код]

Явный отказ выполняющегося теста с заданным сообщением.

Parameters:
  • reason (str) – Сообщение, которое должно быть показано пользователю в качестве причины сбоя.

  • pytrace (bool) – Если False, msg представляет полную информацию о сбое, и отслеживание python не будет сообщено.

  • msg (Optional[str]) – То же самое, что и reason, но устаревшее. Будет удалено в будущей версии, вместо него используйте reason.

pytest.skip

skip(reason[, allow_module_level=False, msg=None])[исходный код]

Пропустить выполняющийся тест с заданным сообщением.

Эта функция должна вызываться только во время тестирования (установки, вызова или разрыва) или во время сбора с помощью флага allow_module_level. Эта функция может быть вызвана и в доктестах.

Parameters:
  • reason (str) – Сообщение, которое должно быть показано пользователю в качестве причины пропуска.

  • allow_module_level (bool) – Позволяет вызывать эту функцию на уровне модуля, пропуская остальную часть модуля. По умолчанию имеет значение False.

  • msg (Optional[str]) – То же самое, что и reason, но устаревшее. Будет удалено в будущей версии, вместо него используйте reason.

Примечание

Лучше использовать маркер pytest.mark.skipif, когда это возможно, чтобы объявить, что тест должен быть пропущен при определенных условиях, таких как несоответствие платформ или зависимостей. Аналогично, используйте директиву # doctest: +SKIP (см. doctest.SKIP), чтобы пропустить доктест статически.

pytest.importorskip

importorskip(modname, minversion=None, reason=None)[исходный код]

Импортировать и вернуть запрошенный модуль modname, или пропустить текущий тест, если модуль не может быть импортирован.

Parameters:
  • modname (str) – Имя модуля для импорта.

  • minversion (Optional[str]) – Если задано, то атрибут __version__ импортируемого модуля должен быть не ниже этой минимальной версии, иначе тест будет пропущен.

  • reason (Optional[str]) – Если эта причина указана, она будет показана в сообщении, когда модуль не может быть импортирован.

Result:

Импортируемый модуль. Ему должно быть присвоено его каноническое имя.

Result type:

Any

Пример:

docutils = pytest.importorskip("docutils")

pytest.xfail

xfail(reason='')[исходный код]

Императивный xfail выполняющегося теста или установочной функции с указанной причиной.

Эта функция должна вызываться только во время тестирования (установки, вызова или разрыва).

Parameters:

reason (str) – Сообщение, которое должно быть показано пользователю в качестве причины отказа xfail.

Примечание

Лучше использовать маркер pytest.mark.xfail, когда это возможно, чтобы объявить тест как xfailed при определенных условиях, таких как известные ошибки или отсутствующие функции.

pytest.exit

exit(reason[, returncode=False, msg=None])[исходный код]

Процесс выходного тестирования.

Parameters:
  • reason (str) – Сообщение, которое будет показано в качестве причины выхода из pytest. reason имеет значение по умолчанию только потому, что msg устарело.

  • returncode (Optional[int]) – Код возврата, который будет использоваться при выходе из pytest.

  • msg (Optional[str]) – То же самое, что и reason, но устаревшее. Будет удалено в будущей версии, вместо него используйте reason.

pytest.main

main(args=None, plugins=None)[исходный код]

Выполните пробный запуск в процессе работы.

Parameters:
  • args (Optional[Union[List[str], PathLike[str]]]) – Список аргументов командной строки.

  • plugins (Optional[Sequence[Union[str, object]]]) – Список объектов плагина, подлежащих авторегистрации во время инициализации.

Result:

Код выхода.

Result type:

Union[int, ExitCode]

pytest.param

param(*values[, id][, marks])[исходный код]

Укажите параметр в вызовах pytest.mark.parametrize или parametrized fixtures.

@pytest.mark.parametrize(
    "test_input,expected",
    [
        ("3+5", 8),
        pytest.param("6*9", 42, marks=pytest.mark.xfail),
    ],
)
def test_eval(test_input, expected):
    assert eval(test_input) == expected
Parameters:
  • values (object) – Переменные args значений набора параметров, по порядку.

  • marks (Union[MarkDecorator, Collection[Union[MarkDecorator, Mark]]]) – Одна метка или список меток, которые будут применены к данному набору параметров.

  • id (Optional[str]) – Идентификатор, приписываемый этому набору параметров.

pytest.raises

Учебник: Утверждения об ожидаемых исключениях

with raises(expected_exception: Exception[, *, match]) as excinfo[исходный код]

Утверждение, что блок кода/вызов функции вызывает исключение.

Parameters:
  • expected_exception (Type[E] | Tuple[Type[E], ...]) – Исключаемый тип исключения, или кортеж, если исключается один из нескольких возможных типов исключений.

  • match (str | Pattern[str] | None) – Если указано, строка, содержащая регулярное выражение или объект регулярного выражения, которое проверяется на соответствие строковому представлению исключения с помощью re.search(). Для соответствия литеральной строке, которая может содержать special characters, шаблон может быть сначала экранирован с помощью re.escape(). (Это используется только тогда, когда pytest.raises() используется в качестве менеджера контекста, и передается в функцию в противном случае. При использовании pytest.raises() в качестве функции, вы можете использовать: pytest.raises(Exc, func, match="passed on").match("my pattern").)

Используйте pytest.raises в качестве менеджера контекста, который будет перехватывать исключение заданного типа:

>>> import pytest
>>> with pytest.raises(ZeroDivisionError):
...    1/0

Если блок кода не вызывает ожидаемого исключения (ZeroDivisionError в примере выше) или вообще не вызывает исключения, проверка завершится неудачно.

Вы также можете использовать ключевой аргумент match для утверждения, что исключение соответствует тексту или regex:

>>> with pytest.raises(ValueError, match='must be 0 or None'):
...     raise ValueError("value must be 0 or None")

>>> with pytest.raises(ValueError, match=r'must be \d+$'):
...     raise ValueError("value must be 42")

Менеджер контекста создает объект ExceptionInfo, который можно использовать для просмотра деталей перехваченного исключения:

>>> with pytest.raises(ValueError) as exc_info:
...     raise ValueError("value must be 42")
>>> assert exc_info.type is ValueError
>>> assert exc_info.value.args[0] == "value must be 42"

Примечание

При использовании pytest.raises в качестве контекстного менеджера, стоит отметить, что применяются обычные правила контекстного менеджера и что вызванное исключение должно быть последней строкой в области действия контекстного менеджера. Строки кода после этого, находящиеся в области действия контекстного менеджера, не будут выполнены. Например:

>>> value = 15
>>> with pytest.raises(ValueError) as exc_info:
...     if value > 10:
...         raise ValueError("value must be <= 10")
...     assert exc_info.type is ValueError  # this will not execute

Вместо этого необходимо использовать следующий подход (обратите внимание на разницу в сфере применения):

>>> with pytest.raises(ValueError) as exc_info:
...     if value > 10:
...         raise ValueError("value must be <= 10")
...
>>> assert exc_info.type is ValueError

Использование с pytest.mark.parametrize.

При использовании pytest.mark.parametrize можно параметризовать тесты таким образом, что некоторые из них будут вызывать исключение, а другие - нет.

Смотрите пример Параметризация условного повышения.

Легальная форма

Можно указать вызываемый объект, передав ему вызывающую лямбду:

>>> raises(ZeroDivisionError, lambda: 1/0)
<ExceptionInfo ...>

или вы можете указать произвольный вызываемый объект с аргументами:

>>> def f(x): return 1/x
...
>>> raises(ZeroDivisionError, f, 0)
<ExceptionInfo ...>
>>> raises(ZeroDivisionError, f, x=0)
<ExceptionInfo ...>

Приведенная выше форма полностью поддерживается, но не рекомендуется для нового кода, поскольку форма контекстного менеджера считается более читабельной и менее подверженной ошибкам.

Примечание

Подобно объектам пойманных исключений в Python, явная очистка локальных ссылок на возвращаемые объекты ExceptionInfo может помочь интерпретатору Python ускорить сборку мусора.

Очистка этих ссылок нарушает цикл ссылок (ExceptionInfo –> пойманное исключение –> стек кадра, поднимающий исключение –> стек текущего кадра –> локальные переменные –> ExceptionInfo), что заставляет Python сохранять все объекты, на которые ссылался этот цикл (включая все локальные переменные в текущем кадре), до следующего цикла сборки мусора. Более подробную информацию можно найти в официальной документации Python для the try statement.

pytest.deprecated_call

Учебник: Обеспечение срабатывания предупреждения об устаревании кода

with deprecated_call([match])[исходный код]

Убедитесь, что код выдает DeprecationWarning или PendingDeprecationWarning.

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

>>> import warnings
>>> def api_call_v2():
...     warnings.warn('use v3 of this api', DeprecationWarning)
...     return 200

>>> import pytest
>>> with pytest.deprecated_call():
...    assert api_call_v2() == 200

Его также можно использовать, передавая функции и *args и **kwargs, в этом случае он обеспечит вызов func(*args, **kwargs), выдающий одно из предупреждений, указанных выше. Возвращаемое значение - это возвращаемое значение функции.

В форме контекстного менеджера вы можете использовать аргумент ключевого слова match, чтобы утверждать, что предупреждение соответствует тексту или regex.

Менеджер контекста создает список объектов warnings.WarningMessage, по одному на каждое поднятое предупреждение.

pytest.register_assert_rewrite

Учебник: Переписывание утверждений

register_assert_rewrite(*names)[исходный код]

Зарегистрируйте одно или несколько имен модулей, которые будут переписаны при импорте.

Эта функция гарантирует, что этот модуль или все модули внутри пакета получат свои утверждения assert переписанными. Таким образом, вы должны убедиться, что эта функция будет вызвана до того, как модуль будет импортирован, обычно в вашем __init__.py, если вы являетесь плагином, использующим пакет.

Parameters:

names (str) – Имена модулей для регистрации.

pytest.warns

Учебник: Утверждение предупреждений с помощью функции warns

with warns(expected_warning: Exception[, match])[исходный код]

Утверждение, что код вызывает определенный класс предупреждений.

В частности, параметром expected_warning может быть класс предупреждений или последовательность классов предупреждений, а код внутри блока with должен выдать хотя бы одно предупреждение этого класса или классов.

Этот помощник создает список объектов warnings.WarningMessage, по одному на каждое выданное предупреждение (независимо от того, является ли оно expected_warning или нет).

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

>>> import pytest
>>> with pytest.warns(RuntimeWarning):
...    warnings.warn("my warning", RuntimeWarning)

В форме контекстного менеджера вы можете использовать аргумент ключевого слова match, чтобы утверждать, что предупреждение соответствует тексту или regex:

>>> with pytest.warns(UserWarning, match='must be 0 or None'):
...     warnings.warn("value must be 0 or None", UserWarning)

>>> with pytest.warns(UserWarning, match=r'must be \d+$'):
...     warnings.warn("value must be 42", UserWarning)

>>> with pytest.warns(UserWarning, match=r'must be \d+$'):
...     warnings.warn("this is not here", UserWarning)
Traceback (most recent call last):
  ...
Failed: DID NOT WARN. No warnings of type ...UserWarning... were emitted...

Использование с pytest.mark.parametrize.

При использовании pytest.mark.parametrize можно параметризовать тесты таким образом, что некоторые прогоны будут вызывать предупреждение, а другие - нет.

Этого можно добиться так же, как и с исключениями, см. пример Параметризация условного повышения.

pytest.freeze_includes

Учебник: Замораживание pytest

freeze_includes()[исходный код]

Возвращает список имен модулей, используемых pytest, которые должны быть включены cx_freeze.

Маркс

Марки можно использовать как метаданные для тестовых функций (но не фикстур), к которым затем могут обращаться фикстуры или плагины.

pytest.mark.filterwarnings

Учебник: @pytest.mark.filterwarnings

Добавьте фильтры предупреждений к отмеченным элементам теста.

pytest.mark.filterwarnings(filter)
Parameters:

filter (str) – Строка спецификации предупреждения, которая состоит из содержимого кортежа (action, message, category, module, lineno), как указано в разделе The Warnings Filter документации Python, разделенного ":". Необязательные поля могут быть опущены. Имена модулей, передаваемые для фильтрации, не подвергаются regex-эскейпу. Например: … code-block:: python @pytest.mark.filterwarnings(«ignore:.*usage will be deprecated.*:DeprecationWarning») def test_foo(): …

pytest.mark.parametrize

Учебник: Как параметризировать приспособления и тестовые функции

Этот знак имеет ту же сигнатуру, что и pytest.Metafunc.parametrize(); см. там.

pytest.mark.skip

Учебник: Пропуск тестовых функций

Безусловный пропуск тестовой функции.

pytest.mark.skip(reason=None)
Parameters:

reason (str) – Причина, по которой функция проверки пропускается.

pytest.mark.skipif

Учебник: Пропуск тестовых функций

Пропустить функцию проверки, если условие равно True.

pytest.mark.skipif(condition, *, reason=None)
Parameters:
  • condition (bool or str) – True/False, если условие должно быть пропущено, или condition string.

  • reason (str) – Причина, по которой функция проверки пропускается.

pytest.mark.usefixtures

Учебник: Используйте фиксаторы в классах и модулях с помощью usefixtures.

Пометить тестовую функцию как использующую заданные имена приспособлений.

pytest.mark.usefixtures(*names)
Parameters:

args – Имена приспособлений для использования, в виде строк.

Примечание

При использовании usefixtures в хуках, он может загружать фикстуры только при применении к тестовой функции до установки теста (например, в хуке pytest_collection_modifyitems).

Также обратите внимание, что этот знак не действует при применении к приборам.

pytest.mark.xfail

Учебник: XFail: пометить функции теста как ожидаемые для отказа

Помечает функцию тестирования как ожидаемую неудачу.

pytest.mark.xfail(condition=None, *, reason=None, raises=None, run=True, strict=False)
Parameters:
  • condition (bool or str) – Условие для пометки тестовой функции как xfail (True/False или a condition string). Если bool, то необходимо также указать reason (см. condition string).

  • reason (str) – Причина, по которой тестовая функция помечена как xfail.

  • raises (Type[Exception]) – Подкласс исключения (или кортеж подклассов), который, как ожидается, будет вызван функцией проверки; другие исключения не пройдут проверку.

  • run (bool) – Если тестовая функция действительно должна быть выполнена. Если False, функция всегда будет xfail и не будет выполняться (полезно, если функция работает с ошибками).

  • strict (bool) –

    • Если False (по умолчанию), функция будет показана в выводе терминала как xfailed в случае неудачи и как xpass в случае успеха. В обоих случаях это не приведет к сбою тестового набора в целом. Это особенно полезно для пометки слабых тестов (тестов, которые отказывают в случайном порядке), чтобы заняться ими позже.

    • Если True, функция будет показана в выводе терминала как xfailed в случае неудачи, но если она неожиданно пройдет, то она провалит набор тестов. Это особенно полезно для пометки функций, которые постоянно терпят неудачу, и должно быть четкое указание, если они неожиданно начинают проходить (например, в новом выпуске библиотеки исправлена известная ошибка).

Пользовательские метки

Марки создаются динамически с помощью объекта-фабрики pytest.mark и применяются как декоратор.

Например:

@pytest.mark.timeout(10, "slow", method="thread")
def test_function():
    ...

Создает и присоединяет объект Mark к собранному Item, к которому затем можно получить доступ с помощью фикстур или хуков Node.iter_markers. Объект mark будет иметь следующие атрибуты:

mark.args == (10, "slow")
mark.kwargs == {"method": "thread"}

Пример использования нескольких пользовательских маркеров:

@pytest.mark.timeout(10, "slow", method="thread")
@pytest.mark.slow
def test_function():
    ...

Когда Node.iter_markers или Node.iter_markers_with_node используется с несколькими маркерами, первым будет итерироваться маркер, ближайший к функции. В приведенном выше примере будет получен @pytest.mark.slow, а затем @pytest.mark.timeout(...).

Приспособления

Учебник: Ссылка на светильники

Приспособления запрашиваются тестовыми функциями или другими приспособлениями путем объявления их в качестве имен аргументов.

Пример испытания, для которого требуется приспособление:

def test_output(capsys):
    print("hello")
    out, err = capsys.readouterr()
    assert out == "hello\n"

Пример приспособления, требующего другого приспособления:

@pytest.fixture
def db_session(tmp_path):
    fn = tmp_path / "db.file"
    return connect(fn)

Для получения более подробной информации обратитесь к полной версии fixtures docs.

@pytest.fixture

@fixture(fixture_function=None, *, scope='function', params=None, autouse=False, ids=None, name=None)[исходный код]

Декоратор для обозначения функции фабрики приспособлений.

Этот декоратор можно использовать с параметрами или без них для определения функции приспособления.

На имя функции приспособления можно впоследствии ссылаться, чтобы вызвать ее вызов перед запуском тестов: тестовые модули или классы могут использовать маркер pytest.mark.usefixtures(fixturename).

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

Фикстуры могут предоставлять свои значения тестовым функциям с помощью операторов return или yield. При использовании оператора yield блок кода после оператора yield выполняется как код разрыва, независимо от результата теста, и должен выйти ровно один раз.

Parameters:
  • scope (Union[_ScopeName, Callable[[str, Config], _ScopeName]]) – Область видимости, для которой это приспособление является общим; одно из "function" (по умолчанию), "class", "module", "package" или "session". Этот параметр также может быть вызываемой переменной, которая принимает (fixture_name, config) в качестве параметров и должна возвращать str с одним из значений, указанных выше. Дополнительную информацию см. в документации Динамическая область применения.

  • params (Optional[Iterable[object]]) – Необязательный список параметров, который вызовет несколько вызовов функции приспособления и всех использующих ее тестов. Текущий параметр доступен в request.param.

  • autouse (bool) – Если True, функция приспособления активируется для всех тестов, которые могут ее видеть. Если False (по умолчанию), то для активации фикстуры требуется явная ссылка.

  • ids (Optional[Union[Sequence[Optional[object]], Callable[[Any], Optional[object]]]]) – Последовательность идентификаторов, каждый из которых соответствует параметрам так, чтобы они были частью идентификатора теста. Если идентификаторы не указаны, они будут сгенерированы автоматически из параметров.

  • name (Optional[str]) – Имя приспособления. По умолчанию это имя равно имени декорируемой функции. Если приспособление используется в том же модуле, в котором оно определено, имя функции приспособления будет затенено функцией arg, запрашивающей приспособление; один из способов решения этой проблемы - назвать декорированную функцию fixture_<fixturename>, а затем использовать @pytest.fixture(name='<fixturename>').

capfd

Учебник: Как перехватить вывод stdout/stderr

capfd()[исходный код]

Включите захват текста при записи в файловые дескрипторы 1 и 2.

Захваченный вывод доступен через вызовы методов capfd.readouterr(), которые возвращают именованный кортеж (out, err). out и err будут объектами text.

Возвращает экземпляр CaptureFixture[str].

Пример:

def test_system_echo(capfd):
    os.system('echo "hello"')
    captured = capfd.readouterr()
    assert captured.out == "hello\n"

capfdbinary

Учебник: Как перехватить вывод stdout/stderr

capfdbinary()[исходный код]

Включите перехват байтов при записи в файловые дескрипторы 1 и 2.

Захваченный вывод доступен через вызовы методов capfd.readouterr(), которые возвращают именованный кортеж (out, err). out и err будут объектами byte.

Возвращает экземпляр CaptureFixture[bytes].

Пример:

def test_system_echo(capfdbinary):
    os.system('echo "hello"')
    captured = capfdbinary.readouterr()
    assert captured.out == b"hello\n"

каплог

Учебник: Как управлять лесозаготовками

caplog()[исходный код]

Запись журнала доступа и контроля.

Захваченные журналы доступны через следующие свойства/методы:

* caplog.messages        -> list of format-interpolated log messages
* caplog.text            -> string containing formatted log output
* caplog.records         -> list of logging.LogRecord instances
* caplog.record_tuples   -> list of (logger_name, level, message) tuples
* caplog.clear()         -> clear captured records and formatted log output string

Возвращает экземпляр pytest.LogCaptureFixture.

final class LogCaptureFixture[исходный код]

Обеспечивает доступ и управление захватом журналов.

property handler: LogCaptureHandler

Получение обработчика протоколирования, используемого приспособлением.

get_records(when)[исходный код]

Получите записи журнала для одной из возможных фаз тестирования.

Parameters:

when (Literal['setup', 'call', 'teardown']) – Из какой фазы тестирования следует получить записи. Допустимыми значениями являются: «установка», «вызов» и «снятие».

Result:

Список захваченных записей на данном этапе.

Result type:

List[LogRecord]

Добавлено в версии 3.4.

property text: str

Форматированный текст журнала.

property records: List[LogRecord]

Список записей журнала.

property record_tuples: List[Tuple[str, int, str]]

Список сокращенной версии записей журнала, предназначенный для использования при сравнении утверждений.

Формат кортежа следующий:

(имя_журнала, уровень_журнала, сообщение)

property messages: List[str]

Список интерполированных по формату сообщений журнала.

В отличие от „records“, который содержит строку формата и параметры для интерполяции, сообщения журнала в этом списке все интерполируются.

В отличие от „text“, который содержит вывод обработчика, сообщения журнала в этом списке не украшены уровнями, временными метками и т.д., что делает точные сравнения более надежными.

Обратите внимание, что информация о трассировке или стеке (из logging.exception() или аргументов exc_info или stack_info функций логирования) не включается, так как она добавляется форматором в обработчике.

Добавлено в версии 3.7.

clear()[исходный код]

Сброс списка записей журнала и захваченного текста журнала.

set_level(level, logger=None)[исходный код]

Установите уровень регистратора на время проведения теста.

Изменено в версии 3.4: Уровни регистраторов, измененные этой функцией, будут восстановлены до исходных значений по окончании теста.

Parameters:
  • level (Union[int, str]) – Уровень.

  • logger (Optional[str]) – Регистратор для обновления. Если не указан, то корневой регистратор.

with at_level(level, logger=None)[исходный код]

Контекстный менеджер, устанавливающий уровень для перехвата журналов. После окончания оператора „with“ уровень восстанавливается до исходного значения.

Parameters:
  • level (Union[int, str]) – Уровень.

  • logger (Optional[str]) – Регистратор для обновления. Если не указан, то корневой регистратор.

capsys

Учебник: Как перехватить вывод stdout/stderr

capsys()[исходный код]

Включите захват текста при записи в sys.stdout и sys.stderr.

Захваченный вывод доступен через вызовы методов capsys.readouterr(), которые возвращают именованный кортеж (out, err). out и err будут объектами text.

Возвращает экземпляр CaptureFixture[str].

Пример:

def test_output(capsys):
    print("hello")
    captured = capsys.readouterr()
    assert captured.out == "hello\n"
class CaptureFixture[исходный код]

Объект, возвращаемый фиксаторами capsys, capsysbinary, capfd и capfdbinary.

readouterr()[исходный код]

Прочитать и вернуть захваченный выход, сбросив внутренний буфер.

Result:

Захваченное содержимое в виде именованного кортежа со строковыми атрибутами out и err.

Result type:

CaptureResult

with disabled()[исходный код]

Временно отключить захват внутри блока with.

capsysbinary

Учебник: Как перехватить вывод stdout/stderr

capsysbinary()[исходный код]

Включите перехват байтов при записи в sys.stdout и sys.stderr.

Захваченный вывод доступен через вызовы методов capsysbinary.readouterr(), которые возвращают именованный кортеж (out, err). out и err будут объектами bytes.

Возвращает экземпляр CaptureFixture[bytes].

Пример:

def test_output(capsysbinary):
    print("hello")
    captured = capsysbinary.readouterr()
    assert captured.out == b"hello\n"

config.cache

Учебник: Как повторно запускать неудачные тесты и сохранять состояние между запусками тестов

Объект config.cache позволяет другим плагинам и фикстурам хранить и извлекать значения во время выполнения тестов. Для доступа к нему из фикстуры запросите pytestconfig в вашей фикстуре и получите его с помощью pytestconfig.cache.

Под капотом плагин кэша использует простой dumps/loads API модуля json stdlib.

config.cache является экземпляром pytest.Cache:

final class Cache[исходный код]
mkdir(name)[исходный код]

Возвращает объект пути к каталогу с заданным именем.

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

Добавлено в версии 7.0.

Parameters:

name (str) – Должно быть строкой, не содержащей разделителя /. Убедитесь, что имя содержит идентификаторы вашего плагина или приложения, чтобы избежать столкновений с другими пользователями кэша.

get(key, default)[исходный код]

Возвращает кэшированное значение для заданного ключа.

Если значение еще не было кэшировано или значение не может быть прочитано, возвращается указанное значение по умолчанию.

Parameters:
  • key (str) – Должно быть разделенным значением /. Обычно первым именем является имя вашего плагина или вашего приложения.

  • default – Значение, возвращаемое в случае cache-miss или недопустимого значения кэша.

set(key, value)[исходный код]

Сохранить значение для заданного ключа.

Parameters:
  • key (str) – Должно быть разделенным значением /. Обычно первым именем является имя вашего плагина или вашего приложения.

  • value (object) – Должен состоять из любой комбинации основных типов python, включая вложенные типы, такие как списки словарей.

doctest_namespace

Учебник: Как выполнять доктесты

doctest_namespace()[исходный код]

Приспособление, возвращающее dict, которое будет внедрено в пространство имен doctests.

Обычно это приспособление используется в сочетании с другим приспособлением autouse:

@pytest.fixture(autouse=True)
def add_np(doctest_namespace):
    doctest_namespace["np"] = numpy

Подробнее: приспособление „doctest_namespace“.

обезьянник

Учебник: Как использовать модули и окружения monkeypatch/mock

monkeypatch()[исходный код]

Удобное приспособление для крепления обезьян.

Приспособление предоставляет эти методы для модификации объектов, словарей или os.environ:

Все изменения будут отменены после завершения работы запрашивающей тестовой функции или приспособления. Параметр raising определяет, будет ли выдан сигнал KeyError или AttributeError, если операция установки/удаления не имеет указанной цели.

Чтобы отменить изменения, сделанные приспособлением в содержащейся области видимости, используйте context().

Возвращает экземпляр MonkeyPatch.

final class MonkeyPatch[исходный код]

Помощник для удобного использования атрибутов monkeypatch/элементов/переменных окружения/syspath.

Возвращается приспособлением monkeypatch.

Изменено в версии 6.2: Теперь может также использоваться непосредственно как pytest.MonkeyPatch(), когда приспособление недоступно. В этом случае используйте with MonkeyPatch.context() as mp: или не забудьте явно вызвать undo().

classmethod with context()[исходный код]

Контекстный менеджер, возвращающий новый объект MonkeyPatch, который отменяет любое исправление, сделанное внутри блока with при выходе.

Пример:

import functools


def test_partial(monkeypatch):
    with monkeypatch.context() as m:
        m.setattr(functools, "partial", 3)

Полезен в ситуациях, когда необходимо отменить некоторые исправления до завершения теста, например, при высмеивании stdlib функций, которые могут сломать сам pytest при высмеивании (примеры см. в issue #3290).

setattr(target: str, name: object, value: ~_pytest.monkeypatch.Notset = <notset>, raising: bool = True) None[исходный код]
setattr(target: object, name: str, value: object, raising: bool = True) None

Установите значение атрибута на цель, запомнив старое значение.

Например:

import os

monkeypatch.setattr(os, "getcwd", lambda: "/")

Приведенный выше код заменяет функцию os.getcwd() на lambda, которая всегда возвращает "/".

Для удобства можно указать строку target, которая будет интерпретирована как точечный путь импорта, причем последняя часть будет именем атрибута:

monkeypatch.setattr("os.getcwd", lambda: "/")

Вызывает AttributeError, если атрибут не существует, если только raising не установлено значение False.

Где ставить пластырь

monkeypatch.setattr работает путем (временной) замены объекта, на который указывает имя, на другой. На любой отдельный объект может указывать множество имен, поэтому для того, чтобы исправление работало, необходимо убедиться, что вы исправляете имя, используемое тестируемой системой.

См. раздел Where to patch в документации unittest.mock для полного объяснения, которое предназначено для unittest.mock.patch(), но применимо и к monkeypatch.setattr.

delattr(target, name=<notset>, raising=True)[исходный код]

Удалите атрибут name из target.

Если не указано name и target является строкой, то она будет интерпретирована как точечный путь импорта, последняя часть которого является именем атрибута.

Вызывает ошибку AttributeError, если атрибут не существует, если только raising не установлено значение False.

setitem(dic, name, value)[исходный код]

Установите в значение словарную статью name.

delitem(dic, name, raising=True)[исходный код]

Удалите name из диктанта.

Вызывает KeyError, если он не существует, если только raising не установлено значение False.

setenv(name, value, prepend=None)[исходный код]

Установите переменную окружения name на value.

Если prepend является символом, прочитайте текущее значение переменной окружения и добавьте value, примыкающий к символу prepend.

delenv(name, raising=True)[исходный код]

Удалите name из среды.

Вызывает KeyError, если он не существует, если только raising не установлено значение False.

syspath_prepend(path)[исходный код]

Добавьте path к sys.path список мест импорта.

chdir(path)[исходный код]

Изменить текущий рабочий каталог на указанный путь.

Parameters:

path (Union[str, PathLike[str]]) – Путь к преображению.

undo()[исходный код]

Отменить предыдущие изменения.

Этот вызов расходует стек отмены. Вызов во второй раз не имеет никакого эффекта, если только после вызова отмены вы не выполните еще одно исправление обезьян.

Обычно нет необходимости вызывать undo(), так как она вызывается автоматически при завершении работы.

Примечание

Одно и то же приспособление monkeypatch используется в одном вызове тестовой функции. Если monkeypatch используется и самой тестовой функцией, и одним из тестовых приспособлений, вызов undo() отменит все изменения, сделанные в обеих функциях.

Предпочтительнее использовать context() вместо этого.

pytestconfig

pytestconfig()[исходный код]

Скопированное на сессию приспособление, которое возвращает объект pytest.Config сессии.

Пример:

def test_foo(pytestconfig):
    if pytestconfig.getoption("verbose") > 0:
        ...

pytester

Добавлено в версии 6.2.

Предоставляет экземпляр Pytester, который можно использовать для запуска и тестирования самого pytest.

Он предоставляет пустой каталог, в котором pytest может выполняться изолированно, и содержит средства для написания тестов, конфигурационных файлов и сопоставления с ожидаемым результатом.

Чтобы использовать его, включите в свой самый верхний файл conftest.py:

pytest_plugins = "pytester"
final class Pytester[исходный код]

Средства для написания тестов/конфигурационных файлов, выполнения pytest в изоляции и сопоставления с ожидаемым результатом, идеально подходят для тестирования «черного ящика» плагинов pytest.

Он пытается максимально изолировать выполнение теста от внешних факторов, изменяя текущий рабочий каталог на path и переменные окружения во время инициализации.

exception TimeoutExpired[исходный код]
plugins: List[Union[str, _PluggyPlugin]]

Список плагинов для использования с parseconfig() и runpytest(). Изначально это пустой список, но плагины могут быть добавлены в список. Тип элементов для добавления в список зависит от использующего их метода, так что подробности смотрите в них.

property path: Path

Путь к временной директории, используемой для создания файлов/запуска тестов и т.д.

make_hook_recorder(pluginmanager)[исходный код]

Создайте новый HookRecorder для PytestPluginManager.

chdir()[исходный код]

Cd во временный каталог.

Это делается автоматически при инстанцировании.

makefile(ext, *args, **kwargs)[исходный код]

Создайте новый текстовый файл(ы) в тестовом каталоге.

Parameters:
  • ext (str) – Расширение, которое должен использовать файл(ы), включая точку, например, .py.

  • args (str) – Все аргументы рассматриваются как строки и объединяются с помощью новых строк. Результат записывается как содержимое в файл. Имя файла зависит от тестовой функции, запрашивающей это приспособление.

  • kwargs (str) – Каждое ключевое слово является именем файла, а его значение будет записано как содержимое файла.

Result:

Первый созданный файл.

Result type:

Path

Примеры:

pytester.makefile(".txt", "line1", "line2")

pytester.makefile(".ini", pytest="[pytest]\naddopts=-rs\n")

Для создания двоичных файлов используйте непосредственно pathlib.Path.write_bytes():

filename = pytester.path.joinpath("foo.bin")
filename.write_bytes(b"...")
makeconftest(source)[исходный код]

Напишите файл contest.py.

Parameters:

source (str) – Содержание.

Result:

Файл conftest.py.

Result type:

Path

makeini(source)[исходный код]

Напишите файл tox.ini.

Parameters:

source (str) – Содержание.

Result:

Файл tox.ini.

Result type:

Path

getinicfg(source)[исходный код]

Возвращает секцию pytest из конфигурационного файла tox.ini.

makepyprojecttoml(source)[исходный код]

Напишите файл pyproject.toml.

Parameters:

source (str) – Содержание.

Result:

Файл pyproject.ini.

Result type:

Path

Добавлено в версии 6.0.

makepyfile(*args, **kwargs)[исходный код]

Ярлык для .makefile() с расширением .py.

По умолчанию используется имя теста с расширением „.py“, например test_foobar.py, перезаписывая существующие файлы.

Примеры:

def test_something(pytester):
    # Initial file is created test_something.py.
    pytester.makepyfile("foobar")
    # To create multiple files, pass kwargs accordingly.
    pytester.makepyfile(custom="foobar")
    # At this point, both 'test_something.py' & 'custom.py' exist in the test directory.
maketxtfile(*args, **kwargs)[исходный код]

Ярлык для .makefile() с расширением .txt.

По умолчанию используется имя теста с расширением „.txt“, например test_foobar.txt, перезаписывая существующие файлы.

Примеры:

def test_something(pytester):
    # Initial file is created test_something.txt.
    pytester.maketxtfile("foobar")
    # To create multiple files, pass kwargs accordingly.
    pytester.maketxtfile(custom="foobar")
    # At this point, both 'test_something.txt' & 'custom.txt' exist in the test directory.
syspathinsert(path=None)[исходный код]

Добавляет каталог к sys.path, по умолчанию path.

Это отменяется автоматически, когда этот объект умирает в конце каждого теста.

Parameters:

path (Optional[Union[str, PathLike[str]]]) – Путь.

mkdir(name)[исходный код]

Создайте новый (под)каталог.

Parameters:

name (Union[str, PathLike[str]]) – Имя каталога, относительно пути pytester.

Result:

Созданный каталог.

Result type:

Path

mkpydir(name)[исходный код]

Создайте новый пакет python.

Это создаст (под)каталог с пустым файлом __init__.py, чтобы он был распознан как пакет Python.

copy_example(name=None)[исходный код]

Скопируйте файл из каталога проекта в testdir.

Parameters:

name (Optional[str]) – Имя файла для копирования.

Result:

Путь к скопированному каталогу (внутри self.path).

Result type:

Path

getnode(config, arg)[исходный код]

Получить узел коллекции файла.

Parameters:
Result:

Узел.

Result type:

Union[Collector, Item]

getpathnode(path)[исходный код]

Возвращает узел коллекции файла.

Это похоже на getnode(), но использует parseconfigure() для создания (настроенного) экземпляра pytest Config.

Parameters:

path (Union[str, PathLike[str]]) – Путь к файлу.

Result:

Узел.

Result type:

Union[Collector, Item]

genitems(colitems)[исходный код]

Генерирует все элементы теста из узла коллекции.

Эта функция обращается к узлу коллекции и возвращает список всех элементов теста, содержащихся в нем.

Parameters:

colitems (Sequence[Union[Item, Collector]]) – Узлы коллекции.

Result:

Собранные предметы.

Result type:

List[Item]

runitem(source)[исходный код]

Запустите элемент «test_func».

Вызывающий экземпляр теста (класс, содержащий метод теста) должен предоставить метод .getrunner(), который должен вернуть бегунок, способный запустить протокол теста для одного элемента, например, _pytest.runner.runtestprotocol().

inline_runsource(source, *cmdlineargs)[исходный код]

Запустите тестовый модуль в процессе с помощью pytest.main().

Эта прога записывает «исходник» во временный файл и выполняет pytest.main() на нем, возвращая экземпляр HookRecorder для результата.

Parameters:
  • source (str) – Исходный код тестового модуля.

  • cmdlineargs – Любые дополнительные аргументы командной строки для использования.

inline_genitems(*args)[исходный код]

Запустите pytest.main(['--collectonly']) в процессе.

Запускает функцию pytest.main() для выполнения всего pytest внутри самого процесса тестирования, подобно inline_run(), но возвращает кортеж собранных элементов и экземпляр HookRecorder.

inline_run(*args, plugins=(), no_reraise_ctrlc=False)[исходный код]

Выполнить pytest.main() в процессе, возвращая HookRecorder.

Выполняет функцию pytest.main() для запуска всего pytest внутри самого процесса тестирования. Это означает, что она может вернуть экземпляр HookRecorder, который дает более подробные результаты этого запуска, чем можно получить путем сопоставления stdout/stderr из runpytest().

Parameters:
  • args (Union[str, PathLike[str]]) – Аргументы командной строки для передачи в pytest.main().

  • plugins – Дополнительные экземпляры плагинов, которые должен использовать экземпляр pytest.main().

  • no_reraise_ctrlc (bool) – Обычно мы возвращаем прерывания клавиатуры из дочерней программы. Если True, перехватывается исключение KeyboardInterrupt.

runpytest_inprocess(*args, **kwargs)[исходный код]

Возвращает результат выполнения pytest в процессе, предоставляя интерфейс, аналогичный тому, что предоставляет self.runpytest().

runpytest(*args, **kwargs)[исходный код]

Запустить pytest в линию или в подпроцессе, в зависимости от опции командной строки «–runpytest» и вернуть RunResult.

parseconfig(*args)[исходный код]

Возвращает новый экземпляр pytest pytest.Config из заданных аргументов командной строки.

Это вызывает код загрузки pytest в _pytest.config для создания нового pytest.PytestPluginManager и вызова хука pytest_cmdline_parse для создания нового экземпляра pytest.Config.

Если plugins были заполнены, они должны быть модулями плагинов, которые должны быть зарегистрированы в менеджере плагинов.

parseconfigure(*args)[исходный код]

Возвращает новый экземпляр pytest configured Config.

Возвращает новый экземпляр pytest.Config, подобно parseconfig(), но также вызывает хук pytest_configure.

getitem(source, funcname='test_func')[исходный код]

Возвращает элемент теста для тестовой функции.

Записывает исходный текст в файл python и запускает коллекцию pytest на полученном модуле, возвращая элемент теста для запрашиваемого имени функции.

Parameters:
  • source (Union[str, PathLike[str]]) – Источник модуля.

  • funcname (str) – Имя тестовой функции, для которой нужно вернуть элемент теста.

Result:

Предмет испытания.

Result type:

Item

getitems(source)[исходный код]

Верните все тестовые предметы, собранные в модуле.

Записывает исходный текст в файл Python и запускает коллекцию pytest на полученном модуле, возвращая все содержащиеся в нем тестовые элементы.

getmodulecol(source, configargs=(), *, withinit=False)[исходный код]

Возвращает узел коллекции модулей для source.

Записывает source в файл, используя makepyfile(), а затем запускает на нем коллекцию pytest, возвращая узел коллекции для тестового модуля.

Parameters:
  • source (Union[str, PathLike[str]]) – Исходный код модуля для сбора.

  • configargs – Любые дополнительные аргументы для передачи в parseconfigure().

  • withinit (bool) – Нужно ли также записывать файл __init__.py в тот же каталог, чтобы убедиться, что это пакет.

collect_by_name(modcol, name)[исходный код]

Возвращает узел коллекции для имени из коллекции модулей.

Выполняет поиск узла коллекции модуля в поисках узла коллекции, соответствующего заданному имени.

Parameters:
  • modcol (Collector) – Узел коллекции модулей; см. getmodulecol().

  • name (str) – Имя узла, который нужно вернуть.

popen(cmdargs, stdout=-1, stderr=-1, stdin=NotSetType.token, **kw)[исходный код]

Вызвать subprocess.Popen.

Вызывает subprocess.Popen, убедившись, что текущий рабочий каталог находится в PYTHONPATH.

Вероятно, вместо этого лучше использовать run().

run(*cmdargs, timeout=None, stdin=NotSetType.token)[исходный код]

Запуск команды с аргументами.

Запустите процесс с помощью subprocess.Popen с сохранением stdout и stderr.

Parameters:
  • cmdargs (Union[str, PathLike[str]]) – Последовательность аргументов для передачи в subprocess.Popen, при этом объекты типа path преобразуются в str автоматически.

  • timeout (Optional[float]) – Период в секундах, по истечении которого произойдет тайм-аут и возникнет ошибка Pytester.TimeoutExpired.

  • stdin (Union[NotSetType, bytes, IO[Any], int]) – Необязательный стандартный ввод. - Если он имеет тип CLOSE_STDIN (По умолчанию), то этот метод вызывает subprocess.Popen с stdin=subprocess.PIPE, и стандартный ввод закрывается сразу после запуска новой команды. - Если он имеет тип bytes, то эти байты передаются на стандартный вход команды. - В противном случае они передаются в subprocess.Popen. Для получения дополнительной информации в этом случае обратитесь к документу параметра stdin в subprocess.Popen.

Result:

Результат.

Result type:

RunResult

runpython(script)[исходный код]

Запустите сценарий python, используя sys.executable в качестве интерпретатора.

runpython_c(command)[исходный код]

Выполнить python -c "command".

runpytest_subprocess(*args, timeout=None)[исходный код]

Запуск pytest в качестве подпроцесса с заданными аргументами.

Любые плагины, добавленные в список plugins, будут добавлены с помощью опции командной строки -p. Дополнительно --basetemp используется для помещения любых временных файлов и каталогов в пронумерованный каталог с префиксом «runpytest-», чтобы не конфликтовать с обычным пронумерованным расположением временных файлов и каталогов pytest.

Parameters:
  • args (Union[str, PathLike[str]]) – Последовательность аргументов для передачи в подпроцесс pytest.

  • timeout (Optional[float]) – Период в секундах, по истечении которого произойдет тайм-аут и возникнет ошибка Pytester.TimeoutExpired.

Result:

Результат.

Result type:

RunResult

spawn_pytest(string, expect_timeout=10.0)[исходный код]

Запустите pytest с помощью pexpect.

Это гарантирует использование правильного pytest и устанавливает местоположение временных каталогов.

Возвращается ребенок pexpect.

spawn(cmd, expect_timeout=10.0)[исходный код]

Выполните команду с помощью pexpect.

Возвращается ребенок pexpect.

final class RunResult[исходный код]

Результат выполнения команды из Pytester.

ret: Union[int, ExitCode]

Возвращаемое значение.

outlines

Список строк, захваченных из stdout.

errlines

Список строк, захваченных из stderr.

stdout

LineMatcher из stdout.

Используйте, например, str(stdout) для восстановления stdout или широко используемый метод stdout.fnmatch_lines().

stderr

LineMatcher из stderr.

duration

Продолжительность в секундах.

parseoutcomes()[исходный код]

Возвращает словарь итоговых существительных -> подсчет, полученный в результате разбора терминального вывода, который произвел процесс тестирования.

Возвращаемые существительные всегда будут иметь форму множественного числа:

======= 1 failed, 1 passed, 1 warning, 1 error in 0.13s ====

Возвращает {"failed": 1, "passed": 1, "warnings": 1, "errors": 1}.

classmethod parse_summary_nouns(lines)[исходный код]

Извлечение существительных из итоговой строки терминала pytest.

Он всегда возвращает существительное во множественном числе для согласованности:

======= 1 failed, 1 passed, 1 warning, 1 error in 0.13s ====

Возвращает {"failed": 1, "passed": 1, "warnings": 1, "errors": 1}.

assert_outcomes(passed=0, skipped=0, failed=0, errors=0, xpassed=0, xfailed=0, warnings=None, deselected=None)[исходный код]

Убедитесь, что указанные результаты появляются с соответствующими номерами (0 означает, что ничего не произошло) в текстовом выводе тестового запуска.

warnings и deselected проверяются, только если не None.

class LineMatcher[исходный код]

Гибкое согласование текста.

Это удобный класс для тестирования больших текстов, например, вывода команд.

Конструктор принимает список строк без концевых новых строк, т.е. text.splitlines().

__str__()[исходный код]

Верните весь оригинальный текст.

Добавлено в версии 6.2: В старых версиях можно использовать str().

fnmatch_lines_random(lines2)[исходный код]

Проверьте наличие строк в выводе в любом порядке (используя fnmatch.fnmatch()).

re_match_lines_random(lines2)[исходный код]

Проверьте наличие строк в выводе в любом порядке (используя re.match()).

get_lines_after(fnline)[исходный код]

Возвращает все строки, следующие за заданной строкой в тексте.

Данная строка может содержать подстановочные знаки glob.

fnmatch_lines(lines2, *, consecutive=False)[исходный код]

Проверьте наличие строк в выводе (используя fnmatch.fnmatch()).

Аргументом является список строк, которые должны совпадать и могут использовать подстановочные знаки glob. Если они не совпадают, вызывается pytest.fail(). Совпадения и несовпадения также отображаются в сообщении об ошибке.

Parameters:
  • lines2 (Sequence[str]) – Строковые шаблоны для сопоставления.

  • consecutive (bool) – Совмещать линии последовательно?

re_match_lines(lines2, *, consecutive=False)[исходный код]

Проверьте наличие строк в выводе (используя re.match()).

Аргументом является список строк, которые должны совпадать с помощью re.match. Если они не совпадают, вызывается pytest.fail().

Совпадения и несовпадения также отображаются как часть сообщения об ошибке.

Parameters:
  • lines2 (Sequence[str]) – строковые шаблоны для сопоставления.

  • consecutive (bool) – последовательное совпадение строк?

no_fnmatch_line(pat)[исходный код]

Убедитесь, что захваченные строки не соответствуют заданному шаблону, используя fnmatch.fnmatch.

Parameters:

pat (str) – Шаблон для сопоставления строк.

no_re_match_line(pat)[исходный код]

Убедитесь, что захваченные строки не соответствуют заданному шаблону, используя re.match.

Parameters:

pat (str) – Регулярное выражение для сопоставления строк.

str()[исходный код]

Верните весь оригинальный текст.

final class HookRecorder[исходный код]

Запись всех хуков, вызываемых в менеджере плагинов.

Записывающие крючки создаются с помощью Pytester.

Это обертывает все вызовы хуков в менеджере плагинов, записывая каждый вызов перед распространением обычных вызовов.

getcalls(names)[исходный код]

Получить все записанные звонки на крючки с заданными именами (или названием).

matchreport(inamepart='', names=('pytest_runtest_logreport', 'pytest_collectreport'), when=None)[исходный код]

Возвращает тест-отчет, путь к которому совпадает с пунктирным путем импорта.

final class RecordedHookCall[исходный код]

Записанный звонок на крючок.

Аргументы вызова крючка устанавливаются как атрибуты. Например:

calls = hook_recorder.getcalls("pytest_runtest_setup")
# Suppose pytest_runtest_setup was called once with `item=an_item`.
assert calls[0].item is an_item

свойство_записи

Учебник: свойство_записи

record_property()[исходный код]

Добавьте дополнительные свойства к вызывающему тесту.

Пользовательские свойства становятся частью отчета о тестировании и доступны для сконфигурированных журналистов, подобно JUnit XML.

Приспособление можно вызвать с помощью name, value. Значение автоматически кодируется в XML.

Пример:

def test_function(record_property):
    record_property("example_key", 1)

запись_тестуемого_свойства

Учебник: запись_тестуемого_свойства

record_testsuite_property()[исходный код]

Запишите новый тег <property> как дочерний тег корневого <testsuite>.

Это подходит для записи глобальной информации обо всем тестовом наборе и совместимо с семейством xunit2 JUnit.

Это session-скопированное приспособление, которое вызывается с помощью (name, value). Пример:

def test_foo(record_testsuite_property):
    record_testsuite_property("ARCH", "PPC")
    record_testsuite_property("STORAGE_TYPE", "CEPH")
Parameters:
  • name – Имя свойства.

  • value – Значение свойства. Будет преобразовано в строку.

Предупреждение

В настоящее время это приспособление не работает с плагином pytest-xdist. Подробности смотрите в issue #7767.

повторное предупреждение

Учебник: Утверждение предупреждений с помощью функции warns

recwarn()[исходный код]

Возвращает экземпляр WarningsRecorder, который записывает все предупреждения, выданные тестовыми функциями.

Информацию о категориях предупреждений см. на сайте https://docs.pytest.org/en/latest/how-to/capture-warnings.html.

class WarningsRecorder[исходный код]

Контекстный менеджер для записи поднятых предупреждений.

Каждое записанное предупреждение является экземпляром warnings.WarningMessage.

Адаптировано из warnings.catch_warnings.

Примечание

DeprecationWarning и PendingDeprecationWarning обрабатываются по-разному; см. Обеспечение срабатывания предупреждения об устаревании кода.

property list: List[WarningMessage]

Список записанных предупреждений.

pop(cls=<class 'Warning'>)[исходный код]

Выдавать первое записанное предупреждение, поднимать исключение, если оно не существует.

clear()[исходный код]

Очистить список записанных предупреждений.

запрос

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

Приспособление request - это специальное приспособление, предоставляющее информацию о запрашивающей тестовой функции.

class FixtureRequest[исходный код]

Запрос на приспособление от функции испытания или приспособления.

Объект запроса предоставляет доступ к запрашивающему тестовому контексту и имеет необязательный атрибут param в случае, если приспособление параметризуется косвенно.

fixturename: Optional[str]

Приспособление, для которого выполняется данный запрос.

property scope: _ScopeName

Строка области видимости, одна из «function», «class», «module», «package», «session».

property fixturenames: List[str]

Имена всех активных светильников в данном запросе.

property node

Базовый узел коллекции (зависит от текущего диапазона запроса).

property config: Config

Объект конфигурации pytest, связанный с этим запросом.

property function

Объект тестовой функции, если запрос имеет область действия для каждой функции.

property cls

Класс (может быть None), в котором была собрана тестовая функция.

property instance

Экземпляр (может быть None), на котором была собрана тестовая функция.

property module

Объект модуля Python, в котором была собрана тестовая функция.

property path: Path

Путь, где была собрана тестовая функция.

property keywords: MutableMapping[str, Any]

Словарь ключевых слов/маркеров для базового узла.

property session: Session

Объект сессии Pytest.

addfinalizer(finalizer)[исходный код]

Добавьте функцию finalizer/teardown, которая будет вызываться без аргументов после завершения выполнения последнего теста в запрашивающем тестовом контексте.

applymarker(marker)[исходный код]

Применить маркер к одному вызову тестовой функции.

Этот метод полезен, если вы не хотите иметь ключевое слово/маркер на всех вызовах функций.

Parameters:

marker (Union[str, MarkDecorator]) – Объект, созданный вызовом pytest.mark.NAME(...).

raiseerror(msg)[исходный код]

Вызывает исключение FixtureLookupError.

Parameters:

msg (Optional[str]) – Необязательное пользовательское сообщение об ошибке.

getfixturevalue(argname)[исходный код]

Динамический запуск именованной функции приспособления.

Объявление приспособлений через аргумент функции рекомендуется там, где это возможно. Но если вы можете принять решение об использовании другого приспособления только во время настройки теста, вы можете использовать эту функцию для его получения внутри приспособления или тела тестовой функции.

Этот метод может быть использован на этапе настройки испытания или на этапе выполнения испытания, но на этапе разрушения испытания значение приспособления может быть недоступно.

Parameters:

argname (str) – Имя приспособления.

Exception:

pytest.FixtureLookupError – Если данное приспособление не удалось найти.

testdir

Идентичен pytester, но предоставляет экземпляр, методы которого возвращают унаследованные объекты py.path.local, когда это применимо.

В новом коде следует избегать использования testdir в пользу pytester.

final class Testdir[исходный код]

Аналогичен Pytester, но этот класс работает с объектами legacy legacy_path.

Все методы просто направляются к внутреннему экземпляру Pytester, преобразуя результаты в объекты legacy_path по мере необходимости.

exception TimeoutExpired
property tmpdir: LocalPath

Временный каталог, в котором выполняются тесты.

make_hook_recorder(pluginmanager)[исходный код]

См. Pytester.make_hook_recorder().

chdir()[исходный код]

См. Pytester.chdir().

finalize()[исходный код]

См. Pytester._finalize().

makefile(ext, *args, **kwargs)[исходный код]

См. Pytester.makefile().

makeconftest(source)[исходный код]

См. Pytester.makeconftest().

makeini(source)[исходный код]

См. Pytester.makeini().

getinicfg(source)[исходный код]

См. Pytester.getinicfg().

makepyprojecttoml(source)[исходный код]

См. Pytester.makepyprojecttoml().

makepyfile(*args, **kwargs)[исходный код]

См. Pytester.makepyfile().

maketxtfile(*args, **kwargs)[исходный код]

См. Pytester.maketxtfile().

syspathinsert(path=None)[исходный код]

См. Pytester.syspathinsert().

mkdir(name)[исходный код]

См. Pytester.mkdir().

mkpydir(name)[исходный код]

См. Pytester.mkpydir().

copy_example(name=None)[исходный код]

См. Pytester.copy_example().

getnode(config, arg)[исходный код]

См. Pytester.getnode().

getpathnode(path)[исходный код]

См. Pytester.getpathnode().

genitems(colitems)[исходный код]

См. Pytester.genitems().

runitem(source)[исходный код]

См. Pytester.runitem().

inline_runsource(source, *cmdlineargs)[исходный код]

См. Pytester.inline_runsource().

inline_genitems(*args)[исходный код]

См. Pytester.inline_genitems().

inline_run(*args, plugins=(), no_reraise_ctrlc=False)[исходный код]

См. Pytester.inline_run().

runpytest_inprocess(*args, **kwargs)[исходный код]

См. Pytester.runpytest_inprocess().

runpytest(*args, **kwargs)[исходный код]

См. Pytester.runpytest().

parseconfig(*args)[исходный код]

См. Pytester.parseconfig().

parseconfigure(*args)[исходный код]

См. Pytester.parseconfigure().

getitem(source, funcname='test_func')[исходный код]

См. Pytester.getitem().

getitems(source)[исходный код]

См. Pytester.getitems().

getmodulecol(source, configargs=(), withinit=False)[исходный код]

См. Pytester.getmodulecol().

collect_by_name(modcol, name)[исходный код]

См. Pytester.collect_by_name().

popen(cmdargs, stdout=-1, stderr=-1, stdin=NotSetType.token, **kw)[исходный код]

См. Pytester.popen().

run(*cmdargs, timeout=None, stdin=NotSetType.token)[исходный код]

См. Pytester.run().

runpython(script)[исходный код]

См. Pytester.runpython().

runpython_c(command)[исходный код]

См. Pytester.runpython_c().

runpytest_subprocess(*args, timeout=None)[исходный код]

См. Pytester.runpytest_subprocess().

spawn_pytest(string, expect_timeout=10.0)[исходный код]

См. Pytester.spawn_pytest().

spawn(cmd, expect_timeout=10.0)[исходный код]

См. Pytester.spawn().

tmp_path

Учебник: Как использовать временные каталоги и файлы в тестах

tmp_path()[исходный код]

Возвращает объект пути к временному каталогу, уникальный для каждого вызова тестовой функции, созданный как подкаталог базового временного каталога.

По умолчанию новый временный каталог базы создается каждый сеанс тестирования, а старые базы удаляются после 3 сеансов, чтобы облегчить отладку. Если используется --basetemp, то он очищается после каждой сессии. См. Базовый временный каталог по умолчанию.

Возвращаемый объект является объектом pathlib.Path.

tmp_путь_фабрики

Учебник: Приспособление tmp_path_factory

tmp_path_factory является экземпляром TempPathFactory:

final class TempPathFactory[исходный код]

Фабрика для временных каталогов под общим базовым каталогом temp.

Базовый каталог может быть настроен с помощью опции --basetemp.

mktemp(basename, numbered=True)[исходный код]

Создайте новый временный каталог, управляемый фабрикой.

Parameters:
  • basename (str) – Имя базы каталога, должно быть относительным путем.

  • numbered (bool) – Если True, убедитесь, что каталог уникален, добавив нумерованный суффикс, больший, чем любой существующий: basename="foo-" и numbered=True означает, что эта функция создаст каталоги с именами "foo-0", "foo-1", "foo-2" и так далее.

Result:

Путь к новому каталогу.

Result type:

Path

getbasetemp()[исходный код]

Возвращает базовый временный каталог, создавая его при необходимости.

Result:

Базовый временный каталог.

Result type:

Path

tmpdir

Учебник: Фиксаторы tmpdir и tmpdir_factory

tmpdir()

Возвращает объект пути к временному каталогу, уникальный для каждого вызова тестовой функции, созданный как подкаталог базового временного каталога.

По умолчанию новый временный каталог базы создается каждый сеанс тестирования, а старые базы удаляются после 3 сеансов, чтобы облегчить отладку. Если используется --basetemp, то он очищается после каждой сессии. См. Базовый временный каталог по умолчанию.

Возвращаемый объект является объектом legacy_path.

Примечание

В наши дни предпочтительнее использовать tmp_path.

About the tmpdir and tmpdir_factory fixtures.

tmpdir_factory

Учебник: Фиксаторы tmpdir и tmpdir_factory

tmpdir_factory является экземпляром TempdirFactory:

final class TempdirFactory[исходный код]

Обертка обратной совместимости, реализующая py.path.local для TempPathFactory.

Примечание

В наши дни предпочтительнее использовать tmp_path_factory.

About the tmpdir and tmpdir_factory fixtures.

mktemp(basename, numbered=True)[исходный код]

То же, что и TempPathFactory.mktemp(), но возвращает объект py.path.local.

getbasetemp()[исходный код]

То же, что и TempPathFactory.getbasetemp(), но возвращает объект py.path.local.

Крючки

Учебник: Написание плагинов

Ссылка на все хуки, которые могут быть реализованы conftest.py files и plugins.

Крючки для бутстрапинга

Bootstrapping hooks вызываются для плагинов, зарегистрированных достаточно рано (внутренние плагины и плагины setuptools).

pytest_load_initial_conftests(early_config, parser, args)[исходный код]

Вызывается для реализации загрузки начальных файлов conftest перед разбором опций командной строки.

Примечание

Этот хук не будет вызываться для файлов conftest.py, только для плагинов setuptools.

Parameters:
  • early_config (Config) – Объект конфигурации pytest.

  • args (List[str]) – Аргументы, переданные в командной строке.

  • parser (Parser) – Чтобы добавить параметры командной строки.

pytest_cmdline_preparse(config, args)[исходный код]

(Удалено) модифицировать аргументы командной строки перед разбором опций.

Этот хук считается устаревшим и будет удален в будущей версии pytest. Вместо него используйте pytest_load_initial_conftests.

Примечание

Этот хук не будет вызываться для файлов conftest.py, только для плагинов setuptools.

Parameters:
  • config (Config) – Объект конфигурации pytest.

  • args (List[str]) – Аргументы, переданные в командной строке.

pytest_cmdline_parse(pluginmanager, args)[исходный код]

Возвращает инициализированный Config, разбирая указанные args.

Останавливается на первом не-None результате, см. firstresult: остановка на первом результате, не являющемся None.

Примечание

Этот хук будет вызываться только для классов плагинов, переданных в аргументе plugins при использовании pytest.main для выполнения внутрипроцессного запуска теста.

Parameters:
  • pluginmanager (PytestPluginManager) – Менеджер плагинов pytest.

  • args (List[str]) – Список аргументов, переданных в командной строке.

Result:

Объект конфигурации pytest.

Result type:

Optional[Config]

pytest_cmdline_main(config)[исходный код]

Вызывается для выполнения основного действия командной строки. Реализация по умолчанию вызывает хуки configure и runtest_mainloop.

Останавливается на первом не-None результате, см. firstresult: остановка на первом результате, не являющемся None.

Parameters:

config (Config) – Объект конфигурации pytest.

Result:

Код выхода.

Result type:

Optional[Union[ExitCode, int]]

Крючки инициализации

Инициализационные хуки вызываются для плагинов и файлов conftest.py.

pytest_addoption(parser, pluginmanager)[исходный код]

Регистрирует опции в стиле argparse и значения конфигурации в стиле ini-, вызывается один раз в начале выполнения теста.

Примечание

Эта функция должна быть реализована только в плагинах или conftest.py файлах, расположенных в корневом каталоге тестов из-за того, как pytest discovers plugins during startup.

Parameters:
  • parser (pytest.Parser) – Чтобы добавить параметры командной строки, вызовите parser.addoption(...). Для добавления значений ini-файла вызовите parser.addini(...).

  • pluginmanager (pytest.PytestPluginManager) – Менеджер плагинов pytest, который можно использовать для установки hookspec()“ов или hookimpl()“ов и позволить одному плагину вызывать хуки другого плагина, чтобы изменить способ добавления опций командной строки.

В дальнейшем доступ к опциям можно получить через объект config соответственно:

  • config.getoption(name) для получения значения опции командной строки.

  • config.getini(name) для получения значения, считанного из файла ini-стиля.

Объект config передается по многим внутренним объектам через атрибут .config или может быть получен как приспособление pytestconfig.

Примечание

Этот крючок несовместим с hookwrapper=True.

pytest_addhooks(pluginmanager)[исходный код]

Вызывается во время регистрации плагина, чтобы позволить добавлять новые хуки через вызов pluginmanager.add_hookspecs(module_or_class, prefix).

Parameters:

pluginmanager (pytest.PytestPluginManager) – Менеджер плагинов pytest.

Примечание

Этот крючок несовместим с hookwrapper=True.

pytest_configure(config)[исходный код]

Разрешить плагинам и файлам conftest выполнять начальную настройку.

Этот хук вызывается для каждого плагина и начального файла conftest после разбора опций командной строки.

После этого хук вызывается для других файлов conftest по мере их импорта.

Примечание

Этот крючок несовместим с hookwrapper=True.

Parameters:

config (pytest.Config) – Объект конфигурации pytest.

pytest_unconfigure(config)[исходный код]

Вызывается перед завершением процесса тестирования.

Parameters:

config (Config) – Объект конфигурации pytest.

pytest_sessionstart(session)[исходный код]

Вызывается после создания объекта Session и перед выполнением коллекции и входом в цикл run test.

Parameters:

session (Session) – Объект сессии pytest.

pytest_sessionfinish(session, exitstatus)[исходный код]

Вызывается после завершения всего теста, непосредственно перед возвращением системе статуса выхода.

Parameters:
  • session (Session) – Объект сессии pytest.

  • exitstatus (Union[int, ExitCode]) – Статус, который pytest вернет системе.

pytest_plugin_registered(plugin, manager)[исходный код]

Зарегистрирован новый плагин pytest.

Parameters:
  • plugin (_PluggyPlugin) – Модуль или экземпляр плагина.

  • manager (pytest.PytestPluginManager) – менеджер плагинов pytest.

Примечание

Этот крючок несовместим с hookwrapper=True.

Коллекционные крючки

pytest вызывает следующие хуки для сбора файлов и каталогов:

pytest_collection(session)[исходный код]

Выполните фазу сбора для данной сессии.

Останавливается на первом не-None результате, см. firstresult: остановка на первом результате, не являющемся None. Возвращаемое значение не используется, а только останавливает дальнейшую обработку.

Фаза сбора по умолчанию выглядит следующим образом (подробную информацию см. в отдельных хуках):

  1. Начиная с session в качестве начального коллектора:

  1. pytest_collectstart(collector)

  2. report = pytest_make_collect_report(collector)

  3. pytest_exception_interact(collector, call, report) если произошло интерактивное исключение

  4. Для каждого собранного узла:

  1. Если элемент, pytest_itemcollected(item)

  2. Если это коллектор, обратитесь к нему.

  1. pytest_collectreport(report)

  1. pytest_collection_modifyitems(session, config, items)

  1. pytest_deselected(items) для любых невыбранных элементов (может вызываться несколько раз)

  1. pytest_collection_finish(session)

  2. Установите session.items в список собранных элементов

  3. Установите session.testscollected на количество собранных предметов

Вы можете реализовать этот хук только для выполнения некоторого действия перед сбором, например, плагин терминала использует его для начала отображения счетчика сбора (и возвращает None).

Parameters:

session (Session) – Объект сессии pytest.

pytest_ignore_collect(collection_path, path, config)[исходный код]

Возвращает True, чтобы не рассматривать этот путь для сбора.

Этот хук используется для всех файлов и каталогов перед вызовом более специфических хуков.

Останавливается на первом не-None результате, см. firstresult: остановка на первом результате, не являющемся None.

Parameters:
  • collection_path (Path) – Путь к анализу.

  • path (LEGACY_PATH) – Путь для анализа (устаревшее).

  • config (Config) – Объект конфигурации pytest.

Изменено в версии 7.0.0: Параметр collection_path был добавлен как эквивалент pathlib.Path параметра path. Параметр path был устаревшим.

pytest_collect_file(file_path, path, parent)[исходный код]

Создает Collector для заданного пути, или None, если не имеет значения.

Новый узел должен иметь указанный parent в качестве родителя.

Parameters:
  • file_path (Path) – Путь к анализу.

  • path (LEGACY_PATH) – Путь для сбора (устаревшее).

Изменено в версии 7.0.0: Параметр file_path был добавлен как эквивалент pathlib.Path параметра path. Параметр path был устаревшим.

pytest_pycollect_makemodule(module_path, path, parent)[исходный код]

Возвращает коллектор pytest.Module или None для заданного пути.

Этот хук будет вызываться для каждого совпадающего пути к тестовому модулю. Хук pytest_collect_file необходимо использовать, если вы хотите создать тестовые модули для файлов, которые не подходят в качестве тестового модуля.

Останавливается на первом не-None результате, см. firstresult: остановка на первом результате, не являющемся None.

Parameters:
  • module_path (Path) – Путь к модулю для сбора.

  • path (LEGACY_PATH) – Путь к модулю для сбора (устаревшее).

Изменено в версии 7.0.0: Параметр module_path был добавлен в качестве эквивалента параметра pathlib.Path параметра path.

Параметр path был устаревшим в пользу fspath.

Для воздействия на коллекцию объектов в модулях Python можно использовать следующий хук:

pytest_pycollect_makeitem(collector, name, obj)[исходный код]

Возвращает пользовательский элемент/коллектор для объекта Python в модуле, или None.

Останавливается на первом не-None результате, см. firstresult: остановка на первом результате, не являющемся None.

Parameters:
  • collector (Union[Module, Class]) – Коллектор модулей/классов.

  • name (str) – Имя объекта в модуле/классе.

  • obj (object) – Объект.

Result:

Созданные предметы/коллекторы.

Result type:

Union[None, Item, Collector, List[Union[Item, Collector]]]

pytest_generate_tests(metafunc)[исходный код]

Генерируйте (несколько) параметризованных вызовов тестовой функции.

Parameters:

metafunc (Metafunc) – Помощник Metafunc для тестовой функции.

pytest_make_parametrize_id(config, val, argname)[исходный код]

Возвращает удобное строковое представление заданного val, которое будет использоваться вызовами @pytest.mark.parametrize, или None, если хук не знает о val.

Имя параметра доступно в виде argname, если требуется.

Останавливается на первом не-None результате, см. firstresult: остановка на первом результате, не являющемся None.

Parameters:
  • config (Config) – Объект конфигурации pytest.

  • val (object) – Параметрируемое значение.

  • argname (str) – Имя автоматического параметра, выдаваемое pytest.

Крючки для влияния на пропуск тестов:

pytest_markeval_namespace(config)[исходный код]

Вызывается при построении словаря globals, используемого для оценки строковых условий в маркерах xfail/skipif.

Это полезно, когда условие для маркера требует объектов, которые дорого или невозможно получить во время сбора, что требуется обычными булевыми условиями.

Добавлено в версии 6.2.

Parameters:

config (Config) – Объект конфигурации pytest.

Result:

Словарь дополнительных глобалов для добавления.

Result type:

Dict[str, Any]

После завершения сбора можно изменить порядок элементов, удалить или иным образом изменить элементы теста:

pytest_collection_modifyitems(session, config, items)[исходный код]

Вызывается после выполнения сбора. Может фильтровать или переупорядочивать элементы на месте.

Parameters:
  • session (Session) – Объект сессии pytest.

  • config (Config) – Объект конфигурации pytest.

  • items (List[Item]) – Список объектов элементов.

Примечание

Если этот хук реализован в файлах conftest.py, он всегда получает все собранные элементы, а не только те, которые находятся под conftest.py, где он реализован.

pytest_collection_finish(session)[исходный код]

Вызывается после выполнения и изменения коллекции.

Parameters:

session (Session) – Объект сессии pytest.

Запуск теста (runtest) крючки

Все крючки, связанные с runtest, получают объект pytest.Item.

pytest_runtestloop(session)[исходный код]

Выполните основной цикл runtest (после завершения сбора).

Реализация хука по умолчанию выполняет протокол runtest для всех элементов, собранных в сессии (session.items), если только сбор не завершился неудачей или не установлена опция collectonly pytest.

Если в какой-то момент вызывается pytest.exit(), цикл немедленно завершается.

Если в какой-либо момент установлены значения session.shouldfail или session.shouldstop, цикл завершается после окончания выполнения протокола runtest для текущего элемента.

Parameters:

session (Session) – Объект сессии pytest.

Останавливается на первом не-None результате, см. firstresult: остановка на первом результате, не являющемся None. Возвращаемое значение не используется, а только останавливает дальнейшую обработку.

pytest_runtest_protocol(item, nextitem)[исходный код]

Выполните протокол runtest для одного тестового элемента.

Протокол runtest по умолчанию выглядит следующим образом (подробности см. в отдельных хуках):

  • pytest_runtest_logstart(nodeid, location)

  • Фаза установки:
    • call = pytest_runtest_setup(item) (обернуто в CallInfo(when="setup"))

    • report = pytest_runtest_makereport(item, call)

    • pytest_runtest_logreport(report)

    • pytest_exception_interact(call, report) если произошло интерактивное исключение

  • Вызывает фазу, если установка прошла и опция setuponly pytest не установлена:
    • call = pytest_runtest_call(item) (обернуто в CallInfo(when="call"))

    • report = pytest_runtest_makereport(item, call)

    • pytest_runtest_logreport(report)

    • pytest_exception_interact(call, report) если произошло интерактивное исключение

  • Фаза разборки:
    • call = pytest_runtest_teardown(item, nextitem) (обернуто в CallInfo(when="teardown"))

    • report = pytest_runtest_makereport(item, call)

    • pytest_runtest_logreport(report)

    • pytest_exception_interact(call, report) если произошло интерактивное исключение

  • pytest_runtest_logfinish(nodeid, location)

Parameters:
  • item (Item) – Тестовый элемент, для которого выполняется протокол runtest.

  • nextitem (Optional[Item]) – Запланированный следующий элемент теста (или «Нет», если это конец, мой друг).

Останавливается на первом не-None результате, см. firstresult: остановка на первом результате, не являющемся None. Возвращаемое значение не используется, а только останавливает дальнейшую обработку.

pytest_runtest_logstart(nodeid, location)[исходный код]

Вызывается в начале выполнения протокола runtest для одного элемента.

Описание протокола runtest см. в pytest_runtest_protocol.

Parameters:
  • nodeid (str) – Полный идентификатор узла элемента.

  • location (Tuple[str, Optional[int], str]) – Кортеж из (filename, lineno, testname).

pytest_runtest_logfinish(nodeid, location)[исходный код]

Вызывается в конце выполнения протокола runtest для одного элемента.

Описание протокола runtest см. в pytest_runtest_protocol.

Parameters:
  • nodeid (str) – Полный идентификатор узла элемента.

  • location (Tuple[str, Optional[int], str]) – Кортеж из (filename, lineno, testname).

pytest_runtest_setup(item)[исходный код]

Вызывается для выполнения этапа настройки для элемента теста.

Реализация по умолчанию запускает setup() на item и всех его родителях (которые еще не были настроены). Это включает получение значений приспособлений, требуемых элементом (которые еще не получены).

Parameters:

item (Item) – Пункт.

pytest_runtest_call(item)[исходный код]

Вызывается для выполнения теста для тестового элемента (фаза вызова).

Реализация по умолчанию вызывает item.runtest().

Parameters:

item (Item) – Пункт.

pytest_runtest_teardown(item, nextitem)[исходный код]

Вызывается для выполнения фазы разрушения элемента теста.

Реализация по умолчанию запускает финализаторы и вызывает teardown() на item и всех его родителях (которые должны быть снесены). Это включает в себя выполнение фазы сноса приспособлений, требуемых элементом (если они выходят за пределы области видимости).

Parameters:
  • item (Item) – Пункт.

  • nextitem (Optional[Item]) – Следующий по расписанию элемент теста (None, если не запланирован следующий элемент теста). Этот аргумент используется для выполнения точного завершения, т.е. вызова достаточного количества финализаторов, чтобы nextitem вызывал только функции установки.

pytest_runtest_makereport(item, call)[исходный код]

Вызывается для создания TestReport для каждой из фаз установки, вызова и завершения runtest элемента теста.

Описание протокола runtest см. в pytest_runtest_protocol.

Parameters:

Останавливается на первом не-None результате, см. firstresult: остановка на первом результате, не являющемся None.

Для более глубокого понимания вы можете посмотреть на стандартную реализацию этих крючков в _pytest.runner, а также, возможно, в _pytest.pdb, который взаимодействует с _pytest.capture и его перехватом ввода/вывода, чтобы немедленно перейти к интерактивной отладке, когда происходит сбой теста.

pytest_pyfunc_call(pyfuncitem)[исходный код]

Вызовите базовую функцию тестирования.

Останавливается на первом не-None результате, см. firstresult: остановка на первом результате, не являющемся None.

Parameters:

pyfuncitem (Function) – Функциональный элемент.

Крючки для составления отчетов

Крючки отчетности, связанные с сессией:

pytest_collectstart(collector)[исходный код]

Коллекционер начинает собирать коллекцию.

Parameters:

collector (Collector) – Коллекционер.

pytest_make_collect_report(collector)[исходный код]

Выполните collector.collect() и верните CollectReport.

Останавливается на первом не-None результате, см. firstresult: остановка на первом результате, не являющемся None.

Parameters:

collector (Collector) – Коллекционер.

pytest_itemcollected(item)[исходный код]

Мы только что собрали тестовое изделие.

Parameters:

item (Item) – Пункт.

pytest_collectreport(report)[исходный код]

Коллекционер закончил собирать.

Parameters:

report (CollectReport) – Отчет о сборах.

pytest_deselected(items)[исходный код]

Вызывается для невыбранных элементов теста, например, по ключевому слову.

Может вызываться несколько раз.

Parameters:

items (Sequence[Item]) – Предметы.

pytest_report_header(config, start_path, startdir)[исходный код]

Возвращает строку или список строк, которые будут отображаться в качестве заголовочной информации для отчетов терминала.

Parameters:
  • config (Config) – Объект конфигурации pytest.

  • start_path (Path) – Стартовый дир.

  • startdir (LEGACY_PATH) – Начальный каталог (устаревшее).

Примечание

Строки, возвращаемые плагином, отображаются перед строками плагинов, которые были запущены до него. Если вы хотите, чтобы ваша строка(и) отображалась первой, используйте trylast=True.

Примечание

Эта функция должна быть реализована только в плагинах или conftest.py файлах, расположенных в корневом каталоге тестов из-за того, как pytest discovers plugins during startup.

Изменено в версии 7.0.0: Параметр start_path был добавлен как эквивалент pathlib.Path параметра startdir. Параметр startdir был устаревшим.

pytest_report_collectionfinish(config, start_path, startdir, items)[исходный код]

Возвращает строку или список строк, которые будут выведены на экран после успешного завершения сбора.

Эти строки будут отображаться после стандартного сообщения «собрано X предметов».

Добавлено в версии 3.2.

Parameters:
  • config (Config) – Объект конфигурации pytest.

  • start_path (Path) – Стартовый дир.

  • startdir (LEGACY_PATH) – Начальный каталог (устаревшее).

  • items (Sequence[Item]) – Список элементов pytest, которые будут выполнены; этот список не должен быть изменен.

Примечание

Строки, возвращаемые плагином, отображаются перед строками плагинов, которые были запущены до него. Если вы хотите, чтобы ваша строка(и) отображалась первой, используйте trylast=True.

Изменено в версии 7.0.0: Параметр start_path был добавлен как эквивалент pathlib.Path параметра startdir. Параметр startdir был устаревшим.

pytest_report_teststatus(report, config)[исходный код]

Возвращает категорию результата, короткую букву и слово verbose для сообщения о статусе.

result-category - это категория, в которой будет учитываться результат, например, «пройден», «пропущен», «ошибка» или пустая строка.

По мере тестирования отображается короткая буква, например, «.», «s», «E» или пустая строка.

По мере выполнения тестирования в режиме verbose отображается слово verbose, например, «PASSED», «SKIPPED», «ERROR» или пустая строка.

pytest может неявно стилизовать их в соответствии с результатом отчета. Чтобы обеспечить явную стилизацию, верните кортеж для многословного слова, например "rerun", "R", ("RERUN", {"yellow": True}).

Parameters:
  • report (Union[CollectReport, TestReport]) – Объект отчета, состояние которого должно быть возвращено.

  • config (Config) – Объект конфигурации pytest.

Result:

Статус проверки.

Result type:

Tuple[str, str, Union[str, Mapping[str, bool]]]

Останавливается на первом не-None результате, см. firstresult: остановка на первом результате, не являющемся None.

pytest_report_to_serializable(config, report)[исходный код]

Сериализуйте заданный объект отчета в структуру данных, пригодную для передачи по проводам, например, преобразуйте в JSON.

Parameters:
pytest_report_from_serializable(config, data)[исходный код]

Восстановление объекта отчета, ранее сериализованного с помощью pytest_report_to_serializable.

Parameters:

config (Config) – Объект конфигурации pytest.

pytest_terminal_summary(terminalreporter, exitstatus, config)[исходный код]

Добавьте раздел в сводную отчетность по терминалам.

Parameters:
  • terminalreporter (TerminalReporter) – Объект внутреннего терминального репортера.

  • exitstatus (ExitCode) – Статус выхода, который будет сообщен ОС.

  • config (Config) – Объект конфигурации pytest.

Добавлено в версии 4.2: Параметр config.

pytest_fixture_setup(fixturedef, request)[исходный код]

Выполните настройку приспособления.

Parameters:
  • fixturdef – Объект определения приспособления.

  • request (SubRequest) – Объект запроса приспособления.

Result:

Возвращаемое значение вызова функции приспособления.

Result type:

Optional[object]

Останавливается на первом не-None результате, см. firstresult: остановка на первом результате, не являющемся None.

Примечание

Если функция приспособления возвращает None, другие реализации этой функции hook будут продолжать вызываться, в соответствии с поведением опции firstresult: остановка на первом результате, не являющемся None.

pytest_fixture_post_finalizer(fixturedef, request)[исходный код]

Вызывается после разрушения приспособления, но перед очисткой кэша, так что результат приспособления fixturedef.cached_result все еще доступен (не None).

Parameters:
  • fixturdef – Объект определения приспособления.

  • request (SubRequest) – Объект запроса приспособления.

pytest_warning_recorded(warning_message, when, nodeid, location)[исходный код]

Обработка предупреждения, полученного внутренним плагином pytest warnings.

Parameters:
  • warning_message (warnings.WarningMessage) – Перехваченное предупреждение. Это тот же объект, созданный warnings.catch_warnings(), и содержит те же атрибуты, что и параметры warnings.showwarning().

  • when (Literal['config', 'collect', 'runtest']) – Указывает, когда было зафиксировано предупреждение. Возможные значения: * "config": на этапе конфигурации/инициализации pytest. * "collect": во время сбора теста. * "runtest": во время выполнения теста.

  • nodeid (str) – Полный идентификатор предмета.

  • location (Optional[Tuple[str, int, str]]) – Если доступно, содержит информацию о контексте выполнения перехваченного предупреждения (имя файла, номер строки, функция). function оценивается в <module>, если контекст выполнения находится на уровне модуля.

Добавлено в версии 6.0.

Центральный крючок для создания отчетов о выполнении тестов:

pytest_runtest_logreport(report)[исходный код]

Обработать TestReport, созданные для каждой из фаз установки, вызова и завершения runtest элемента.

Описание протокола runtest см. в pytest_runtest_protocol.

Крючки, связанные с утверждениями:

pytest_assertrepr_compare(config, op, left, right)[исходный код]

Возвращает объяснение для сравнений в неработающих выражениях assert.

Возвращает None для отсутствия пользовательского объяснения, в противном случае возвращает список строк. Строки будут объединены новыми строками, но любые новые строки в строке будут экранированы. Обратите внимание, что все строки, кроме первой, будут иметь небольшой отступ, поскольку первая строка должна быть кратким изложением.

Parameters:
  • config (Config) – Объект конфигурации pytest.

  • op (str) – Оператор, например, "==", "!=", "not in".

  • left (object) – Левый операнд.

  • right (object) – Правый операнд.

pytest_assertion_pass(item, lineno, orig, expl)[исходный код]

Вызывается каждый раз, когда утверждение проходит.

Добавлено в версии 5.0.

Используйте этот хук для выполнения некоторой обработки после прохождения утверждения. Информация об исходном утверждении доступна в строке orig, а информация об утверждении, проанализированном pytest, доступна в строке expl.

Этот крючок должен быть явно включен опцией enable_assertion_pass_hook ini-file:

[pytest]
enable_assertion_pass_hook=true

При включении этой опции необходимо очистить файлы .pyc в каталоге проекта и библиотеках интерпретатора, поскольку утверждения придется переписать.

Parameters:
  • item (Item) – объект pytest текущего теста.

  • lineno (int) – Номер строки утверждения assert.

  • orig (str) – Строка с исходным утверждением.

  • expl (str) – Строка с пояснением утверждения.

Отладка/взаимодействие

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

pytest_internalerror(excrepr, excinfo)[исходный код]

Вызывается для внутренних ошибок.

Возвращает True, чтобы подавить обратную обработку печати сообщения INTERNALERROR непосредственно в sys.stderr.

Parameters:
  • excrepr (ExceptionRepr) – Объект исключения repr.

  • excinfo (ExceptionInfo[BaseException]) – Информация об исключениях.

pytest_keyboard_interrupt(excinfo)[исходный код]

Вызывается для прерывания клавиатуры.

Parameters:

excinfo (ExceptionInfo[Union[KeyboardInterrupt, Exit]]) – Информация об исключениях.

pytest_exception_interact(node, call, report)[исходный код]

Вызывается при возникновении исключения, которое потенциально может быть обработано интерактивно.

Может быть вызван во время сбора (см. pytest_make_collect_report), в этом случае report является CollectReport.

Может быть вызван во время runtest элемента (см. pytest_runtest_protocol), в этом случае report является TestReport.

Этот хук не вызывается, если поднятое исключение является внутренним исключением типа skip.Exception.

Parameters:
  • node (Union[Item, Collector]) – Предмет или коллекционер.

  • call (CallInfo[Any]) – Информация о вызове. Содержит исключение.

  • report (Union[CollectReport, TestReport]) – Коллекция или отчет о тестировании.

pytest_enter_pdb(config, pdb)[исходный код]

Вызывается после pdb.set_trace().

Может использоваться подключаемыми модулями для выполнения специальных действий непосредственно перед переходом отладчика python в интерактивный режим.

Parameters:
  • config (Config) – Объект конфигурации pytest.

  • pdb (pdb.Pdb) – Экземпляр Pdb.

pytest_leave_pdb(config, pdb)[исходный код]

Вызывается при выходе из pdb (например, с помощью continue после pdb.set_trace()).

Может использоваться подключаемыми модулями для выполнения специальных действий сразу после выхода отладчика python из интерактивного режима.

Parameters:
  • config (Config) – Объект конфигурации pytest.

  • pdb (pdb.Pdb) – Экземпляр Pdb.

Объекты

Полная ссылка на объекты, доступные из fixtures или hooks.

CallInfo

final class CallInfo[исходный код]

Информация о результате/исключении вызова функции.

excinfo: Optional[ExceptionInfo[BaseException]]

Перехваченное исключение вызова, если оно возникло.

start: float

Системное время, когда начался вызов, в секундах от эпохи.

stop: float

Системное время окончания вызова, в секундах от эпохи.

duration: float

Продолжительность вызова, в секундах.

when: Literal['collect', 'setup', 'call', 'teardown']

Контекст вызова: «сбор», «установка», «вызов» или «снятие».

property result: TResult

Возвращаемое значение вызова, если он не вызвал повышение.

Доступ возможен только в том случае, если excinfo равно None.

classmethod from_call(func, when, reraise=None)[исходный код]

Вызовите функцию func, обернув результат в CallInfo.

Parameters:
  • func (Callable[[], TResult]) – Функция для вызова. Вызывается без аргументов.

  • when (Literal['collect', 'setup', 'call', 'teardown']) – Фаза, в которой вызывается функция.

  • reraise (Optional[Union[Type[BaseException], Tuple[Type[BaseException], ...]]]) – Исключение или исключения, которые должны распространяться, если они подняты функцией, вместо того, чтобы быть завернутыми в CallInfo.

Класс

class Class[исходный код]

Base classes: PyCollector

Коллектор для методов испытаний.

classmethod from_parent(parent, *, name, obj=None, **kw)[исходный код]

Публичный конструктор.

collect()[исходный код]

Возвращает список дочерних элементов (элементов и коллекторов) для данного узла коллекции.

name: str

Уникальное имя в пределах области видимости родительского узла.

parent

Родительский узел коллектора.

config: Config

Объект конфигурации pytest.

session: Session

Сессия pytest, частью которой является этот узел.

path: Path

Путь к файловой системе, из которой был собран этот узел (может быть None).

Коллектор

class Collector[исходный код]

Base classes: Node

Экземпляры коллектора создают дочерние экземпляры с помощью функции collect() и таким образом итеративно строят дерево.

exception CollectError[исходный код]

Base classes: Exception

Ошибка во время сбора, содержит пользовательское сообщение.

collect()[исходный код]

Возвращает список дочерних элементов (элементов и коллекторов) для данного узла коллекции.

repr_failure(excinfo)[исходный код]

Возвращает представление сбоя коллекции.

Parameters:

excinfo (ExceptionInfo[BaseException]) – Информация об исключении для сбоя.

name: str

Уникальное имя в пределах области видимости родительского узла.

parent

Родительский узел коллектора.

config: Config

Объект конфигурации pytest.

session: Session

Сессия pytest, частью которой является этот узел.

path: Path

Путь к файловой системе, из которой был собран этот узел (может быть None).

CollectReport

final class CollectReport[исходный код]

Base classes: BaseReport

Объект отчета о коллекции.

Отчеты могут содержать произвольные дополнительные атрибуты.

nodeid: str

Нормализованный узловой идентификатор коллекции.

outcome: "Literal['passed', 'failed', 'skipped']"

Результат теста, всегда один из «пройден», «не пройден», «пропущен».

longrepr: Union[None, ExceptionInfo[BaseException], Tuple[str, int, str], str, TerminalRepr]

Нет или представление отказа.

result

Собранные предметы и узлы сбора.

sections: List[Tuple[str, str]]

Кортежи str (heading, content) с дополнительной информацией для отчета о тестировании. Используется pytest для добавления текста, захваченного из stdout, stderr и перехваченных событий логирования. Может использоваться другими плагинами для добавления произвольной информации в отчеты.

property caplog: str

Возвращает захваченные строки журнала, если захват журнала включен.

Добавлено в версии 3.5.

property capstderr: str

Возвращает захваченный текст из stderr, если захват включен.

Добавлено в версии 3.0.

property capstdout: str

Возвращает захваченный текст из stdout, если захват включен.

Добавлено в версии 3.0.

property count_towards_summary: bool

Экспериментальный Должен ли этот отчет учитываться при подсчете итогов, показанных в конце сеанса тестирования: «1 пройден, 1 провал и т.д.».

Примечание

Эта функция считается экспериментальной, поэтому имейте в виду, что она может быть изменена даже в релизах патчей.

property failed: bool

Является ли результат неудачным.

property fspath: str

Часть пути к узлу, о котором сообщается, в виде строки.

property head_line: Optional[str]

Экспериментальная Строка заголовка, показанная при выводе longrepr для этого отчета, чаще всего при представлении трассировки во время сбоев:

________ Test.foo ________

В приведенном выше примере заголовок_строки имеет вид «Test.foo».

Примечание

Эта функция считается экспериментальной, поэтому имейте в виду, что она может быть изменена даже в релизах патчей.

property longreprtext: str

Свойство только для чтения, которое возвращает полное строковое представление longrepr.

Добавлено в версии 3.0.

property passed: bool

Передан ли результат.

property skipped: bool

Пропускается ли исход.

Конфигурация

final class Config[исходный код]

Доступ к значениям конфигурации, pluginmanager и крючкам плагинов.

Parameters:
final class InvocationParams(args, plugins, dir)[исходный код]

Удерживает параметры, переданные во время pytest.main().

Атрибуты объекта доступны только для чтения.

Добавлено в версии 5.1.

Примечание

Обратите внимание, что переменная окружения PYTEST_ADDOPTS и параметр ini addopts обрабатываются pytest, а не включаются в атрибут args.

Плагины, обращающиеся к InvocationParams, должны знать об этом.

args: Tuple[str, ...]

Аргументы командной строки, переданные в pytest.main().

plugins: Optional[Sequence[Union[str, object]]]

Дополнительные плагины, может быть None.

dir: Path

Каталог, из которого был вызван pytest.main().

class ArgsSource(value)[исходный код]

Указывает источник аргументов теста.

Добавлено в версии 7.2.

ARGS = 1

Аргументы командной строки.

INCOVATION_DIR = 2

Каталог вызовов.

TESTPATHS = 3

Значение конфигурации „testpaths“.

option

Доступ к опциям командной строки в качестве атрибутов.

тип:

argparse.Namespace

invocation_params

Параметры, с которыми был вызван pytest.

тип:

InvocationParams

pluginmanager

Менеджер плагинов обрабатывает регистрацию плагинов и вызов хуков.

тип:

PytestPluginManager

stash

Место, где плагины могут хранить информацию о конфигурации для собственного использования.

тип:

Тайник

property rootpath: Path

Путь к rootdir.

тип:

pathlib.Path

Добавлено в версии 6.1.

property inipath: Optional[Path]

Путь к configfile.

тип:

Optional[pathlib.Path]

Добавлено в версии 6.1.

add_cleanup(func)[исходный код]

Добавьте функцию, которая будет вызываться, когда объект config выходит из использования (обычно это совпадает с pytest_unconfigure).

classmethod fromdictargs(option_dict, args)[исходный код]

Конструктор, используемый для подпроцессов.

issue_config_time_warning(warning, stacklevel)[исходный код]

Выдача и обработка предупреждения на этапе «конфигурирование».

Во время pytest_configure мы не можем перехватывать предупреждения с помощью функции catch_warnings_for_item, потому что невозможно иметь hookwrappers вокруг pytest_configure.

Эта функция предназначена в основном для плагинов, которым необходимо выдавать предупреждения во время pytest_configure (или подобных этапов).

Parameters:
  • warning (Warning) – Предупреждающий экземпляр.

  • stacklevel (int) – stacklevel пересылается в warnings.warn.

addinivalue_line(name, line)[исходный код]

Добавить строку к опции ini-файла. Опция должна быть объявлена, но может быть еще не установлена, в этом случае строка становится первой строкой в ее значении.

getini(name)[исходный код]

Возвращает значение конфигурации из ini file.

Если указанное имя не было зарегистрировано через предыдущий вызов parser.addini (обычно из плагина), будет выдано сообщение ValueError.

getoption(name, default=<NOTSET>, skip=False)[исходный код]

Возврат значения опции командной строки.

Parameters:
  • name (str) – Имя опции. Вы также можете указать литерал --OPT вместо имени опции «dest».

  • default – Значение по умолчанию, если опция с таким именем не существует.

  • skip (bool) – Если True, выдает ошибку pytest.skip, если опция не существует или имеет значение None.

getvalue(name, path=None)[исходный код]

Утратил силу, вместо него используйте getoption().

getvalueorskip(name, path=None)[исходный код]

Исправлено, вместо этого используйте getoption(skip=True).

ExceptionInfo

final class ExceptionInfo[исходный код]

Обертывает объекты sys.exc_info() и предлагает помощь в навигации по трассировке.

classmethod from_exc_info(exc_info, exprinfo=None)[исходный код]

Возвращает ExceptionInfo для существующего кортежа exc_info.

Предупреждение

Экспериментальный API

Parameters:

exprinfo (Optional[str]) – Текстовая строка, помогающая определить, следует ли вычеркнуть AssertionError из вывода. По умолчанию используется сообщение об исключении/__str__().

classmethod from_current(exprinfo=None)[исходный код]

Возвращает ExceptionInfo, соответствующее текущему обратному пути.

Предупреждение

Экспериментальный API

Parameters:

exprinfo (Optional[str]) – Текстовая строка, помогающая определить, следует ли вычеркнуть AssertionError из вывода. По умолчанию используется сообщение об исключении/__str__().

classmethod for_later()[исходный код]

Возвращает незаполненный ExceptionInfo.

fill_unfilled(exc_info)[исходный код]

Заполнить незаполненный ExceptionInfo, созданный с помощью for_later().

property type: Type[E]

Класс исключений.

property value: E

Значение исключения.

property tb: TracebackType

Исключение необработанное traceback.

property typename: str

Имя типа исключения.

property traceback: Traceback

Отслеживание.

exconly(tryshort=False)[исходный код]

Возвращает исключение в виде строки.

Если „tryshort“ имеет значение True, а исключение является AssertionError, возвращается только фактическая часть представления исключения (поэтому „AssertionError: „ удаляется из начала).

errisinstance(exc)[исходный код]

Возвращает True, если исключение является экземпляром exc.

Вместо этого используйте isinstance(excinfo.value, exc).

getrepr(showlocals=False, style='long', abspath=False, tbfilter=True, funcargs=False, truncate_locals=True, chain=True)[исходный код]

Возвращает str()able представление информации об этом исключении.

Parameters:
  • showlocals (bool) – Показать локали для каждой записи трассировки. Игнорируется, если style=="native".

  • style (str) – long|short|no|native|value traceback style.

  • abspath (bool) – Если пути должны быть изменены на абсолютные или оставлены без изменений.

  • tbfilter (bool) – Скрыть записи, содержащие локальную переменную __tracebackhide__==True. Игнорируется, если style=="native".

  • funcargs (bool) – Показывать фиксы («funcargs» для устаревших целей) на каждую запись трассировки.

  • truncate_locals (bool) – С помощью showlocals==True убедитесь, что локали могут быть безопасно представлены в виде строк.

  • chain (bool) – Следует ли показывать цепочки исключений в Python 3.

Изменено в версии 3.9: Добавлен параметр chain.

match(regexp)[исходный код]

Проверьте, соответствует ли регулярное выражение regexp строковому представлению исключения, используя re.search().

При совпадении возвращается True, иначе выдается AssertionError.

ExitCode

final class ExitCode(value)[исходный код]

Кодирует допустимые коды выхода из теста pytest.

В настоящее время пользователи и плагины могут предоставлять и другие коды выхода.

Добавлено в версии 5.0.

OK = 0

Тесты пройдены.

TESTS_FAILED = 1

Тесты не прошли.

INTERRUPTED = 2

pytest был прерван.

INTERNAL_ERROR = 3

Помешала внутренняя ошибка.

USAGE_ERROR = 4

pytest был использован неправильно.

NO_TESTS_COLLECTED = 5

pytest не смог найти тесты.

Файл

class File[исходный код]

Base classes: FSCollector

Базовый класс для сбора тестов из файла.

Работа с непитоновскими тестами.

name: str

Уникальное имя в пределах области видимости родительского узла.

parent

Родительский узел коллектора.

config: Config

Объект конфигурации pytest.

session: Session

Сессия pytest, частью которой является этот узел.

path: Path

Путь к файловой системе, из которой был собран этот узел (может быть None).

FixtureDef

final class FixtureDef[исходный код]

Base classes: Generic[FixtureValue]

Контейнер для определения приспособления.

property scope: _ScopeName

Строка области видимости, одна из «function», «class», «module», «package», «session».

FSCollector

class FSCollector[исходный код]

Base classes: Collector

path: Path

Путь к файловой системе, из которой был собран этот узел (может быть None).

classmethod from_parent(parent, *, fspath=None, path=None, **kw)[исходный код]

Публичный конструктор.

name: str

Уникальное имя в пределах области видимости родительского узла.

parent

Родительский узел коллектора.

config: Config

Объект конфигурации pytest.

session: Session

Сессия pytest, частью которой является этот узел.

Функция

class Function[исходный код]

Base classes: PyobjMixin, Item

Элемент, отвечающий за настройку и выполнение тестовой функции Python.

Parameters:
  • name – Полное имя функции, включая любые украшения, например, добавленные параметризацией (my_func[my_param]).

  • parent – Родительский узел.

  • config – Объект pytest Config.

  • callspec – Если задано, то данная функция была параметризована, и callspec содержит метаинформацию о параметризации.

  • callobj – Если задан, то объект, который будет вызван при вызове Функции, иначе callobj будет получен из parent с помощью originalname.

  • keywords – Ключевые слова, привязанные к объекту функции для сопоставления «-k».

  • session – Объект сессии pytest Session.

  • fixtureinfo – Информация о приспособлении уже разрешена в этом узле приспособления…

  • originalname – Имя атрибута, используемое для доступа к объекту базовой функции. По умолчанию name. Установите это значение, если имя отличается от исходного имени, например, когда оно содержит украшения, такие как те, которые добавляются при параметризации (my_func[my_param]).

originalname

Оригинальное имя функции, без каких-либо украшений (например, параметризация добавляет к именам функций суффикс "[...]"), используемое для доступа к базовому объекту функции из parent (в случае, если callobj не задано явно).

Добавлено в версии 3.0.

classmethod from_parent(parent, **kw)[исходный код]

Публичный конструктор.

property function

Объект „function“, лежащий в основе python.

runtest()[исходный код]

Выполнение базовой тестовой функции.

repr_failure(excinfo)[исходный код]

Возвращает представление коллекции или ошибки теста.

Parameters:

excinfo (ExceptionInfo[BaseException]) – Информация об исключении для сбоя.

name: str

Уникальное имя в пределах области видимости родительского узла.

parent

Родительский узел коллектора.

config: Config

Объект конфигурации pytest.

session: Session

Сессия pytest, частью которой является этот узел.

path: Path

Путь к файловой системе, из которой был собран этот узел (может быть None).

FunctionDefinition

class FunctionDefinition[исходный код]

Base classes: Function

Этот класс является промежуточным решением до тех пор, пока мы не перейдем к реальным узлам определения функций и не избавимся от metafunc.

runtest()[исходный код]

Выполнение базовой тестовой функции.

name: str

Уникальное имя в пределах области видимости родительского узла.

parent

Родительский узел коллектора.

config: Config

Объект конфигурации pytest.

session: Session

Сессия pytest, частью которой является этот узел.

path: Path

Путь к файловой системе, из которой был собран этот узел (может быть None).

setup()

Выполнение базовой тестовой функции.

Пункт

class Item[исходный код]

Base classes: Node

Базовый элемент вызова теста.

Обратите внимание, что для одной функции может быть несколько элементов вызова теста.

user_properties: List[Tuple[str, object]]

Список кортежей (имя, значение), содержащий свойства, определенные пользователем для данного теста.

name: str

Уникальное имя в пределах области видимости родительского узла.

parent

Родительский узел коллектора.

config: Config

Объект конфигурации pytest.

session: Session

Сессия pytest, частью которой является этот узел.

path: Path

Путь к файловой системе, из которой был собран этот узел (может быть None).

runtest()[исходный код]

Запустите тестовый пример для этого элемента.

Должны быть реализованы подклассами.

add_report_section(when, key, content)[исходный код]

Добавьте новый раздел отчета, аналогично тому, как это сделано внутри компании, чтобы добавить stdout и stderr, захваченный вывод:

item.add_report_section("call", "stdout", "report section contents")
Parameters:
  • when (str) – Одно из возможных состояний захвата, "setup", "call", "teardown".

  • key (str) – Имя секции, может быть изменено по желанию. Pytest использует "stdout" и "stderr" внутренне.

  • content (str) – Полное содержимое в виде строки.

reportinfo()[исходный код]

Получение информации о местоположении этого элемента для отчетов о тестировании.

Возвращает кортеж с тремя элементами:

  • Путь к тесту (по умолчанию self.path)

  • Номер строки теста (по умолчанию None)

  • Имя теста, который будет показан (по умолчанию "")

MarkDecorator

class MarkDecorator[исходный код]

Декоратор для нанесения метки на тестовые функции и классы.

MarkDecorators создаются с помощью pytest.mark:

mark1 = pytest.mark.NAME              # Simple MarkDecorator
mark2 = pytest.mark.NAME(name1=value) # Parametrized MarkDecorator

и затем могут быть применены в качестве декораторов к тестовым функциям:

@mark2
def test_function():
    pass

Когда вызывается MarkDecorator, он делает следующее:

  1. Если вызывается с одним классом в качестве единственного позиционного аргумента и без дополнительных аргументов в виде ключевых слов, он прикрепляет метку к классу, так что она автоматически применяется ко всем тестовым случаям, найденным в этом классе.

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

  3. При вызове в любом другом случае он возвращает новый экземпляр MarkDecorator с содержимым исходного MarkDecorator, обновленным с помощью аргументов, переданных этому вызову.

Примечание: Приведенные выше правила не позволяют MarkDecorator хранить в качестве позиционного аргумента только одну ссылку на функцию или класс без дополнительных ключевых слов или позиционных аргументов. Это можно обойти, используя with_args().

property name: str

Псевдоним для mark.name.

property args: Tuple[Any, ...]

Псевдоним для mark.args.

property kwargs: Mapping[str, Any]

Псевдоним для mark.kwargs.

with_args(*args, **kwargs)[исходный код]

Возвращает MarkDecorator с добавленными дополнительными аргументами.

В отличие от вызова MarkDecorator, функция with_args() может быть использована, даже если единственным аргументом является callable/class.

MarkGenerator

final class MarkGenerator[исходный код]

Фабрика для объектов MarkDecorator - раскрывается как экземпляр pytest.mark singleton.

Пример:

import pytest

@pytest.mark.slowtest
def test_function():
   pass

применяет „slowtest“ Mark на test_function.

Марк

final class Mark[исходный код]
name: str

Название марки.

args: Tuple[Any, ...]

Позиционные аргументы декоратора метки.

kwargs: Mapping[str, Any]

Аргументы ключевых слов декоратора метки.

combined_with(other)[исходный код]

Возвращает новый Знак, который является комбинацией этого Знака и другого Знака.

Объединяет путем добавления args и объединения kwargs.

Parameters:

other (Mark) – Знак, с которым можно сочетать.

Result type:

Mark

Metafunc

final class Metafunc[исходный код]

Объекты, передаваемые в крючок pytest_generate_tests.

Они помогают проверять тестовую функцию и генерировать тесты в соответствии с конфигурацией теста или значениями, указанными в классе или модуле, где определена тестовая функция.

definition

Доступ к базовому _pytest.python.FunctionDefinition.

config

Доступ к объекту pytest.Config для тестовой сессии.

module

Объект модуля, в котором определена тестовая функция.

function

Основополагающая тестовая функция Python.

fixturenames

Набор имен приспособлений, требуемых функцией тестирования.

cls

Объект класса, в котором определена тестовая функция, или None.

parametrize(argnames, argvalues, indirect=False, ids=None, scope=None, *, _param_mark=None)[исходный код]

Добавляет новые вызовы к базовой тестовой функции, используя список argvalues для заданных argnames. Параметризация выполняется на этапе сбора. Если вам необходимо настроить дорогостоящие ресурсы, обратитесь к настройке косвенных параметров, чтобы делать это не во время установки теста.

Может вызываться несколько раз, в этом случае каждый вызов параметризует все предыдущие параметризации, например.

unparametrized:         t
parametrize ["x", "y"]: t[x], t[y]
parametrize [1, 2]:     t[x-1], t[x-2], t[y-1], t[y-2]
Parameters:
  • argnames (Union[str, Sequence[str]]) – Строка, разделенная запятыми, обозначающая одно или несколько имен аргументов, или список/кортеж строк аргументов.

  • argvalues (Iterable[Union[ParameterSet, Sequence[object], object]]) – Список argvalues определяет, как часто вызывается тест с различными значениями аргументов. Если было указано только одно имя argname, то argvalues - это список значений. Если было указано N имен argname, argvalues должен быть списком из N кортежей, где каждый элемент кортежа определяет значение для соответствующего имени argname.

  • indirect (Union[bool, Sequence[str]]) – Список имен аргументов (подмножество argnames) или булево значение. Если True, то список содержит все имена из argnames. Каждое argvalue, соответствующее argname в этом списке, будет передано как request.param соответствующей функции приспособления argname, чтобы она могла выполнять более дорогие настройки на этапе настройки теста, а не во время сбора.

  • ids (Optional[Union[Iterable[Optional[object]], Callable[[Any], Optional[object]]]]) – Последовательность (или генератор) идентификаторов для argvalues, или вызываемый объект для возврата части идентификатора для каждого значения argvalue. При использовании последовательностей (и генераторов типа itertools.count()) возвращаемые идентификаторы должны быть типа string, int, float, bool или None. Они отображаются на соответствующий индекс в argvalues. None означает использовать автоматически сгенерированный идентификатор. Если это вызываемая функция, то она будет вызвана для каждой записи в argvalues, а возвращаемое значение будет использовано как часть автогенерируемого id для всего набора (где части соединяются тире («-«)). Это полезно для предоставления более конкретных идентификаторов для определенных элементов, например, дат. При возврате None будет использован автоматически сгенерированный идентификатор. Если идентификаторы не указаны, они будут сгенерированы автоматически из значений аргументов.

  • scope (Optional[_ScopeName]) – Если указано, то обозначает область действия параметров. Область видимости используется для группировки тестов по экземплярам параметров. Она также переопределяет любую область видимости, определенную функцией приспособления, позволяя задать динамическую область видимости с помощью контекста теста или конфигурации.

Модуль

class Module[исходный код]

Base classes: File, PyCollector

Коллектор для тестовых классов и функций.

collect()[исходный код]

Возвращает список дочерних элементов (элементов и коллекторов) для данного узла коллекции.

name: str

Уникальное имя в пределах области видимости родительского узла.

parent

Родительский узел коллектора.

config: Config

Объект конфигурации pytest.

session: Session

Сессия pytest, частью которой является этот узел.

path: Path

Путь к файловой системе, из которой был собран этот узел (может быть None).

Узел

class Node[исходный код]

Базовый класс для Collector и Item, компонентов дерева коллекции тестов.

Подклассы коллекторов имеют дочерние узлы; элементы являются листовыми узлами.

fspath: LocalPath

LEGACY_PATH копия атрибута path. Предназначен для использования в методах, еще не перешедших на pathlib.Path, таких как Item.reportinfo(). Будет устаревшим в будущем выпуске, вместо него лучше использовать path.

name: str

Уникальное имя в пределах области видимости родительского узла.

parent

Родительский узел коллектора.

config: Config

Объект конфигурации pytest.

session: Session

Сессия pytest, частью которой является этот узел.

path: Path

Путь к файловой системе, из которой был собран этот узел (может быть None).

keywords: MutableMapping[str, Any]

Ключевые слова/маркеры, собранные из всех диапазонов.

own_markers: List[Mark]

Объекты маркеров, принадлежащие этому узлу.

extra_keyword_matches: Set[str]

Позволяет добавлять дополнительные ключевые слова для использования при подборе.

stash: Stash

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

classmethod from_parent(parent, **kw)[исходный код]

Публичный конструктор для узлов.

Это перенаправление было введено для того, чтобы можно было убрать хрупкую логику из конструкторов узлов.

Подклассы могут использовать super().from_parent(...) при переопределении конструкции.

Parameters:

parent (Node) – Родительский узел этого узла.

property ihook

fspath-чувствительный хук-прокси, используемый для вызова хуков pytest.

warn(warning)[исходный код]

Выдать предупреждение для этого узла.

Предупреждения будут отображаться после сеанса тестирования, если они явно не подавлены.

Parameters:

warning (Warning) – Выдаваемый экземпляр предупреждения.

Exception:

ValueError – Если экземпляр warning не является подклассом Warning.

Пример использования:

node.warn(PytestWarning("some message"))
node.warn(UserWarning("some message"))

Изменено в версии 6.2: Теперь принимается любой подкласс Warning, а не только подклассы PytestWarning.

property nodeid: str

Строка ::-разделенная строка, обозначающая адрес дерева коллекций.

listchain()[исходный код]

Возвращает список всех родительских коллекторов до self, начиная с корня дерева коллекций.

Result:

Узлы.

Result type:

List[Node]

add_marker(marker, append=True)[исходный код]

Динамически добавляет объект маркера к узлу.

Parameters:
  • marker (Union[str, MarkDecorator]) – Маркер.

  • append (bool) – Добавлять ли маркер или дополнять его.

iter_markers(name=None)[исходный код]

Итерация по всем маркерам узла.

Parameters:

name (Optional[str]) – Если задано, отфильтровать результаты по атрибуту name.

Result:

Итератор маркеров узла.

Result type:

Iterator[Mark]

for ... in iter_markers_with_node(name=None)[исходный код]

Итерация по всем маркерам узла.

Parameters:

name (Optional[str]) – Если задано, отфильтровать результаты по атрибуту name.

Result:

Итератор кортежей (узел, метка).

Result type:

Iterator[Tuple[Node, Mark]]

get_closest_marker(name: str) Optional[Mark][исходный код]
get_closest_marker(name: str, default: Mark) Mark

Возвращает первый маркер, соответствующий имени, от ближайшего (например, функция) до более дальнего уровня (например, уровень модуля).

Parameters:
  • default – Возвращаемое значение, если маркер не был найден.

  • name – Имя для фильтрации по.

listextrakeywords()[исходный код]

Возвращает набор всех дополнительных ключевых слов в self и любых родителях.

addfinalizer(fin)[исходный код]

Зарегистрируйте функцию, которая будет вызываться без аргументов, когда этот узел будет завершен.

Этот метод может быть вызван только тогда, когда этот узел активен в цепочке установки, например, во время self.setup().

getparent(cls)[исходный код]

Получить следующий родительский узел (включая self), который является экземпляром данного класса.

Parameters:

cls (Type[_NodeType]) – Класс узла для поиска.

Result:

Узел, если он найден.

Result type:

Optional[_NodeType]

repr_failure(excinfo, style=None)[исходный код]

Возвращает представление коллекции или ошибки теста.

Parameters:

excinfo (ExceptionInfo[BaseException]) – Информация об исключении для сбоя.

Парсер

final class Parser[исходный код]

Парсер для аргументов командной строки и значений ini-файлов.

Variables:

extra_info – Дикт общего значения param -> для отображения в случае ошибки при обработке аргументов командной строки.

getgroup(name, description='', after=None)[исходный код]

Получить (или создать) именованную группу опций.

Parameters:
  • name (str) – Имя группы опций.

  • description (str) – Длинное описание для вывода команды –help.

  • after (Optional[str]) – Имя другой группы, используемое для упорядочивания вывода –help.

Result:

Группа опций.

Result type:

OptionGroup

Возвращаемый объект группы имеет метод addoption с той же сигнатурой, что и parser.addoption, но в выводе pytest --help будет показана соответствующая группа.

addoption(*opts, **attrs)[исходный код]

Зарегистрируйте параметр командной строки.

Parameters:
  • opts (str) – Названия опционов, могут быть короткими или длинными опционами.

  • attrs (Any) – Те же атрибуты, которые принимает функция argparse библиотеки add_argument().

После разбора командной строки опции доступны в объекте pytest config через config.option.NAME, где NAME обычно задается путем передачи атрибута dest, например addoption("--long", dest="NAME", ...).

parse_known_args(args, namespace=None)[исходный код]

Разберите известные аргументы на данном этапе.

Result:

Объект пространства имен argparse.

Result type:

Namespace

parse_known_and_unknown_args(args, namespace=None)[исходный код]

Разберите известные аргументы на данном этапе, а также верните оставшиеся неизвестные аргументы.

Result:

Кортеж, содержащий объект пространства имен argparse для известных аргументов и список неизвестных аргументов.

Result type:

Tuple[Namespace, List[str]]

addini(name, help, type=None, default=None)[исходный код]

Зарегистрируйте опцию ini-файла.

Parameters:
  • name (str) – Имя ини-переменной.

  • type (Optional[Literal['string', 'paths', 'pathlist', 'args', 'linelist', 'bool']]) – Тип переменной. Может быть: * string: строка * bool: булево * args: список строк, разделенных как в shell * linelist: список строк, разделенных переводами строк * paths: список pathlib.Path, разделенных как в shell * pathlist: список py.path, разделенных как в shell … versionadded:: 7.0 Тип переменной paths. По умолчанию равен string, если None или не передан.

  • default (Any) – Значение по умолчанию, если опция ini-file не существует, но запрашивается.

Значение ini-переменных можно получить с помощью вызова config.getini(name).

OptionGroup

class OptionGroup[исходный код]

Группа опций, отображаемая в собственном разделе.

addoption(*opts, **attrs)[исходный код]

Добавьте опцию в эту группу.

Если указана сокращенная версия длинной опции, она будет подавлена в справке. addoption('--twowords', '--two-words') приводит к тому, что в справке отображается только --two-words, но --twowords принимается и автоматическое место назначения находится в args.twowords.

Parameters:
  • opts (str) – Названия опционов, могут быть короткими или длинными опционами.

  • attrs (Any) – Те же атрибуты, которые принимает функция argparse библиотеки add_argument().

PytestPluginManager

final class PytestPluginManager[исходный код]

Base classes: PluginManager

pluggy.PluginManager с дополнительной функциональностью, специфичной для pytest:

  • Загрузка плагинов из командной строки, PYTEST_PLUGINS переменная env и pytest_plugins глобальные переменные, найденные в загружаемых плагинах.

  • conftest.py загрузка во время запуска.

parse_hookimpl_opts(plugin, name)[исходный код]
parse_hookspec_opts(module_or_class, name)[исходный код]
register(plugin, name=None)[исходный код]

Зарегистрировать плагин и вернуть его каноническое имя или None, если имя заблокировано для регистрации. Вызвать ValueError, если плагин уже зарегистрирован.

getplugin(name)[исходный код]
hasplugin(name)[исходный код]

Возвращает, зарегистрирован ли плагин с заданным именем.

import_plugin(modname, consider_entry_points=False)[исходный код]

Импортируйте плагин с помощью modname.

Если consider_entry_points равно True, имена точек входа также рассматриваются для поиска плагина.

add_hookcall_monitoring(before, after)

добавить функции трассировки до/после для всех хуков и вернуть функцию отмены, которая при вызове удалит добавленные трассировки.

before(hook_name, hook_impls, kwargs) будет вызываться перед всеми вызовами хуков и получать экземпляр hookcaller, список экземпляров HookImpl и аргументы ключевых слов для вызова хука.

after(outcome, hook_name, hook_impls, kwargs) получает те же аргументы, что и before, но также объект pluggy._callers._Result, который представляет результат общего вызова хука.

add_hookspecs(module_or_class)

добавить новые спецификации хуков, определенные в данном module_or_class. Функции распознаются, если они были оформлены соответствующим образом.

check_pending()

Убедитесь, что все крючки, которые не были проверены на соответствие спецификации крючков, являются необязательными, иначе вызовите PluginValidationError.

enable_tracing()

включить трассировку вызовов хука и вернуть функцию отмены.

get_canonical_name(plugin)

Возвращает каноническое имя для объекта плагина. Обратите внимание, что плагин может быть зарегистрирован под другим именем, которое было указано вызывающим register(plugin, name). Для получения имени зарегистрированного плагина используйте get_name(plugin) вместо этого.

get_hookcallers(plugin)

получить все вызывающие крючки для указанного плагина.

get_name(plugin)

Возвращает имя для зарегистрированного плагина или None, если он не зарегистрирован.

get_plugin(name)

Возвращает плагин или None для заданного имени.

get_plugins()

возвращает набор зарегистрированных плагинов.

has_plugin(name)

Возвращает True, если плагин с заданным именем зарегистрирован.

is_blocked(name)

возвращает True, если заданное имя плагина заблокировано.

is_registered(plugin)

Возвращает True, если плагин уже зарегистрирован.

list_name_plugin()

возвращает список пар имя/плагин.

list_plugin_distinfo()

возвращает список кортежей distinfo/plugin для всех зарегистрированных плагинов setuptools.

load_setuptools_entrypoints(group, name=None)

Загрузка модулей из запроса указанных setuptools group.

Parameters:
  • group (str) – группа точек входа для загрузки плагинов

  • name (str) – если задано, загружает только плагины с заданным name.

Result type:

int

Result:

возвращает количество загруженных плагинов этим вызовом.

set_blocked(name)

блокировать регистрацию данного имени, снять с регистрации, если оно уже зарегистрировано.

subset_hook_caller(name, remove_plugins)

Возвращает новый экземпляр _hooks._HookCaller для именованного метода, который управляет вызовами всех зарегистрированных плагинов, кроме тех, что из remove_plugins.

unregister(plugin=None, name=None)

снять с регистрации объект плагина и все содержащиеся в нем реализации хуков из внутренних структур данных.

Сессия

final class Session[исходный код]

Base classes: FSCollector

exception Interrupted

Base classes: KeyboardInterrupt

Сигнализирует о том, что выполнение теста было прервано.

exception Failed

Base classes: Exception

Сигнализирует об остановке при неудачном выполнении теста.

property startpath: Path

Путь, с которого был вызван pytest.

Добавлено в версии 7.0.0.

perform_collect(args=None, genitems=True)[исходный код]

Выполните этап сбора данных для этой сессии.

Вызывается реализацией хука по умолчанию pytest_collection; подробнее см. документацию по этому хуку. В целях тестирования его также можно вызывать непосредственно на свежем Session.

Эта функция обычно рекурсивно расширяет все коллекторы, собранные в сессии, до их элементов, и возвращаются только элементы. Для целей тестирования это можно подавить, передав genitems=False, в этом случае возвращаемое значение содержит эти коллекторы нераскрытыми, а session.items будет пустым.

for ... in collect()[исходный код]

Возвращает список дочерних элементов (элементов и коллекторов) для данного узла коллекции.

name: str

Уникальное имя в пределах области видимости родительского узла.

parent

Родительский узел коллектора.

config: Config

Объект конфигурации pytest.

session: Session

Сессия pytest, частью которой является этот узел.

path: Path

Путь к файловой системе, из которой был собран этот узел (может быть None).

TestReport

final class TestReport[исходный код]

Base classes: BaseReport

Базовый объект отчета о тестировании (также используется для вызовов установки и разрыва, если они не сработали).

Отчеты могут содержать произвольные дополнительные атрибуты.

nodeid: str

Нормализованный узловой идентификатор коллекции.

location: Tuple[str, Optional[int], str]

Кортеж (filesystempath, lineno, domaininfo), указывающий фактическое местоположение элемента теста - оно может отличаться от собранного, например, если метод унаследован от другого модуля.

keywords: Mapping[str, Any]

Словарь имя -> значение, содержащий все ключевые слова и маркеры, связанные с вызовом теста.

outcome: "Literal['passed', 'failed', 'skipped']"

Результат теста, всегда один из «пройден», «не пройден», «пропущен».

longrepr: Union[None, ExceptionInfo[BaseException], Tuple[str, int, str], str, TerminalRepr]

Нет или представление отказа.

when: Optional[str]

Одно из „setup“, „call“, „teardown“ для указания фазы выполнения теста.

user_properties

Свойства пользователя - это список кортежей (имя, значение), в котором содержатся определяемые пользователем свойства теста.

sections: List[Tuple[str, str]]

Кортежи str (heading, content) с дополнительной информацией для отчета о тестировании. Используется pytest для добавления текста, захваченного из stdout, stderr и перехваченных событий логирования. Может использоваться другими плагинами для добавления произвольной информации в отчеты.

duration: float

Время, затраченное на выполнение только теста.

classmethod from_item_and_call(item, call)[исходный код]

Создайте и заполните TestReport стандартной информацией об элементах и звонках.

Parameters:
  • item (Item) – Пункт.

  • call (CallInfo[None]) – Информация о звонке.

property caplog: str

Возвращает захваченные строки журнала, если захват журнала включен.

Добавлено в версии 3.5.

property capstderr: str

Возвращает захваченный текст из stderr, если захват включен.

Добавлено в версии 3.0.

property capstdout: str

Возвращает захваченный текст из stdout, если захват включен.

Добавлено в версии 3.0.

property count_towards_summary: bool

Экспериментальный Должен ли этот отчет учитываться при подсчете итогов, показанных в конце сеанса тестирования: «1 пройден, 1 провал и т.д.».

Примечание

Эта функция считается экспериментальной, поэтому имейте в виду, что она может быть изменена даже в релизах патчей.

property failed: bool

Является ли результат неудачным.

property fspath: str

Часть пути к узлу, о котором сообщается, в виде строки.

property head_line: Optional[str]

Экспериментальная Строка заголовка, показанная при выводе longrepr для этого отчета, чаще всего при представлении трассировки во время сбоев:

________ Test.foo ________

В приведенном выше примере заголовок_строки имеет вид «Test.foo».

Примечание

Эта функция считается экспериментальной, поэтому имейте в виду, что она может быть изменена даже в релизах патчей.

property longreprtext: str

Свойство только для чтения, которое возвращает полное строковое представление longrepr.

Добавлено в версии 3.0.

property passed: bool

Передан ли результат.

property skipped: bool

Пропускается ли исход.

_Result

Объект результата, используемый в hook wrappers, для получения дополнительной информации смотрите _Result in the pluggy documentation.

Тайник

class Stash[исходный код]

Stash - это безопасное с точки зрения типов гетерогенное изменяемое отображение, которое позволяет определять типы ключей и значений отдельно от того, где оно (Stash) создается.

Обычно вам дается объект, который имеет Stash, например Config или Node:

stash: Stash = some_object.stash

Если модуль или плагин хочет хранить данные в этом Stash, он создает StashKeyдля своих ключей (на уровне модуля):

# At the top-level of the module
some_str_key = StashKey[str]()
some_bool_key = StashKey[bool]()

Для хранения информации:

# Value type must match the key.
stash[some_str_key] = "value"
stash[some_bool_key] = True

Чтобы получить информацию:

# The static type of some_str is str.
some_str = stash[some_str_key]
# The static type of some_bool is bool.
some_bool = stash[some_bool_key]
__setitem__(key, value)[исходный код]

Установите значение для ключа.

__getitem__(key)[исходный код]

Получение значения для ключа.

Вызывает KeyError, если ключ не был установлен ранее.

get(key, default)[исходный код]

Получает значение для ключа или возвращает значение по умолчанию, если ключ не был установлен ранее.

setdefault(key, default)[исходный код]

Возвращает значение ключа, если оно уже установлено, иначе устанавливает значение ключа по умолчанию и возвращает значение по умолчанию.

__delitem__(key)[исходный код]

Удалите значение для ключа.

Вызывает KeyError, если ключ не был установлен ранее.

__contains__(key)[исходный код]

Возвращает, была ли установлена клавиша.

__len__()[исходный код]

Возвращает количество предметов в тайнике.

class StashKey[исходный код]

Base classes: Generic[T]

StashKey - это объект, используемый как ключ к Stash.

С типом StashKey связано значение ключа T.

Ключ StashKey является уникальным и не может конфликтовать с другим ключом.

Глобальные переменные

pytest обрабатывает некоторые глобальные переменные особым образом, когда они определены в тестовом модуле или файлах conftest.py.

collect_ignore

Учебник: Настройка сбора тестов

Может быть объявлено в файлах conftest.py для исключения тестовых каталогов или модулей. Должен представлять собой список путей (str, pathlib.Path или любой os.PathLike).

collect_ignore = ["setup.py"]
collect_ignore_glob

Учебник: Настройка сбора тестов

Может быть объявлено в файлах conftest.py для исключения тестовых каталогов или модулей с помощью подстановочных знаков в стиле Unix shell. Должно быть list[str], где str может содержать шаблоны glob.

collect_ignore_glob = ["*_ignore.py"]
pytest_plugins

Учебник: Требование/загрузка плагинов в тестовый модуль или файл conftest

Может быть объявлен на глобальном уровне в тестовых модулях и conftest.py файлах для регистрации дополнительных плагинов. Может быть либо str, либо Sequence[str].

pytest_plugins = "myapp.testsupport.myplugin"
pytest_plugins = ("myapp.testsupport.tools", "myapp.testsupport.regression")
pytestmark

Учебник: Отметка целых классов или модулей

Может быть объявлен на глобальном уровне в тестовых модулях для применения одной или нескольких marks ко всем тестовым функциям и методам. Может быть как одной меткой, так и списком меток (применяется в порядке слева направо).

import pytest

pytestmark = pytest.mark.webtest
import pytest

pytestmark = [pytest.mark.integration, pytest.mark.slow]

Переменные среды

Переменные окружения, которые можно использовать для изменения поведения pytest.

PYTEST_ADDOPTS

Содержит командную строку (разбираемую модулем py:mod:shlex), которая будет дополнена к командной строке, заданной пользователем, подробнее см. в Опции встроенного файла конфигурации.

PYTEST_CURRENT_TEST

Этот параметр не предназначен для установки пользователями, но устанавливается pytest внутренне с именем текущего теста, чтобы другие процессы могли проверять его, смотрите PYTEST_CURRENT_TEST переменная окружения для получения дополнительной информации.

PYTEST_DEBUG

Если установлено, pytest будет печатать информацию о трассировке и отладке.

PYTEST_DISABLE_PLUGIN_AUTOLOAD

Если установлено, отключает автозагрузку плагинов через точки входа setuptools. Будут загружаться только явно указанные плагины.

PYTEST_PLUGINS

Содержит разделенный запятыми список модулей, которые должны быть загружены как плагины:

export PYTEST_PLUGINS=mymodule.plugin,xdist
PYTEST_THEME

Устанавливает pygment style для вывода кода.

PYTEST_THEME_MODE

Устанавливает PYTEST_THEME либо темным, либо светлым.

PY_COLORS

Если установлено значение 1, pytest будет использовать цвет в выводе терминала. Если установлено значение 0, pytest не будет использовать цвет. PY_COLORS имеет приоритет над NO_COLOR и FORCE_COLOR.

NO_COLOR

Когда установлено (независимо от значения), pytest не будет использовать цвет в выводе терминала. PY_COLORS имеет приоритет над NO_COLOR, который имеет приоритет над FORCE_COLOR. Смотрите no-color.org для других библиотек, поддерживающих этот стандарт сообщества.

FORCE_COLOR

Когда установлено (независимо от значения), pytest будет использовать цвет в выводе терминала. PY_COLORS и NO_COLOR имеют приоритет над FORCE_COLOR.

Исключения

final class UsageError[исходный код]

Base classes: Exception

Ошибка в использовании или вызове pytest.

Предупреждения

Пользовательские предупреждения, создаваемые в некоторых ситуациях, таких как неправильное использование или устаревшие функции.

class PytestWarning

Base classes: UserWarning

Базовый класс для всех предупреждений, выдаваемых pytest.

class PytestAssertRewriteWarning

Base classes: PytestWarning

Предупреждение, выдаваемое модулем pytest assert rewrite.

class PytestCacheWarning

Base classes: PytestWarning

Предупреждение, выдаваемое плагином кэша в различных ситуациях.

class PytestCollectionWarning

Base classes: PytestWarning

Предупреждение, выдаваемое, когда pytest не может собрать файл или символ в модуле.

class PytestConfigWarning

Base classes: PytestWarning

Предупреждение, выдаваемое при проблемах с конфигурацией.

class PytestDeprecationWarning

Base classes: PytestWarning, DeprecationWarning

Класс предупреждения для функций, которые будут удалены в будущей версии.

class PytestExperimentalApiWarning

Base classes: PytestWarning, FutureWarning

Категория предупреждений, используемая для обозначения экспериментов в pytest.

Используйте его осторожно, поскольку API может измениться или даже быть полностью удален в будущей версии.

class PytestReturnNotNoneWarning

Base classes: PytestRemovedIn8Warning

Предупреждение, выдаваемое, когда тестовая функция возвращает значение, отличное от None.

class PytestRemovedIn8Warning

Base classes: PytestDeprecationWarning

Предупреждающий класс для функций, которые будут удалены в pytest 8.

class PytestUnhandledCoroutineWarning

Base classes: PytestReturnNotNoneWarning

Выдано предупреждение о необработанной корутине.

При сборе тестовых функций была обнаружена корутина, но она не была обработана ни одним плагином с поддержкой async. Тестовые функции с корутинами не поддерживаются нативно.

class PytestUnknownMarkWarning

Base classes: PytestWarning

Предупреждение, выдаваемое при использовании неизвестных маркеров.

Подробнее см. в разделе Как пометить тестовые функции атрибутами.

class PytestUnraisableExceptionWarning

Base classes: PytestWarning

Было сообщено об исключении из правил.

Неразрешимые исключения - это исключения, возникающие в реализациях __del__ и подобных ситуациях, когда исключение не может быть вызвано обычным способом.

class PytestUnhandledThreadExceptionWarning

Base classes: PytestWarning

Не обработанное исключение произошло в Thread.

Такие исключения не распространяются нормально.

Для получения дополнительной информации обратитесь к разделу Внутренние предупреждения pytest в документации.

Параметры конфигурации

Здесь приведен список встроенных опций конфигурации, которые могут быть записаны в файле pytest.ini (или .pytest.ini), pyproject.toml, tox.ini или setup.cfg, обычно расположенном в корне вашего репозитория.

Чтобы подробно ознакомиться с каждым форматом файла, см. раздел Форматы файлов конфигурации.

Предупреждение

Использование setup.cfg не рекомендуется, за исключением очень простых случаев. Файлы .cfg используют парсер, отличный от pytest.ini и tox.ini, что может привести к трудноотслеживаемым проблемам. Когда это возможно, рекомендуется использовать последние файлы, или pyproject.toml, для хранения конфигурации pytest.

Параметры конфигурации могут быть перезаписаны в командной строке с помощью -o/--override-ini, которые также могут быть переданы несколько раз. Ожидаемый формат - name=value. Например:

pytest -o console_output_style=classic -o cache_dir=/tmp/mycache
addopts

Добавляет указанные OPTS к набору аргументов командной строки, как если бы они были указаны пользователем. Пример: если вы имеете следующее содержимое ini файла:

# content of pytest.ini
[pytest]
addopts = --maxfail=2 -rf  # exit after 2 failures, report fail info

выдача pytest test_hello.py фактически означает:

pytest --maxfail=2 -rf test_hello.py

По умолчанию опции не добавляются.

cache_dir

Задает директорию, в которой хранится содержимое плагина кэша. Директория по умолчанию - .pytest_cache, которая создается в rootdir. Каталог может быть относительным или абсолютным путем. Если задан относительный путь, то каталог создается относительно rootdir. Дополнительно путь может содержать переменные окружения, которые будут расширены. Более подробную информацию о плагине кэширования можно найти в разделе Как повторно запускать неудачные тесты и сохранять состояние между запусками тестов.

console_output_style

Устанавливает стиль вывода консоли при выполнении тестов:

  • classic: классический вывод pytest.

  • progress: как классический вывод pytest, но с индикатором выполнения.

  • count: как progress, но показывает прогресс в виде количества выполненных тестов, а не в процентах.

По умолчанию используется progress, но вы можете вернуться к classic, если вам так удобнее или новый режим вызывает неожиданные проблемы:

# content of pytest.ini
[pytest]
console_output_style = classic
doctest_encoding

Кодировка по умолчанию, которую следует использовать для декодирования текстовых файлов с docstrings. See how pytest handles doctests.

doctest_optionflags

Одно или несколько имен флагов doctest из стандартного модуля doctest. See how pytest handles doctests.

empty_parameter_set_mark

Позволяет выбрать действие для пустых наборов параметров при параметризации

  • skip пропускает тесты с пустым набором параметров (по умолчанию)

  • xfail помечает тесты с пустым набором параметров как xfail(run=False)

  • fail_at_collect вызывает исключение, если parametrize собирает пустой набор параметров

# content of pytest.ini
[pytest]
empty_parameter_set_mark = xfail

Примечание

Значение по умолчанию этой опции планируется изменить на xfail в будущих выпусках, так как это считается менее подверженным ошибкам, более подробно смотрите issue #3155.

faulthandler_timeout

Выбрасывает трассировку всех потоков, если тест выполняется дольше X секунд (включая установку и удаление приспособления). Реализована с использованием функции faulthandler.dump_traceback_later(), поэтому к ней применимы все предостережения.

# content of pytest.ini
[pytest]
faulthandler_timeout=5

Более подробную информацию можно найти в разделе Обработчик неисправностей.

filterwarnings

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

# content of pytest.ini
[pytest]
filterwarnings =
    error
    ignore::DeprecationWarning

Это указывает pytest игнорировать предупреждения об износе и превращать все остальные предупреждения в ошибки. Для получения дополнительной информации обратитесь к Как фиксировать предупреждения.

junit_duration_report

Добавлено в версии 4.1.

Настраивает способ записи продолжительности в отчет JUnit XML:

  • total (по умолчанию): сообщаемое время продолжительности включает время установки, вызова и разрыва.

  • call: указанная продолжительность включает только время разговора, без учета установки и снятия.

[pytest]
junit_duration_report = call
junit_family

Добавлено в версии 4.2.

Изменено в версии 6.1: Значение по умолчанию изменено на xunit2.

Настраивает формат генерируемого XML-файла JUnit. Возможными вариантами являются:

  • xunit1 (или legacy): производит вывод в старом стиле, совместимый с форматом xunit 1.0.

  • xunit2: производит xunit 2.0 style output, который должен быть более совместим с последними версиями Jenkins. Это значение по умолчанию.

[pytest]
junit_family = xunit2
junit_logging

Добавлено в версии 3.5.

Изменено в версии 5.4: Добавлены опции log, all, out-err.

Настраивает, следует ли записывать захваченный вывод в XML-файл JUnit. Допустимыми значениями являются:

  • log: только запись logging захваченный выход.

  • system-out: запись захваченного stdout содержимого.

  • system-err: запись захваченного stderr содержимого.

  • out-err: записать оба захваченных содержимого stdout и stderr.

  • all: запись захваченного содержимого logging, stdout и stderr.

  • no (по умолчанию): захваченный вывод не записывается.

[pytest]
junit_logging = system-out
junit_log_passing_tests

Добавлено в версии 4.6.

Если junit_logging != "no", настраивает, следует ли записывать захваченный вывод в XML-файл JUnit для проходящих тестов. По умолчанию True.

[pytest]
junit_log_passing_tests = False
junit_suite_name

Чтобы задать имя корневого элемента xml набора тестов, вы можете настроить опцию junit_suite_name в вашем конфигурационном файле:

[pytest]
junit_suite_name = my_suite
log_auto_indent

Разрешить выборочное автоиндентирование многострочных сообщений журнала.

Поддерживает опцию командной строки --log-auto-indent [value] и опцию конфигурации log_auto_indent = [value] для установки поведения автоиндентирования для всех журналов.

[value] может быть:
  • True или «On» - динамическое автоиндентирование многострочных сообщений журнала

  • False или «Off» или 0 - не автоиндентировать многострочные сообщения журнала (поведение по умолчанию).

  • [целое положительное число] - автоотступ от многострочных сообщений журнала на [значение] пробелов

[pytest]
log_auto_indent = False

Поддерживает передачу kwarg extra={"auto_indent": [value]} в вызовы logging.log() для указания поведения автоиндентирования для конкретной записи в журнале. extra kwarg отменяет значение, указанное в командной строке или в конфигурации.

log_cli

Включить отображение журнала во время выполнения теста (также известно как «live logging»). По умолчанию используется False.

[pytest]
log_cli = True
log_cli_date_format

Устанавливает time.strftime()-совместимую строку, которая будет использоваться при форматировании дат для ведения живого журнала.

[pytest]
log_cli_date_format = %Y-%m-%d %H:%M:%S

Для получения дополнительной информации см. раздел Живые журналы.

log_cli_format

Устанавливает logging-совместимую строку, используемую для форматирования сообщений живого журнала.

[pytest]
log_cli_format = %(asctime)s %(levelname)s %(message)s

Для получения дополнительной информации см. раздел Живые журналы.

log_cli_level

Устанавливает минимальный уровень сообщений журнала, который должен быть захвачен для ведения журнала в реальном времени. Можно использовать целочисленное значение или имена уровней.

[pytest]
log_cli_level = INFO

Для получения дополнительной информации см. раздел Живые журналы.

log_date_format

Задает time.strftime()-совместимую строку, которая будет использоваться при форматировании дат для захвата журнала.

[pytest]
log_date_format = %Y-%m-%d %H:%M:%S

Для получения дополнительной информации см. раздел Как управлять лесозаготовками.

log_file

Задает имя файла относительно текущего рабочего каталога, в который должны записываться сообщения журнала, в дополнение к другим активным средствам ведения журнала.

[pytest]
log_file = logs/pytest-logs.txt

Для получения дополнительной информации см. раздел Как управлять лесозаготовками.

log_file_date_format

Задает time.strftime()-совместимую строку, которая будет использоваться при форматировании дат для файла журнала.

[pytest]
log_file_date_format = %Y-%m-%d %H:%M:%S

Для получения дополнительной информации см. раздел Как управлять лесозаготовками.

log_file_format

Задает logging-совместимую строку, используемую для форматирования сообщений журнала, перенаправляемых в файл журнала.

[pytest]
log_file_format = %(asctime)s %(levelname)s %(message)s

Для получения дополнительной информации см. раздел Как управлять лесозаготовками.

log_file_level

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

[pytest]
log_file_level = INFO

Для получения дополнительной информации см. раздел Как управлять лесозаготовками.

log_format

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

[pytest]
log_format = %(asctime)s %(levelname)s %(message)s

Для получения дополнительной информации см. раздел Как управлять лесозаготовками.

log_level

Устанавливает минимальный уровень сообщений журнала, который должен быть захвачен для перехвата журнала. Можно использовать целочисленное значение или имена уровней.

[pytest]
log_level = INFO

Для получения дополнительной информации см. раздел Как управлять лесозаготовками.

markers

Когда используются аргументы командной строки --strict-markers или --strict, разрешены только известные маркеры - определенные в коде основным pytest или каким-либо плагином.

Вы можете перечислить дополнительные маркеры в этом параметре, чтобы добавить их в белый список, в этом случае вы, вероятно, захотите добавить --strict-markers к addopts, чтобы избежать будущих регрессий:

[pytest]
addopts = --strict-markers
markers =
    slow
    serial

Примечание

Использование --strict-markers крайне предпочтительно. --strict был сохранен только для обратной совместимости и может сбивать с толку других, так как применяется только к маркерам, а не к другим опциям.

minversion

Указывает минимальную версию pytest, необходимую для запуска тестов.

# content of pytest.ini
[pytest]
minversion = 3.0  # will fail if we run with pytest-2.8
norecursedirs

Задайте шаблоны базового имени каталога, которые следует избегать при рекурсии для обнаружения тестов. Отдельные (в стиле fnmatch) шаблоны применяются к основному имени каталога, чтобы решить, следует ли в него обращаться. Символы сопоставления шаблонов:

*       matches everything
?       matches any single character
[seq]   matches any character in seq
[!seq]  matches any char not in seq

По умолчанию используются шаблоны '*.egg', '.*', '_darcs', 'build', 'CVS', 'dist', 'node_modules', 'venv', '{arch}'. Установка norecursedirs заменяет значение по умолчанию. Вот пример того, как избежать определенных каталогов:

[pytest]
norecursedirs = .svn _build tmp*

Это указывает pytest не искать в обычных каталогах subversion или sphinx-build или в любом каталоге с префиксом tmp.

Кроме того, pytest будет пытаться разумно определить и игнорировать виртуальную среду по наличию скрипта активации. Любой каталог, считающийся корнем виртуальной среды, не будет учитываться при сборе тестов, если не указано ‑‑collect‑in‑virtualenv. Обратите внимание, что norecursedirs имеет приоритет над ‑‑collect‑in‑virtualenv; например, если вы собираетесь запускать тесты в virtualenv с базовым каталогом, соответствующим '.*', вы должны переопределить norecursedirs в дополнение к использованию флага ‑‑collect‑in‑virtualenv.

python_classes

Один или несколько префиксов имен или шаблонов в стиле glob, определяющих, какие классы рассматриваются для сбора тестов. Для поиска нескольких шаблонов glob добавьте пробел между ними. По умолчанию pytest будет рассматривать любой класс с префиксом Test как сборник тестов. Вот пример того, как собирать тесты из классов, которые заканчиваются на Suite:

[pytest]
python_classes = *Suite

Обратите внимание, что производные классы unittest.TestCase всегда собираются независимо от этой опции, поскольку для сбора этих тестов используется собственная структура сбора unittest.

python_files

Один или несколько шаблонов файлов в стиле Glob, определяющих, какие файлы python считаются тестовыми модулями. Для поиска нескольких шаблонов glob добавьте пробел между ними:

[pytest]
python_files = test_*.py check_*.py example_*.py

Или по одному на линию:

[pytest]
python_files =
    test_*.py
    check_*.py
    example_*.py

По умолчанию, файлы, соответствующие test_*.py и *_test.py, будут считаться тестовыми модулями.

python_functions

Один или несколько префиксов имен или glob-шаблонов, определяющих, какие тестовые функции и методы считаются тестами. Для поиска нескольких glob-шаблонов добавьте пробел между шаблонами. По умолчанию pytest будет считать тестом любую функцию с префиксом test. Вот пример того, как собирать тестовые функции и методы, заканчивающиеся на _test:

[pytest]
python_functions = *_test

Обратите внимание, что это не влияет на методы, которые живут в производном классе unittest.TestCase, так как для сбора этих тестов используется собственный фреймворк коллекции unittest.

Более подробные примеры смотрите в Изменение соглашений об именовании.

pythonpath

Задает список каталогов, которые должны быть добавлены в путь поиска python. Каталоги будут добавлены в голову sys.path. Аналогично переменной окружения PYTHONPATH, каталоги будут включены в то место, где Python будет искать импортированные модули. Пути являются относительными к каталогу rootdir. Каталоги остаются в пути в течение всего сеанса тестирования.

[pytest]
pythonpath = src1 src2
required_plugins

Список плагинов, которые должны присутствовать для запуска pytest, разделенный пробелами. Плагины могут быть перечислены с указателями версий или без них непосредственно после их имени. Пробелы между разными спецификаторами версий не допускаются. Если какой-либо из плагинов не найден, выдается ошибка.

[pytest]
required_plugins = pytest-django>=3.0.0,<4.0.0 pytest-html pytest-xdist>=1.0.0
testpaths

Задает список каталогов, в которых следует искать тесты, если в командной строке при выполнении pytest из каталога rootdir не указаны конкретные каталоги, файлы или идентификаторы тестов. Пути к файловой системе могут использовать подстановочные знаки в стиле shell, включая рекурсивный шаблон **. Полезно, когда все тесты проекта находятся в известном месте, чтобы ускорить сбор тестов и избежать случайной выборки нежелательных тестов.

[pytest]
testpaths = testing doc

Это указывает pytest искать тесты только в каталогах testing и doc при выполнении из корневого каталога.

usefixtures

Список приспособлений, которые будут применяться ко всем тестовым функциям; семантически это то же самое, что применять маркер @pytest.mark.usefixtures ко всем тестовым функциям.

[pytest]
usefixtures =
    clean_db
xfail_strict

Если установлено значение True, то тесты, помеченные @pytest.mark.xfail, которые на самом деле успешны, по умолчанию будут проваливать набор тестов. Для получения дополнительной информации см. раздел strict параметр.

[pytest]
xfail_strict = True

Флаги командной строки

Все флаги командной строки можно получить, выполнив команду pytest --help:

$ pytest --help
usage: pytest [options] [file_or_dir] [file_or_dir] [...]

positional arguments:
  file_or_dir

general:
  -k EXPRESSION         Only run tests which match the given substring
                        expression. An expression is a Python evaluatable
                        expression where all names are substring-matched
                        against test names and their parent classes.
                        Example: -k 'test_method or test_other' matches all
                        test functions and classes whose name contains
                        'test_method' or 'test_other', while -k 'not
                        test_method' matches those that don't contain
                        'test_method' in their names. -k 'not test_method
                        and not test_other' will eliminate the matches.
                        Additionally keywords are matched to classes and
                        functions containing extra names in their
                        'extra_keyword_matches' set, as well as functions
                        which have names assigned directly to them. The
                        matching is case-insensitive.
  -m MARKEXPR           Only run tests matching given mark expression. For
                        example: -m 'mark1 and not mark2'.
  --markers             show markers (builtin, plugin and per-project ones).
  -x, --exitfirst       Exit instantly on first error or failed test
  --fixtures, --funcargs
                        Show available fixtures, sorted by plugin appearance
                        (fixtures with leading '_' are only shown with '-v')
  --fixtures-per-test   Show fixtures per test
  --pdb                 Start the interactive Python debugger on errors or
                        KeyboardInterrupt
  --pdbcls=modulename:classname
                        Specify a custom interactive Python debugger for use
                        with --pdb.For example:
                        --pdbcls=IPython.terminal.debugger:TerminalPdb
  --trace               Immediately break when running each test
  --capture=method      Per-test capturing method: one of fd|sys|no|tee-sys
  -s                    Shortcut for --capture=no
  --runxfail            Report the results of xfail tests as if they were
                        not marked
  --lf, --last-failed   Rerun only the tests that failed at the last run (or
                        all if none failed)
  --ff, --failed-first  Run all tests, but run the last failures first. This
                        may re-order tests and thus lead to repeated fixture
                        setup/teardown.
  --nf, --new-first     Run tests from new files first, then the rest of the
                        tests sorted by file mtime
  --cache-show=[CACHESHOW]
                        Show cache contents, don't perform collection or
                        tests. Optional argument: glob (default: '*').
  --cache-clear         Remove all cache contents at start of test run
  --lfnf={all,none}, --last-failed-no-failures={all,none}
                        Which tests to run with no previously (known)
                        failures
  --sw, --stepwise      Exit on test failure and continue from last failing
                        test next time
  --sw-skip, --stepwise-skip
                        Ignore the first failing test but stop on the next
                        failing test. Implicitly enables --stepwise.

Reporting:
  --durations=N         Show N slowest setup/test durations (N=0 for all)
  --durations-min=N     Minimal duration in seconds for inclusion in slowest
                        list. Default: 0.005.
  -v, --verbose         Increase verbosity
  --no-header           Disable header
  --no-summary          Disable summary
  -q, --quiet           Decrease verbosity
  --verbosity=VERBOSE   Set verbosity. Default: 0.
  -r chars              Show extra test summary info as specified by chars:
                        (f)ailed, (E)rror, (s)kipped, (x)failed, (X)passed,
                        (p)assed, (P)assed with output, (a)ll except passed
                        (p/P), or (A)ll. (w)arnings are enabled by default
                        (see --disable-warnings), 'N' can be used to reset
                        the list. (default: 'fE').
  --disable-warnings, --disable-pytest-warnings
                        Disable warnings summary
  -l, --showlocals      Show locals in tracebacks (disabled by default)
  --no-showlocals       Hide locals in tracebacks (negate --showlocals
                        passed through addopts)
  --tb=style            Traceback print mode
                        (auto/long/short/line/native/no)
  --show-capture={no,stdout,stderr,log,all}
                        Controls how captured stdout/stderr/log is shown on
                        failed tests. Default: all.
  --full-trace          Don't cut any tracebacks (default is to cut)
  --color=color         Color terminal output (yes/no/auto)
  --code-highlight={yes,no}
                        Whether code should be highlighted (only if --color
                        is also enabled). Default: yes.
  --pastebin=mode       Send failed|all info to bpaste.net pastebin service
  --junit-xml=path      Create junit-xml style report file at given path
  --junit-prefix=str    Prepend prefix to classnames in junit-xml output

pytest-warnings:
  -W PYTHONWARNINGS, --pythonwarnings=PYTHONWARNINGS
                        Set which warnings to report, see -W option of
                        Python itself
  --maxfail=num         Exit after first num failures or errors
  --strict-config       Any warnings encountered while parsing the `pytest`
                        section of the configuration file raise errors
  --strict-markers      Markers not registered in the `markers` section of
                        the configuration file raise errors
  --strict              (Deprecated) alias to --strict-markers
  -c file               Load configuration from `file` instead of trying to
                        locate one of the implicit configuration files
  --continue-on-collection-errors
                        Force test execution even if collection errors occur
  --rootdir=ROOTDIR     Define root directory for tests. Can be relative
                        path: 'root_dir', './root_dir',
                        'root_dir/another_dir/'; absolute path:
                        '/home/user/root_dir'; path with variables:
                        '$HOME/root_dir'.

collection:
  --collect-only, --co  Only collect tests, don't execute them
  --pyargs              Try to interpret all arguments as Python packages
  --ignore=path         Ignore path during collection (multi-allowed)
  --ignore-glob=path    Ignore path pattern during collection (multi-
                        allowed)
  --deselect=nodeid_prefix
                        Deselect item (via node id prefix) during collection
                        (multi-allowed)
  --confcutdir=dir      Only load conftest.py's relative to specified dir
  --noconftest          Don't load any conftest.py files
  --keep-duplicates     Keep duplicate tests
  --collect-in-virtualenv
                        Don't ignore tests in a local virtualenv directory
  --import-mode={prepend,append,importlib}
                        Prepend/append to sys.path when importing test
                        modules and conftest files. Default: prepend.
  --doctest-modules     Run doctests in all .py modules
  --doctest-report={none,cdiff,ndiff,udiff,only_first_failure}
                        Choose another output format for diffs on doctest
                        failure
  --doctest-glob=pat    Doctests file matching pattern, default: test*.txt
  --doctest-ignore-import-errors
                        Ignore doctest ImportErrors
  --doctest-continue-on-failure
                        For a given doctest, continue to run after the first
                        failure

test session debugging and configuration:
  --basetemp=dir        Base temporary directory for this test run.
                        (Warning: this directory is removed if it exists.)
  -V, --version         Display pytest version and information about
                        plugins. When given twice, also display information
                        about plugins.
  -h, --help            Show help message and configuration info
  -p name               Early-load given plugin module name or entry point
                        (multi-allowed). To avoid loading of plugins, use
                        the `no:` prefix, e.g. `no:doctest`.
  --trace-config        Trace considerations of conftest.py files
  --debug=[DEBUG_FILE_NAME]
                        Store internal tracing debug information in this log
                        file. This file is opened with 'w' and truncated as
                        a result, care advised. Default: pytestdebug.log.
  -o OVERRIDE_INI, --override-ini=OVERRIDE_INI
                        Override ini option with "option=value" style, e.g.
                        `-o xfail_strict=True -o cache_dir=cache`.
  --assert=MODE         Control assertion debugging tools.
                        'plain' performs no assertion debugging.
                        'rewrite' (the default) rewrites assert statements
                        in test modules on import to provide assert
                        expression information.
  --setup-only          Only setup fixtures, do not execute tests
  --setup-show          Show setup of fixtures while executing tests
  --setup-plan          Show what fixtures and tests would be executed but
                        don't execute anything

logging:
  --log-level=LEVEL     Level of messages to catch/display. Not set by
                        default, so it depends on the root/parent log
                        handler's effective level, where it is "WARNING" by
                        default.
  --log-format=LOG_FORMAT
                        Log format used by the logging module
  --log-date-format=LOG_DATE_FORMAT
                        Log date format used by the logging module
  --log-cli-level=LOG_CLI_LEVEL
                        CLI logging level
  --log-cli-format=LOG_CLI_FORMAT
                        Log format used by the logging module
  --log-cli-date-format=LOG_CLI_DATE_FORMAT
                        Log date format used by the logging module
  --log-file=LOG_FILE   Path to a file when logging will be written to
  --log-file-level=LOG_FILE_LEVEL
                        Log file logging level
  --log-file-format=LOG_FILE_FORMAT
                        Log format used by the logging module
  --log-file-date-format=LOG_FILE_DATE_FORMAT
                        Log date format used by the logging module
  --log-auto-indent=LOG_AUTO_INDENT
                        Auto-indent multiline messages passed to the logging
                        module. Accepts true|on, false|off or an integer.

[pytest] ini-options in the first pytest.ini|tox.ini|setup.cfg file found:

  markers (linelist):   Markers for test functions
  empty_parameter_set_mark (string):
                        Default marker for empty parametersets
  norecursedirs (args): Directory patterns to avoid for recursion
  testpaths (args):     Directories to search for tests when no files or
                        directories are given on the command line
  filterwarnings (linelist):
                        Each line specifies a pattern for
                        warnings.filterwarnings. Processed after
                        -W/--pythonwarnings.
  usefixtures (args):   List of default fixtures to be used with this
                        project
  python_files (args):  Glob-style file patterns for Python test module
                        discovery
  python_classes (args):
                        Prefixes or glob names for Python test class
                        discovery
  python_functions (args):
                        Prefixes or glob names for Python test function and
                        method discovery
  disable_test_id_escaping_and_forfeit_all_rights_to_community_support (bool):
                        Disable string escape non-ASCII characters, might
                        cause unwanted side effects(use at your own risk)
  console_output_style (string):
                        Console output: "classic", or with additional
                        progress information ("progress" (percentage) |
                        "count")
  xfail_strict (bool):  Default for the strict parameter of xfail markers
                        when not given explicitly (default: False)
  enable_assertion_pass_hook (bool):
                        Enables the pytest_assertion_pass hook. Make sure to
                        delete any previously generated pyc cache files.
  junit_suite_name (string):
                        Test suite name for JUnit report
  junit_logging (string):
                        Write captured log messages to JUnit report: one of
                        no|log|system-out|system-err|out-err|all
  junit_log_passing_tests (bool):
                        Capture log information for passing tests to JUnit
                        report:
  junit_duration_report (string):
                        Duration time to report: one of total|call
  junit_family (string):
                        Emit XML for schema: one of legacy|xunit1|xunit2
  doctest_optionflags (args):
                        Option flags for doctests
  doctest_encoding (string):
                        Encoding used for doctest files
  cache_dir (string):   Cache directory path
  log_level (string):   Default value for --log-level
  log_format (string):  Default value for --log-format
  log_date_format (string):
                        Default value for --log-date-format
  log_cli (bool):       Enable log display during test run (also known as
                        "live logging")
  log_cli_level (string):
                        Default value for --log-cli-level
  log_cli_format (string):
                        Default value for --log-cli-format
  log_cli_date_format (string):
                        Default value for --log-cli-date-format
  log_file (string):    Default value for --log-file
  log_file_level (string):
                        Default value for --log-file-level
  log_file_format (string):
                        Default value for --log-file-format
  log_file_date_format (string):
                        Default value for --log-file-date-format
  log_auto_indent (string):
                        Default value for --log-auto-indent
  pythonpath (paths):   Add paths to sys.path
  faulthandler_timeout (string):
                        Dump the traceback of all threads if a test takes
                        more than TIMEOUT seconds to finish
  addopts (args):       Extra command line options
  minversion (string):  Minimally required pytest version
  required_plugins (args):
                        Plugins that must be present for pytest to run

Environment variables:
  PYTEST_ADDOPTS           Extra command line options
  PYTEST_PLUGINS           Comma-separated plugins to load during startup
  PYTEST_DISABLE_PLUGIN_AUTOLOAD Set to disable plugin auto-loading
  PYTEST_DEBUG             Set to enable debug tracing of pytest's internals


to see available markers type: pytest --markers
to see available fixtures type: pytest --fixtures
(shown according to specified file_or_dir or current dir if not specified; fixtures with leading '_' are only shown with the '-v' option
Вернуться на верх