2018-02-27 07:27:15 +08:00
:orphan:
2010-11-06 06:37:31 +08:00
2010-11-18 21:56:16 +08:00
.. _`pytest helpers`:
2012-10-09 20:35:17 +08:00
Pytest API and builtin fixtures
2010-11-06 06:37:31 +08:00
================================================
2018-02-27 07:27:15 +08:00
2021-03-17 04:26:05 +08:00
Most of the information of this page has been moved over to :ref: `api-reference` .
2012-10-09 20:35:17 +08:00
For information on plugin hooks and objects, see :ref: `plugins` .
For information on the `` pytest.mark `` mechanism, see :ref: `mark` .
2010-11-06 06:37:31 +08:00
2018-11-24 13:41:22 +08:00
For information about fixtures, see :ref: `fixtures` . To see a complete list of available fixtures (add `` -v `` to also see fixtures with leading `` _ `` ), type :
.. code-block :: pytest
2010-11-06 06:37:31 +08:00
2021-10-04 14:56:26 +08:00
$ pytest --fixtures -v
=========================== test session starts ============================
2024-01-02 16:58:20 +08:00
platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y -- $PYTHON_PREFIX/bin/python
2021-10-04 14:56:26 +08:00
cachedir: .pytest_cache
rootdir: /home/sweet/project
collected 0 items
2024-04-28 07:35:29 +08:00
cache -- .../_pytest/cacheprovider.py:542
2018-03-22 04:46:07 +08:00
Return a cache object that can persist state between testing sessions.
2018-07-04 08:58:18 +08:00
2018-03-22 04:46:07 +08:00
cache.get(key, default)
cache.set(key, value)
2018-07-04 08:58:18 +08:00
2020-09-27 02:09:34 +08:00
Keys must be `` / `` separated strings, where the first part is usually the
2018-03-22 04:46:07 +08:00
name of your plugin or application to avoid clashes with other cache users.
2018-07-04 08:58:18 +08:00
2018-03-22 04:46:07 +08:00
Values can be any object handled by the json stdlib module.
2019-05-09 05:50:08 +08:00
2024-04-28 07:35:29 +08:00
capsysbinary -- .../_pytest/capture.py:1003
2019-03-30 04:49:18 +08:00
Enable bytes capturing of writes to `` sys.stdout `` and `` sys.stderr `` .
The captured output is made available via `` capsysbinary.readouterr() ``
method calls, which return a `` (out, err) `` namedtuple.
`` out `` and `` err `` will be `` bytes `` objects.
2019-05-09 05:50:08 +08:00
2022-09-02 19:23:39 +08:00
Returns an instance of :class: `CaptureFixture[bytes] <pytest.CaptureFixture>` .
Example:
.. code-block :: python
def test_output(capsysbinary):
print("hello")
captured = capsysbinary.readouterr()
assert captured.out == b"hello\n"
2024-04-28 07:35:29 +08:00
capfd -- .../_pytest/capture.py:1030
2019-03-30 04:49:18 +08:00
Enable text capturing of writes to file descriptors `` 1 `` and `` 2 `` .
The captured output is made available via `` capfd.readouterr() `` method
calls, which return a `` (out, err) `` namedtuple.
`` out `` and `` err `` will be `` text `` objects.
2019-05-09 05:50:08 +08:00
2022-09-02 19:23:39 +08:00
Returns an instance of :class: `CaptureFixture[str] <pytest.CaptureFixture>` .
Example:
.. code-block :: python
def test_system_echo(capfd):
os.system('echo "hello"')
captured = capfd.readouterr()
assert captured.out == "hello\n"
2024-04-28 07:35:29 +08:00
capfdbinary -- .../_pytest/capture.py:1057
2019-03-30 04:49:18 +08:00
Enable bytes capturing of writes to file descriptors `` 1 `` and `` 2 `` .
The captured output is made available via `` capfd.readouterr() `` method
calls, which return a `` (out, err) `` namedtuple.
`` out `` and `` err `` will be `` byte `` objects.
2019-05-09 05:50:08 +08:00
2022-09-02 19:23:39 +08:00
Returns an instance of :class: `CaptureFixture[bytes] <pytest.CaptureFixture>` .
Example:
.. code-block :: python
def test_system_echo(capfdbinary):
os.system('echo "hello"')
captured = capfdbinary.readouterr()
assert captured.out == b"hello\n"
2024-04-28 07:35:29 +08:00
capsys -- .../_pytest/capture.py:976
2023-03-17 16:32:08 +08:00
Enable text capturing of writes to `` sys.stdout `` and `` sys.stderr `` .
The captured output is made available via `` capsys.readouterr() `` method
calls, which return a `` (out, err) `` namedtuple.
`` out `` and `` err `` will be `` text `` objects.
Returns an instance of :class: `CaptureFixture[str] <pytest.CaptureFixture>` .
Example:
.. code-block :: python
def test_output(capsys):
print("hello")
captured = capsys.readouterr()
assert captured.out == "hello\n"
2024-04-28 07:35:29 +08:00
doctest_namespace [session scope] -- .../_pytest/doctest.py:738
2020-09-27 02:09:34 +08:00
Fixture that returns a :py:class: `dict` that will be injected into the
namespace of doctests.
2019-05-09 05:50:08 +08:00
2022-09-02 19:23:39 +08:00
Usually this fixture is used in conjunction with another `` autouse `` fixture:
.. code-block :: python
@pytest.fixture(autouse=True)
def add_np(doctest_namespace):
doctest_namespace["np"] = numpy
For more details: :ref: `doctest_namespace` .
2024-04-28 07:35:29 +08:00
pytestconfig [session scope] -- .../_pytest/fixtures.py:1335
2021-10-04 14:56:26 +08:00
Session-scoped fixture that returns the session's :class: `pytest.Config`
object.
2018-07-04 08:58:18 +08:00
2018-03-22 04:46:07 +08:00
Example::
2018-07-04 08:58:18 +08:00
2018-03-22 04:46:07 +08:00
def test_foo(pytestconfig):
2019-03-22 14:45:43 +08:00
if pytestconfig.getoption("verbose") > 0:
2018-03-22 04:46:07 +08:00
...
2019-05-09 05:50:08 +08:00
2024-04-28 07:35:29 +08:00
record_property -- .../_pytest/junitxml.py:284
2020-07-29 04:01:27 +08:00
Add extra properties to the calling test.
2018-03-22 04:46:07 +08:00
User properties become part of the test report and are available to the
configured reporters, like JUnit XML.
2020-07-29 04:01:27 +08:00
The fixture is callable with `` name, value `` . The value is automatically
XML-encoded.
2018-07-04 08:58:18 +08:00
2018-03-22 04:46:07 +08:00
Example::
2018-07-04 08:58:18 +08:00
2018-03-22 04:46:07 +08:00
def test_function(record_property):
record_property("example_key", 1)
2019-05-09 05:50:08 +08:00
2024-04-28 07:35:29 +08:00
record_xml_attribute -- .../_pytest/junitxml.py:307
2018-03-22 04:46:07 +08:00
Add extra xml attributes to the tag for the calling test.
2020-07-29 04:01:27 +08:00
The fixture is callable with `` name, value `` . The value is
automatically XML-encoded.
2019-05-09 05:50:08 +08:00
2024-04-28 07:35:29 +08:00
record_testsuite_property [session scope] -- .../_pytest/junitxml.py:345
2020-09-27 02:09:34 +08:00
Record a new `` <property> `` tag as child of the root `` <testsuite> `` .
This is suitable to writing global information regarding the entire test
suite, and is compatible with `` xunit2 `` JUnit family.
2019-05-12 00:35:32 +08:00
This is a `` session `` -scoped fixture which is called with `` (name, value) `` . Example:
.. code-block :: python
def test_foo(record_testsuite_property):
record_testsuite_property("ARCH", "PPC")
record_testsuite_property("STORAGE_TYPE", "CEPH")
2022-10-25 19:12:55 +08:00
:param name:
The property name.
:param value:
The property value. Will be converted to a string.
2019-05-12 00:35:32 +08:00
2020-09-27 02:09:34 +08:00
.. warning ::
Currently this fixture **does not work** with the
2021-12-07 17:13:36 +08:00
`pytest-xdist <https://github.com/pytest-dev/pytest-xdist> `__ plugin. See
:issue: `7767` for details.
2020-09-27 02:09:34 +08:00
2024-03-09 19:51:20 +08:00
tmpdir_factory [session scope] -- .../_pytest/legacypath.py:303
2021-12-07 17:13:36 +08:00
Return a :class: `pytest.TempdirFactory` instance for the test session.
2024-03-09 19:51:20 +08:00
tmpdir -- .../_pytest/legacypath.py:310
2021-12-07 17:13:36 +08:00
Return a temporary directory path object which is unique to each test
function invocation, created as a sub directory of the base temporary
directory.
By default, a new base temporary directory is created each test session,
and old bases are removed after 3 sessions, to aid in debugging. If
2024-03-04 05:25:09 +08:00
`` --basetemp `` is used then it is cleared each session. See
:ref: `temporary directory location and retention` .
2021-12-07 17:13:36 +08:00
The returned object is a `legacy_path`_ object.
2022-09-02 19:23:39 +08:00
.. note ::
These days, it is preferred to use `` tmp_path `` .
:ref: `About the tmpdir and tmpdir_factory fixtures<tmpdir and tmpdir_factory>` .
2021-12-07 17:13:36 +08:00
.. _legacy_path: https://py.readthedocs.io/en/latest/path.html
2024-04-28 07:35:29 +08:00
caplog -- .../_pytest/logging.py:602
2018-03-22 04:46:07 +08:00
Access and control log capturing.
2018-07-04 08:58:18 +08:00
2018-10-27 21:07:54 +08:00
Captured logs are available through the following properties/methods::
2018-07-04 08:58:18 +08:00
2019-10-25 07:24:04 +08:00
* caplog.messages -> list of format-interpolated log messages
2018-04-18 04:17:29 +08:00
* caplog.text -> string containing formatted log output
* caplog.records -> list of logging.LogRecord instances
* caplog.record_tuples -> list of (logger_name, level, message) tuples
2018-03-22 04:46:07 +08:00
* caplog.clear() -> clear captured records and formatted log output string
2019-05-09 05:50:08 +08:00
2024-04-28 07:35:29 +08:00
monkeypatch -- .../_pytest/monkeypatch.py:33
2020-09-27 02:09:34 +08:00
A convenient fixture for monkey-patching.
2022-09-02 19:23:39 +08:00
The fixture provides these methods to modify objects, dictionaries, or
:data: `os.environ` :
2018-07-04 08:58:18 +08:00
2022-09-02 19:23:39 +08:00
* :meth: `monkeypatch.setattr(obj, name, value, raising=True) <pytest.MonkeyPatch.setattr>`
* :meth: `monkeypatch.delattr(obj, name, raising=True) <pytest.MonkeyPatch.delattr>`
* :meth: `monkeypatch.setitem(mapping, name, value) <pytest.MonkeyPatch.setitem>`
* :meth: `monkeypatch.delitem(obj, name, raising=True) <pytest.MonkeyPatch.delitem>`
* :meth: `monkeypatch.setenv(name, value, prepend=None) <pytest.MonkeyPatch.setenv>`
* :meth: `monkeypatch.delenv(name, raising=True) <pytest.MonkeyPatch.delenv>`
* :meth: `monkeypatch.syspath_prepend(path) <pytest.MonkeyPatch.syspath_prepend>`
* :meth: `monkeypatch.chdir(path) <pytest.MonkeyPatch.chdir>`
* :meth: `monkeypatch.context() <pytest.MonkeyPatch.context>`
2018-07-04 08:58:18 +08:00
2020-09-27 02:09:34 +08:00
All modifications will be undone after the requesting test function or
2022-09-02 19:23:39 +08:00
fixture has finished. The `` raising `` parameter determines if a :class: `KeyError`
or :class: `AttributeError` will be raised if the set/deletion operation does not have the
specified target.
To undo modifications done by the fixture in a contained scope,
use :meth: `context() <pytest.MonkeyPatch.context>` .
2019-05-09 05:50:08 +08:00
2024-04-28 07:35:29 +08:00
recwarn -- .../_pytest/recwarn.py:32
2018-03-22 04:46:07 +08:00
Return a :class: `WarningsRecorder` instance that records all warnings emitted by test functions.
2018-07-04 08:58:18 +08:00
2022-10-25 19:12:55 +08:00
See https://docs.pytest.org/en/latest/how-to/capture-warnings.html for information
2018-03-22 04:46:07 +08:00
on warning categories.
2019-05-09 05:50:08 +08:00
2024-04-28 07:35:29 +08:00
tmp_path_factory [session scope] -- .../_pytest/tmpdir.py:242
2021-03-14 03:22:54 +08:00
Return a :class: `pytest.TempPathFactory` instance for the test session.
2019-05-09 05:50:08 +08:00
2024-04-28 07:35:29 +08:00
tmp_path -- .../_pytest/tmpdir.py:257
2020-09-27 02:09:34 +08:00
Return a temporary directory path object which is unique to each test
function invocation, created as a sub directory of the base temporary
directory.
2020-12-13 05:21:28 +08:00
By default, a new base temporary directory is created each test session,
2023-03-17 16:32:08 +08:00
and old bases are removed after 3 sessions, to aid in debugging.
This behavior can be configured with :confval: `tmp_path_retention_count` and
:confval: `tmp_path_retention_policy` .
2024-03-04 05:25:09 +08:00
If `` --basetemp `` is used then it is cleared each session. See
:ref: `temporary directory location and retention` .
2020-12-13 05:21:28 +08:00
2020-09-27 02:09:34 +08:00
The returned object is a :class: `pathlib.Path` object.
2018-10-16 04:23:30 +08:00
2019-05-09 05:50:08 +08:00
2021-10-04 14:56:26 +08:00
========================== no tests ran in 0.12s ===========================
2011-10-21 21:45:56 +08:00
2019-08-07 07:20:06 +08:00
You can also interactively ask for help, e.g. by typing on the Python interactive prompt something like:
2010-11-06 06:37:31 +08:00
2019-08-07 04:25:54 +08:00
.. code-block :: python
2018-02-27 07:27:15 +08:00
import pytest
2019-08-07 04:34:58 +08:00
2018-02-27 07:27:15 +08:00
help(pytest)