test_ok2/doc/en/builtin.rst

182 lines
6.5 KiB
ReStructuredText
Raw Normal View History

2018-02-27 07:27:15 +08:00
:orphan:
.. _`pytest helpers`:
Pytest API and builtin fixtures
================================================
2018-02-27 07:27:15 +08:00
Most of the information of this page has been moved over to :ref:`reference`.
For information on plugin hooks and objects, see :ref:`plugins`.
For information on the ``pytest.mark`` mechanism, see :ref:`mark`.
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
2018-02-27 07:27:15 +08:00
$ pytest -q --fixtures
2018-03-22 04:46:07 +08:00
cache
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
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
2018-03-22 04:46:07 +08:00
capsys
2019-03-30 04:49:18 +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.
2019-05-09 05:50:08 +08:00
2018-03-22 04:46:07 +08:00
capsysbinary
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
2018-03-22 04:46:07 +08:00
capfd
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
2018-03-22 04:46:07 +08:00
capfdbinary
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
doctest_namespace [session scope]
Fixture that returns a :py:class:`dict` that will be injected into the
namespace of doctests.
2019-05-09 05:50:08 +08:00
pytestconfig [session scope]
2018-03-22 04:46:07 +08:00
Session-scoped fixture that returns the :class:`_pytest.config.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):
if pytestconfig.getoption("verbose") > 0:
2018-03-22 04:46:07 +08:00
...
2019-05-09 05:50:08 +08:00
2018-03-22 04:46:07 +08:00
record_property
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.
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
2018-03-22 04:46:07 +08:00
record_xml_attribute
Add extra xml attributes to the tag for the calling test.
The fixture is callable with ``name, value``. The value is
automatically XML-encoded.
2019-05-09 05:50:08 +08:00
2019-05-12 00:35:32 +08:00
record_testsuite_property [session scope]
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")
``name`` must be a string, ``value`` will be converted to a string and properly xml-escaped.
.. warning::
Currently this fixture **does not work** with the
`pytest-xdist <https://github.com/pytest-dev/pytest-xdist>`__ plugin. See issue
`#7767 <https://github.com/pytest-dev/pytest/issues/7767>`__ for details.
2018-03-22 04:46:07 +08:00
caplog
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
2018-03-22 04:46:07 +08:00
monkeypatch
A convenient fixture for monkey-patching.
The fixture provides these methods to modify objects, dictionaries or
os.environ::
2018-07-04 08:58:18 +08:00
2018-03-22 04:46:07 +08:00
monkeypatch.setattr(obj, name, value, raising=True)
monkeypatch.delattr(obj, name, raising=True)
monkeypatch.setitem(mapping, name, value)
monkeypatch.delitem(obj, name, raising=True)
monkeypatch.setenv(name, value, prepend=False)
2018-07-04 08:51:21 +08:00
monkeypatch.delenv(name, raising=True)
2018-03-22 04:46:07 +08:00
monkeypatch.syspath_prepend(path)
monkeypatch.chdir(path)
2018-07-04 08:58:18 +08:00
All modifications will be undone after the requesting test function or
fixture has finished. The ``raising`` parameter determines if a KeyError
or AttributeError will be raised if the set/deletion operation has no target.
2019-05-09 05:50:08 +08:00
2018-03-22 04:46:07 +08:00
recwarn
Return a :class:`WarningsRecorder` instance that records all warnings emitted by test functions.
2018-07-04 08:58:18 +08:00
2018-03-22 04:46:07 +08:00
See http://docs.python.org/library/warnings.html for information
on warning categories.
2019-05-09 05:50:08 +08:00
tmpdir_factory [session scope]
2018-10-16 04:23:30 +08:00
Return a :class:`_pytest.tmpdir.TempdirFactory` instance for the test session.
2019-05-09 05:50:08 +08:00
tmp_path_factory [session scope]
2018-10-16 04:23:30 +08:00
Return a :class:`_pytest.tmpdir.TempPathFactory` instance for the test session.
2019-05-09 05:50:08 +08:00
2018-03-22 04:46:07 +08:00
tmpdir
Return a temporary directory path object which is unique to each test
function invocation, created as a sub directory of the base temporary
directory.
The returned object is a `py.path.local`_ path object.
2018-07-04 08:58:18 +08:00
2018-03-22 04:46:07 +08:00
.. _`py.path.local`: https://py.readthedocs.io/en/latest/path.html
2019-05-09 05:50:08 +08:00
2018-10-16 04:23:30 +08:00
tmp_path
Return a temporary directory path object which is unique to each test
function invocation, created as a sub directory of the base temporary
directory.
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
2019-09-18 21:11:59 +08:00
no tests ran in 0.12s
You can also interactively ask for help, e.g. by typing on the Python interactive prompt something like:
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)