parent
ccb90b5c46
commit
c2841542af
|
@ -0,0 +1,3 @@
|
||||||
|
New `Deprecations and Removals <https://docs.pytest.org/en/latest/deprecations.html>`_ page shows all currently
|
||||||
|
deprecated features, the rationale to do so, and alternatives to update your code. It also list features removed
|
||||||
|
from pytest in past major releases to help those with ancient pytest versions to upgrade.
|
|
@ -3,13 +3,16 @@
|
||||||
Deprecations and Removals
|
Deprecations and Removals
|
||||||
=========================
|
=========================
|
||||||
|
|
||||||
This page lists all pytest features that are currently deprecated or have been removed in previous major releases.
|
This page lists all pytest features that are currently deprecated or have been removed in past major releases.
|
||||||
The objective is to give users a clear rationale why a certain feature has been removed, and what alternatives can be
|
The objective is to give users a clear rationale why a certain feature has been removed, and what alternatives
|
||||||
used instead.
|
should be used instead.
|
||||||
|
|
||||||
Deprecated Features
|
Deprecated Features
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
|
Below is a complete list of all pytest features which are considered deprecated. Using those features will issue
|
||||||
|
:class:`_pytest.warning_types.PytestWarning` or subclasses, which can be filtered using
|
||||||
|
:ref:`standard warning filters <warnings>`.
|
||||||
|
|
||||||
``Config.warn`` and ``Node.warn``
|
``Config.warn`` and ``Node.warn``
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
@ -101,6 +104,14 @@ In those cases just request the function directly in the dependent fixture:
|
||||||
cell.make_full()
|
cell.make_full()
|
||||||
return cell
|
return cell
|
||||||
|
|
||||||
|
``Node.get_marker``
|
||||||
|
~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. deprecated:: 3.6
|
||||||
|
|
||||||
|
As part of a large :ref:`marker-revamp`, :meth:`_pytest.nodes.Node.get_marker` is deprecated. See
|
||||||
|
:ref:`the documentation <update marker code>` on tips on how to update your code.
|
||||||
|
|
||||||
|
|
||||||
record_xml_property
|
record_xml_property
|
||||||
~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~
|
||||||
|
@ -133,6 +144,134 @@ Defining ``pytest_plugins`` is now deprecated in non-top-level conftest.py
|
||||||
files because they will activate referenced plugins *globally*, which is surprising because for all other pytest
|
files because they will activate referenced plugins *globally*, which is surprising because for all other pytest
|
||||||
features ``conftest.py`` files are only *active* for tests at or below it.
|
features ``conftest.py`` files are only *active* for tests at or below it.
|
||||||
|
|
||||||
|
Metafunc.addcall
|
||||||
|
~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. deprecated:: 3.3
|
||||||
|
|
||||||
|
:meth:`_pytest.python.Metafunc.addcall` was a precursor to the current parametrized mechanism. Users should use
|
||||||
|
:meth:`_pytest.python.Metafunc.parametrize` instead.
|
||||||
|
|
||||||
|
marks in ``pytest.mark.parametrize``
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. deprecated:: 3.2
|
||||||
|
|
||||||
|
Applying marks to values of a ``pytest.mark.parametrize`` call is now deprecated. For example:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"a, b", [(3, 9), pytest.mark.xfail(reason="flaky")(6, 36), (10, 100)]
|
||||||
|
)
|
||||||
|
def test_foo(a, b):
|
||||||
|
...
|
||||||
|
|
||||||
|
This code applies the ``pytest.mark.xfail(reason="flaky")`` mark to the ``(6, 36)`` value of the above parametrization
|
||||||
|
call.
|
||||||
|
|
||||||
|
This was considered hard to read and understand, and also its implementation presented problems to the code preventing
|
||||||
|
further internal improvements in the marks architecture.
|
||||||
|
|
||||||
|
To update the code, use ``pytest.param``:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"a, b",
|
||||||
|
[(3, 9), pytest.param((6, 36), marks=pytest.mark.xfail(reason="flaky")), (10, 100)],
|
||||||
|
)
|
||||||
|
def test_foo(a, b):
|
||||||
|
...
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Passing command-line string to ``pytest.main()``
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. deprecated:: 3.0
|
||||||
|
|
||||||
|
Passing a command-line string to ``pytest.main()`` is deprecated:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
pytest.main("-v -s")
|
||||||
|
|
||||||
|
Pass a list instead:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
pytest.main(["-v", "-s"])
|
||||||
|
|
||||||
|
|
||||||
|
By passing a string, users expect that pytest will interpret that command-line using the shell rules they are working
|
||||||
|
on (for example ``bash`` or ``Powershell``), but this is very hard/impossible to do in a portable way.
|
||||||
|
|
||||||
|
|
||||||
|
``yield`` tests
|
||||||
|
~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. deprecated:: 3.0
|
||||||
|
|
||||||
|
pytest supports ``yield``-style tests, where a test function actually ``yield`` functions and values
|
||||||
|
that are then turned into proper test methods. Example:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
def check(x, y):
|
||||||
|
assert x ** x == y
|
||||||
|
|
||||||
|
|
||||||
|
def test_squared():
|
||||||
|
yield check, 2, 4
|
||||||
|
yield check, 3, 9
|
||||||
|
|
||||||
|
This would result into two actual test functions being generated.
|
||||||
|
|
||||||
|
This form of test function doesn't support fixtures properly, and users should switch to ``pytest.mark.parametrize``:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("x, y", [(2, 4), (3, 9)])
|
||||||
|
def test_squared():
|
||||||
|
assert x ** x == y
|
||||||
|
|
||||||
|
|
||||||
|
``pytest_funcarg__`` prefix
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. deprecated:: 3.0
|
||||||
|
|
||||||
|
In very early pytest versions fixtures could be defined using the ``pytest_funcarg__`` prefix:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
def pytest_funcarg__data():
|
||||||
|
return SomeData()
|
||||||
|
|
||||||
|
Switch over to the ``@pytest.fixture`` decorator:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def data():
|
||||||
|
return SomeData()
|
||||||
|
|
||||||
|
[pytest] section in setup.cfg files
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. deprecated:: 3.0
|
||||||
|
|
||||||
|
``[pytest]`` sections in ``setup.cfg`` files should now be named ``[tool:pytest]``
|
||||||
|
to avoid conflicts with other distutils commands.
|
||||||
|
|
||||||
|
Result log (``--result-log``)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. deprecated:: 3.0
|
||||||
|
|
||||||
|
The ``--resultlog`` command line option has been deprecated: it is little used
|
||||||
|
and there are more modern and better alternatives, for example `pytest-tap <https://tappy.readthedocs.io/en/latest/>`_.
|
||||||
|
|
||||||
Removed Features
|
Removed Features
|
||||||
----------------
|
----------------
|
||||||
|
|
|
@ -52,6 +52,8 @@ should add ``--strict`` to ``addopts``:
|
||||||
serial
|
serial
|
||||||
|
|
||||||
|
|
||||||
|
.. _marker-revamp:
|
||||||
|
|
||||||
Marker revamp and iteration
|
Marker revamp and iteration
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue