Справочник по 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:
Пример:
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)[исходный код]¶
Выполните пробный запуск в процессе работы.
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.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:
Добавлено в версии 3.4.
- 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: Уровни регистраторов, измененные этой функцией, будут восстановлены до исходных значений по окончании теста.
- with at_level(level, logger=None)[исходный код]¶
Контекстный менеджер, устанавливающий уровень для перехвата журналов. После окончания оператора „with“ уровень восстанавливается до исходного значения.
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)[исходный код]¶
Сохранить значение для заданного ключа.
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)[исходный код]¶
Изменить текущий рабочий каталог на указанный путь.
- 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:
Примеры:
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.
- makeini(source)[исходный код]¶
Напишите файл tox.ini.
- getinicfg(source)[исходный код]¶
Возвращает секцию pytest из конфигурационного файла tox.ini.
- makepyprojecttoml(source)[исходный код]¶
Напишите файл pyproject.toml.
Добавлено в версии 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
.Это отменяется автоматически, когда этот объект умирает в конце каждого теста.
- mkdir(name)[исходный код]¶
Создайте новый (под)каталог.
- mkpydir(name)[исходный код]¶
Создайте новый пакет python.
Это создаст (под)каталог с пустым файлом
__init__.py
, чтобы он был распознан как пакет Python.
- copy_example(name=None)[исходный код]¶
Скопируйте файл из каталога проекта в testdir.
- getnode(config, arg)[исходный код]¶
Получить узел коллекции файла.
- Parameters:
config (Config) – Конфигурация pytest. Для его создания смотрите
parseconfig()
иparseconfigure()
.
- Result:
Узел.
- Result type:
- getpathnode(path)[исходный код]¶
Возвращает узел коллекции файла.
Это похоже на
getnode()
, но используетparseconfigure()
для создания (настроенного) экземпляра pytest Config.
- genitems(colitems)[исходный код]¶
Генерирует все элементы теста из узла коллекции.
Эта функция обращается к узлу коллекции и возвращает список всех элементов теста, содержащихся в нем.
- 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 на полученном модуле, возвращая элемент теста для запрашиваемого имени функции.
- getitems(source)[исходный код]¶
Верните все тестовые предметы, собранные в модуле.
Записывает исходный текст в файл Python и запускает коллекцию pytest на полученном модуле, возвращая все содержащиеся в нем тестовые элементы.
- getmodulecol(source, configargs=(), *, withinit=False)[исходный код]¶
Возвращает узел коллекции модулей для
source
.Записывает
source
в файл, используяmakepyfile()
, а затем запускает на нем коллекцию pytest, возвращая узел коллекции для тестового модуля.
- 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:
- runpython(script)[исходный код]¶
Запустите сценарий python, используя sys.executable в качестве интерпретатора.
- runpython_c(command)[исходный код]¶
Выполнить
python -c "command"
.
- runpytest_subprocess(*args, timeout=None)[исходный код]¶
Запуск pytest в качестве подпроцесса с заданными аргументами.
Любые плагины, добавленные в список
plugins
, будут добавлены с помощью опции командной строки-p
. Дополнительно--basetemp
используется для помещения любых временных файлов и каталогов в пронумерованный каталог с префиксом «runpytest-», чтобы не конфликтовать с обычным пронумерованным расположением временных файлов и каталогов pytest.
- spawn_pytest(string, expect_timeout=10.0)[исходный код]¶
Запустите pytest с помощью pexpect.
Это гарантирует использование правильного pytest и устанавливает местоположение временных каталогов.
Возвращается ребенок pexpect.
- spawn(cmd, expect_timeout=10.0)[исходный код]¶
Выполните команду с помощью pexpect.
Возвращается ребенок pexpect.
- final class RunResult[исходный код]¶
Результат выполнения команды из
Pytester
.- 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(). Совпадения и несовпадения также отображаются в сообщении об ошибке.
- re_match_lines(lines2, *, consecutive=False)[исходный код]¶
Проверьте наличие строк в выводе (используя
re.match()
).Аргументом является список строк, которые должны совпадать с помощью
re.match
. Если они не совпадают, вызывается pytest.fail().Совпадения и несовпадения также отображаются как часть сообщения об ошибке.
- 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
обрабатываются по-разному; см. Обеспечение срабатывания предупреждения об устаревании кода.- pop(cls=<class 'Warning'>)[исходный код]¶
Выдавать первое записанное предупреждение, поднимать исключение, если оно не существует.
- clear()[исходный код]¶
Очистить список записанных предупреждений.
запрос¶
Пример: Передавать различные значения в тестовую функцию в зависимости от опций командной строки
Приспособление request
- это специальное приспособление, предоставляющее информацию о запрашивающей тестовой функции.
- class FixtureRequest[исходный код]¶
Запрос на приспособление от функции испытания или приспособления.
Объект запроса предоставляет доступ к запрашивающему тестовому контексту и имеет необязательный атрибут
param
в случае, если приспособление параметризуется косвенно.- property scope: _ScopeName¶
Строка области видимости, одна из «function», «class», «module», «package», «session».
- property node¶
Базовый узел коллекции (зависит от текущего диапазона запроса).
- property function¶
Объект тестовой функции, если запрос имеет область действия для каждой функции.
- property cls¶
Класс (может быть None), в котором была собрана тестовая функция.
- property instance¶
Экземпляр (может быть None), на котором была собрана тестовая функция.
- property module¶
Объект модуля Python, в котором была собрана тестовая функция.
- property keywords: MutableMapping[str, Any]¶
Словарь ключевых слов/маркеров для базового узла.
- addfinalizer(finalizer)[исходный код]¶
Добавьте функцию finalizer/teardown, которая будет вызываться без аргументов после завершения выполнения последнего теста в запрашивающем тестовом контексте.
- applymarker(marker)[исходный код]¶
Применить маркер к одному вызову тестовой функции.
Этот метод полезен, если вы не хотите иметь ключевое слово/маркер на всех вызовах функций.
- Parameters:
marker (Union[str, MarkDecorator]) – Объект, созданный вызовом
pytest.mark.NAME(...)
.
- raiseerror(msg)[исходный код]¶
Вызывает исключение FixtureLookupError.
- 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)[исходный код]
-
- makeini(source)[исходный код]
См.
Pytester.makeini()
.
- getinicfg(source)[исходный код]
См.
Pytester.getinicfg()
.
- makepyprojecttoml(source)[исходный код]
См.
Pytester.makepyprojecttoml()
.
- makepyfile(*args, **kwargs)[исходный код]
-
- maketxtfile(*args, **kwargs)[исходный код]
-
- syspathinsert(path=None)[исходный код]
-
- mkdir(name)[исходный код]
См.
Pytester.mkdir()
.
- mkpydir(name)[исходный код]
См.
Pytester.mkpydir()
.
- copy_example(name=None)[исходный код]
-
- getnode(config, arg)[исходный код]
См.
Pytester.getnode()
.
- getpathnode(path)[исходный код]
- genitems(colitems)[исходный код]
См.
Pytester.genitems()
.
- runitem(source)[исходный код]
См.
Pytester.runitem()
.
- inline_runsource(source, *cmdlineargs)[исходный код]
- inline_genitems(*args)[исходный код]
- inline_run(*args, plugins=(), no_reraise_ctrlc=False)[исходный код]
-
- runpytest_inprocess(*args, **kwargs)[исходный код]
См.
Pytester.runpytest_inprocess()
.
- runpytest(*args, **kwargs)[исходный код]
См.
Pytester.runpytest()
.
- parseconfig(*args)[исходный код]
-
- parseconfigure(*args)[исходный код]
См.
Pytester.parseconfigure()
.
- getitem(source, funcname='test_func')[исходный код]
См.
Pytester.getitem()
.
- getitems(source)[исходный код]
См.
Pytester.getitems()
.
- getmodulecol(source, configargs=(), withinit=False)[исходный код]
- 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)[исходный код]
- runpytest_subprocess(*args, timeout=None)[исходный код]
См.
Pytester.runpytest_subprocess()
.
- spawn_pytest(string, expect_timeout=10.0)[исходный код]
-
- 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:
- getbasetemp()[исходный код]¶
Возвращает базовый временный каталог, создавая его при необходимости.
- Result:
Базовый временный каталог.
- Result type:
tmpdir¶
Учебник: Фиксаторы tmpdir и tmpdir_factory
- tmpdir()¶
Возвращает объект пути к временному каталогу, уникальный для каждого вызова тестовой функции, созданный как подкаталог базового временного каталога.
По умолчанию новый временный каталог базы создается каждый сеанс тестирования, а старые базы удаляются после 3 сеансов, чтобы облегчить отладку. Если используется
--basetemp
, то он очищается после каждой сессии. См. Базовый временный каталог по умолчанию.Возвращаемый объект является объектом legacy_path.
Примечание
В наши дни предпочтительнее использовать
tmp_path
.
tmpdir_factory¶
Учебник: Фиксаторы tmpdir и tmpdir_factory
tmpdir_factory
является экземпляром TempdirFactory
:
- final class TempdirFactory[исходный код]¶
Обертка обратной совместимости, реализующая
py.path.local
дляTempPathFactory
.Примечание
В наши дни предпочтительнее использовать
tmp_path_factory
.- 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.
- pytest_cmdline_preparse(config, args)[исходный код]¶
(Удалено) модифицировать аргументы командной строки перед разбором опций.
Этот хук считается устаревшим и будет удален в будущей версии pytest. Вместо него используйте
pytest_load_initial_conftests
.Примечание
Этот хук не будет вызываться для файлов
conftest.py
, только для плагинов setuptools.
- pytest_cmdline_parse(pluginmanager, args)[исходный код]¶
Возвращает инициализированный
Config
, разбирая указанные args.Останавливается на первом не-None результате, см. firstresult: остановка на первом результате, не являющемся None.
Примечание
Этот хук будет вызываться только для классов плагинов, переданных в аргументе
plugins
при использовании pytest.main для выполнения внутрипроцессного запуска теста.- Parameters:
pluginmanager (PytestPluginManager) – Менеджер плагинов pytest.
args (List[str]) – Список аргументов, переданных в командной строке.
- Result:
Объект конфигурации pytest.
- Result type:
- pytest_cmdline_main(config)[исходный код]¶
Вызывается для выполнения основного действия командной строки. Реализация по умолчанию вызывает хуки configure и runtest_mainloop.
Останавливается на первом не-None результате, см. firstresult: остановка на первом результате, не являющемся None.
Крючки инициализации¶
Инициализационные хуки вызываются для плагинов и файлов 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)[исходный код]¶
Вызывается после завершения всего теста, непосредственно перед возвращением системе статуса выхода.
- pytest_plugin_registered(plugin, manager)[исходный код]¶
Зарегистрирован новый плагин pytest.
- Parameters:
plugin (_PluggyPlugin) – Модуль или экземпляр плагина.
manager (pytest.PytestPluginManager) – менеджер плагинов pytest.
Примечание
Этот крючок несовместим с
hookwrapper=True
.
Коллекционные крючки¶
pytest
вызывает следующие хуки для сбора файлов и каталогов:
- pytest_collection(session)[исходный код]¶
Выполните фазу сбора для данной сессии.
Останавливается на первом не-None результате, см. firstresult: остановка на первом результате, не являющемся None. Возвращаемое значение не используется, а только останавливает дальнейшую обработку.
Фаза сбора по умолчанию выглядит следующим образом (подробную информацию см. в отдельных хуках):
Начиная с
session
в качестве начального коллектора:
pytest_collectstart(collector)
report = pytest_make_collect_report(collector)
pytest_exception_interact(collector, call, report)
если произошло интерактивное исключениеДля каждого собранного узла:
Если элемент,
pytest_itemcollected(item)
Если это коллектор, обратитесь к нему.
pytest_collectreport(report)
pytest_collection_modifyitems(session, config, items)
pytest_deselected(items)
для любых невыбранных элементов (может вызываться несколько раз)
pytest_collection_finish(session)
Установите
session.items
в список собранных элементовУстановите
session.testscollected
на количество собранных предметов
Вы можете реализовать этот хук только для выполнения некоторого действия перед сбором, например, плагин терминала использует его для начала отображения счетчика сбора (и возвращает
None
).- Parameters:
session (Session) – Объект сессии pytest.
- pytest_ignore_collect(collection_path, path, config)[исходный код]¶
Возвращает True, чтобы не рассматривать этот путь для сбора.
Этот хук используется для всех файлов и каталогов перед вызовом более специфических хуков.
Останавливается на первом не-None результате, см. firstresult: остановка на первом результате, не являющемся None.
- Parameters:
Изменено в версии 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.
- pytest_generate_tests(metafunc)[исходный код]¶
Генерируйте (несколько) параметризованных вызовов тестовой функции.
- pytest_make_parametrize_id(config, val, argname)[исходный код]¶
Возвращает удобное строковое представление заданного
val
, которое будет использоваться вызовами @pytest.mark.parametrize, или None, если хук не знает оval
.Имя параметра доступно в виде
argname
, если требуется.Останавливается на первом не-None результате, см. firstresult: остановка на первом результате, не являющемся None.
Крючки для влияния на пропуск тестов:
- pytest_markeval_namespace(config)[исходный код]¶
Вызывается при построении словаря globals, используемого для оценки строковых условий в маркерах xfail/skipif.
Это полезно, когда условие для маркера требует объектов, которые дорого или невозможно получить во время сбора, что требуется обычными булевыми условиями.
Добавлено в версии 6.2.
После завершения сбора можно изменить порядок элементов, удалить или иным образом изменить элементы теста:
- pytest_collection_modifyitems(session, config, items)[исходный код]¶
Вызывается после выполнения сбора. Может фильтровать или переупорядочивать элементы на месте.
Примечание
Если этот хук реализован в файлах 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:
Останавливается на первом не-None результате, см. firstresult: остановка на первом результате, не являющемся None. Возвращаемое значение не используется, а только останавливает дальнейшую обработку.
- pytest_runtest_logstart(nodeid, location)[исходный код]¶
Вызывается в начале выполнения протокола runtest для одного элемента.
Описание протокола runtest см. в
pytest_runtest_protocol
.
- pytest_runtest_logfinish(nodeid, location)[исходный код]¶
Вызывается в конце выполнения протокола runtest для одного элемента.
Описание протокола runtest см. в
pytest_runtest_protocol
.
- 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
.Останавливается на первом не-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)[исходный код]¶
Вызывается для невыбранных элементов теста, например, по ключевому слову.
Может вызываться несколько раз.
- pytest_report_header(config, start_path, startdir)[исходный код]¶
Возвращает строку или список строк, которые будут отображаться в качестве заголовочной информации для отчетов терминала.
- Parameters:
Примечание
Строки, возвращаемые плагином, отображаются перед строками плагинов, которые были запущены до него. Если вы хотите, чтобы ваша строка(и) отображалась первой, используйте 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:
Примечание
Строки, возвращаемые плагином, отображаются перед строками плагинов, которые были запущены до него. Если вы хотите, чтобы ваша строка(и) отображалась первой, используйте 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:
Останавливается на первом не-None результате, см. firstresult: остановка на первом результате, не являющемся None.
- pytest_report_to_serializable(config, report)[исходный код]¶
Сериализуйте заданный объект отчета в структуру данных, пригодную для передачи по проводам, например, преобразуйте в JSON.
- Parameters:
config (Config) – Объект конфигурации pytest.
report (Union[CollectReport, TestReport]) – Отчет.
- pytest_report_from_serializable(config, data)[исходный код]¶
Восстановление объекта отчета, ранее сериализованного с помощью
pytest_report_to_serializable
.- Parameters:
config (Config) – Объект конфигурации pytest.
- pytest_terminal_summary(terminalreporter, exitstatus, config)[исходный код]¶
Добавьте раздел в сводную отчетность по терминалам.
- Parameters:
Добавлено в версии 4.2: Параметр
config
.
- pytest_fixture_setup(fixturedef, request)[исходный код]¶
Выполните настройку приспособления.
- Parameters:
fixturdef – Объект определения приспособления.
request (SubRequest) – Объект запроса приспособления.
- Result:
Возвращаемое значение вызова функции приспособления.
- Result type:
Останавливается на первом не-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 для отсутствия пользовательского объяснения, в противном случае возвращает список строк. Строки будут объединены новыми строками, но любые новые строки в строке будут экранированы. Обратите внимание, что все строки, кроме первой, будут иметь небольшой отступ, поскольку первая строка должна быть кратким изложением.
- 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 в каталоге проекта и библиотеках интерпретатора, поскольку утверждения придется переписать.
Отладка/взаимодействие¶
Существует несколько крючков, которые можно использовать для создания специальных отчетов или взаимодействия с исключениями:
- 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:
call (CallInfo[Any]) – Информация о вызове. Содержит исключение.
report (Union[CollectReport, TestReport]) – Коллекция или отчет о тестировании.
- pytest_enter_pdb(config, pdb)[исходный код]¶
Вызывается после pdb.set_trace().
Может использоваться подключаемыми модулями для выполнения специальных действий непосредственно перед переходом отладчика python в интерактивный режим.
- pytest_leave_pdb(config, pdb)[исходный код]¶
Вызывается при выходе из pdb (например, с помощью continue после pdb.set_trace()).
Может использоваться подключаемыми модулями для выполнения специальных действий сразу после выхода отладчика python из интерактивного режима.
Объекты¶
Полная ссылка на объекты, доступные из fixtures или hooks.
CallInfo¶
- final class CallInfo[исходный код]¶
Информация о результате/исключении вызова функции.
- excinfo: Optional[ExceptionInfo[BaseException]]¶
Перехваченное исключение вызова, если оно возникло.
- 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()[исходный код]¶
Возвращает список дочерних элементов (элементов и коллекторов) для данного узла коллекции.
- parent¶
Родительский узел коллектора.
- path: Path¶
Путь к файловой системе, из которой был собран этот узел (может быть None).
Коллектор¶
- class Collector[исходный код]¶
Base classes:
Node
Экземпляры коллектора создают дочерние экземпляры с помощью функции collect() и таким образом итеративно строят дерево.
- exception CollectError[исходный код]¶
Base classes:
Exception
Ошибка во время сбора, содержит пользовательское сообщение.
- collect()[исходный код]¶
Возвращает список дочерних элементов (элементов и коллекторов) для данного узла коллекции.
- repr_failure(excinfo)[исходный код]¶
Возвращает представление сбоя коллекции.
- Parameters:
excinfo (ExceptionInfo[BaseException]) – Информация об исключении для сбоя.
- parent¶
Родительский узел коллектора.
- path: Path¶
Путь к файловой системе, из которой был собран этот узел (может быть None).
CollectReport¶
- final class CollectReport[исходный код]¶
Base classes:
BaseReport
Объект отчета о коллекции.
Отчеты могут содержать произвольные дополнительные атрибуты.
- 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 head_line: Optional[str]¶
Экспериментальная Строка заголовка, показанная при выводе longrepr для этого отчета, чаще всего при представлении трассировки во время сбоев:
________ Test.foo ________
В приведенном выше примере заголовок_строки имеет вид «Test.foo».
Примечание
Эта функция считается экспериментальной, поэтому имейте в виду, что она может быть изменена даже в релизах патчей.
Конфигурация¶
- final class Config[исходный код]¶
Доступ к значениям конфигурации, pluginmanager и крючкам плагинов.
- Parameters:
pluginmanager (PytestPluginManager) – pytest PluginManager.
invocation_params (InvocationParams) – Объект, содержащий параметры, касающиеся вызова
pytest.main()
.
- final class InvocationParams(args, plugins, dir)[исходный код]¶
Удерживает параметры, переданные во время
pytest.main()
.Атрибуты объекта доступны только для чтения.
Добавлено в версии 5.1.
Примечание
Обратите внимание, что переменная окружения
PYTEST_ADDOPTS
и параметр iniaddopts
обрабатываются pytest, а не включаются в атрибутargs
.Плагины, обращающиеся к
InvocationParams
, должны знать об этом.- args: Tuple[str, ...]¶
Аргументы командной строки, переданные в
pytest.main()
.
- dir: Path¶
Каталог, из которого был вызван
pytest.main()
.
- class ArgsSource(value)[исходный код]¶
Указывает источник аргументов теста.
Добавлено в версии 7.2.
- ARGS = 1¶
Аргументы командной строки.
- INCOVATION_DIR = 2¶
Каталог вызовов.
- TESTPATHS = 3¶
Значение конфигурации „testpaths“.
- option¶
Доступ к опциям командной строки в качестве атрибутов.
- тип:
- invocation_params¶
Параметры, с которыми был вызван pytest.
- тип:
- pluginmanager¶
Менеджер плагинов обрабатывает регистрацию плагинов и вызов хуков.
- тип:
- stash¶
Место, где плагины могут хранить информацию о конфигурации для собственного использования.
- тип:
Тайник
- 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
(или подобных этапов).
- addinivalue_line(name, line)[исходный код]¶
Добавить строку к опции ini-файла. Опция должна быть объявлена, но может быть еще не установлена, в этом случае строка становится первой строкой в ее значении.
- getini(name)[исходный код]¶
Возвращает значение конфигурации из ini file.
Если указанное имя не было зарегистрировано через предыдущий вызов
parser.addini
(обычно из плагина), будет выдано сообщение ValueError.
- getoption(name, default=<NOTSET>, skip=False)[исходный код]¶
Возврат значения опции командной строки.
- 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
- classmethod from_current(exprinfo=None)[исходный код]¶
Возвращает ExceptionInfo, соответствующее текущему обратному пути.
Предупреждение
Экспериментальный API
- classmethod for_later()[исходный код]¶
Возвращает незаполненный ExceptionInfo.
- fill_unfilled(exc_info)[исходный код]¶
Заполнить незаполненный ExceptionInfo, созданный с помощью
for_later()
.
- property value: E¶
Значение исключения.
- property tb: TracebackType¶
Исключение необработанное traceback.
- 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
Базовый класс для сбора тестов из файла.
Работа с непитоновскими тестами.
- parent¶
Родительский узел коллектора.
- 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)[исходный код]¶
Публичный конструктор.
- parent¶
Родительский узел коллектора.
Функция¶
- 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]) – Информация об исключении для сбоя.
- parent¶
Родительский узел коллектора.
- path: Path¶
Путь к файловой системе, из которой был собран этот узел (может быть None).
FunctionDefinition¶
- class FunctionDefinition[исходный код]¶
Base classes:
Function
Этот класс является промежуточным решением до тех пор, пока мы не перейдем к реальным узлам определения функций и не избавимся от
metafunc
.- runtest()[исходный код]¶
Выполнение базовой тестовой функции.
- parent¶
Родительский узел коллектора.
- path: Path¶
Путь к файловой системе, из которой был собран этот узел (может быть None).
- setup()¶
Выполнение базовой тестовой функции.
Пункт¶
- class Item[исходный код]¶
Base classes:
Node
Базовый элемент вызова теста.
Обратите внимание, что для одной функции может быть несколько элементов вызова теста.
- user_properties: List[Tuple[str, object]]¶
Список кортежей (имя, значение), содержащий свойства, определенные пользователем для данного теста.
- parent¶
Родительский узел коллектора.
- path: Path¶
Путь к файловой системе, из которой был собран этот узел (может быть None).
- runtest()[исходный код]¶
Запустите тестовый пример для этого элемента.
Должны быть реализованы подклассами.
См.также
- add_report_section(when, key, content)[исходный код]¶
Добавьте новый раздел отчета, аналогично тому, как это сделано внутри компании, чтобы добавить stdout и stderr, захваченный вывод:
item.add_report_section("call", "stdout", "report section contents")
- 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
, он делает следующее:Если вызывается с одним классом в качестве единственного позиционного аргумента и без дополнительных аргументов в виде ключевых слов, он прикрепляет метку к классу, так что она автоматически применяется ко всем тестовым случаям, найденным в этом классе.
Если вызывается единственная функция в качестве единственного позиционного аргумента и без дополнительных аргументов в виде ключевых слов, она присоединяет метку к функции, содержащую все аргументы, уже хранящиеся внутри
MarkDecorator
.При вызове в любом другом случае он возвращает новый экземпляр
MarkDecorator
с содержимым исходногоMarkDecorator
, обновленным с помощью аргументов, переданных этому вызову.
Примечание: Приведенные выше правила не позволяют
MarkDecorator
хранить в качестве позиционного аргумента только одну ссылку на функцию или класс без дополнительных ключевых слов или позиционных аргументов. Это можно обойти, используяwith_args()
.- 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[исходный код]¶
- combined_with(other)[исходный код]¶
Возвращает новый Знак, который является комбинацией этого Знака и другого Знака.
Объединяет путем добавления args и объединения kwargs.
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()[исходный код]¶
Возвращает список дочерних элементов (элементов и коллекторов) для данного узла коллекции.
- parent¶
Родительский узел коллектора.
- path: Path¶
Путь к файловой системе, из которой был собран этот узел (может быть None).
Узел¶
- class Node[исходный код]¶
Базовый класс для Collector и Item, компонентов дерева коллекции тестов.
Подклассы коллекторов имеют дочерние узлы; элементы являются листовыми узлами.
- fspath: LocalPath¶
LEGACY_PATH
копия атрибутаpath
. Предназначен для использования в методах, еще не перешедших наpathlib.Path
, таких какItem.reportinfo()
. Будет устаревшим в будущем выпуске, вместо него лучше использоватьpath
.
- parent¶
Родительский узел коллектора.
- path: Path¶
Путь к файловой системе, из которой был собран этот узел (может быть None).
- 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
.
- listchain()[исходный код]¶
Возвращает список всех родительских коллекторов до self, начиная с корня дерева коллекций.
- add_marker(marker, append=True)[исходный код]¶
Динамически добавляет объект маркера к узлу.
- Parameters:
marker (Union[str, MarkDecorator]) – Маркер.
append (bool) – Добавлять ли маркер или дополнять его.
- iter_markers(name=None)[исходный код]¶
Итерация по всем маркерам узла.
- for ... in iter_markers_with_node(name=None)[исходный код]¶
Итерация по всем маркерам узла.
- 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), который является экземпляром данного класса.
- repr_failure(excinfo, style=None)[исходный код]¶
Возвращает представление коллекции или ошибки теста.
См.также
- Parameters:
excinfo (ExceptionInfo[BaseException]) – Информация об исключении для сбоя.
Парсер¶
- final class Parser[исходный код]¶
Парсер для аргументов командной строки и значений ini-файлов.
- Variables:
extra_info – Дикт общего значения param -> для отображения в случае ошибки при обработке аргументов командной строки.
- getgroup(name, description='', after=None)[исходный код]¶
Получить (или создать) именованную группу опций.
- Parameters:
- Result:
Группа опций.
- Result type:
Возвращаемый объект группы имеет метод
addoption
с той же сигнатурой, что иparser.addoption
, но в выводеpytest --help
будет показана соответствующая группа.
- addoption(*opts, **attrs)[исходный код]¶
Зарегистрируйте параметр командной строки.
- Parameters:
После разбора командной строки опции доступны в объекте pytest config через
config.option.NAME
, гдеNAME
обычно задается путем передачи атрибутаdest
, напримерaddoption("--long", dest="NAME", ...)
.
- parse_known_args(args, namespace=None)[исходный код]¶
Разберите известные аргументы на данном этапе.
- Result:
Объект пространства имен argparse.
- Result type:
- parse_known_and_unknown_args(args, namespace=None)[исходный код]¶
Разберите известные аргументы на данном этапе, а также верните оставшиеся неизвестные аргументы.
- 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
.
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
.
- 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
Сигнализирует об остановке при неудачном выполнении теста.
- perform_collect(args=None, genitems=True)[исходный код]¶
Выполните этап сбора данных для этой сессии.
Вызывается реализацией хука по умолчанию
pytest_collection
; подробнее см. документацию по этому хуку. В целях тестирования его также можно вызывать непосредственно на свежемSession
.Эта функция обычно рекурсивно расширяет все коллекторы, собранные в сессии, до их элементов, и возвращаются только элементы. Для целей тестирования это можно подавить, передав
genitems=False
, в этом случае возвращаемое значение содержит эти коллекторы нераскрытыми, аsession.items
будет пустым.
- for ... in collect()[исходный код]¶
Возвращает список дочерних элементов (элементов и коллекторов) для данного узла коллекции.
- parent¶
Родительский узел коллектора.
- path: Path¶
Путь к файловой системе, из которой был собран этот узел (может быть None).
TestReport¶
- final class TestReport[исходный код]¶
Base classes:
BaseReport
Базовый объект отчета о тестировании (также используется для вызовов установки и разрыва, если они не сработали).
Отчеты могут содержать произвольные дополнительные атрибуты.
- 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]¶
Нет или представление отказа.
- user_properties¶
Свойства пользователя - это список кортежей (имя, значение), в котором содержатся определяемые пользователем свойства теста.
- sections: List[Tuple[str, str]]¶
Кортежи str
(heading, content)
с дополнительной информацией для отчета о тестировании. Используется pytest для добавления текста, захваченного изstdout
,stderr
и перехваченных событий логирования. Может использоваться другими плагинами для добавления произвольной информации в отчеты.
- classmethod from_item_and_call(item, call)[исходный код]¶
Создайте и заполните TestReport стандартной информацией об элементах и звонках.
- 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 head_line: Optional[str]¶
Экспериментальная Строка заголовка, показанная при выводе longrepr для этого отчета, чаще всего при представлении трассировки во время сбоев:
________ Test.foo ________
В приведенном выше примере заголовок_строки имеет вид «Test.foo».
Примечание
Эта функция считается экспериментальной, поэтому имейте в виду, что она может быть изменена даже в релизах патчей.
_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