commit
b4cd010d71
1
AUTHORS
1
AUTHORS
|
@ -146,6 +146,7 @@ Michael Seifert
|
||||||
Michal Wajszczuk
|
Michal Wajszczuk
|
||||||
Mihai Capotă
|
Mihai Capotă
|
||||||
Mike Lundy
|
Mike Lundy
|
||||||
|
Miro Hrončok
|
||||||
Nathaniel Waisbrot
|
Nathaniel Waisbrot
|
||||||
Ned Batchelder
|
Ned Batchelder
|
||||||
Neven Mundar
|
Neven Mundar
|
||||||
|
|
|
@ -8,6 +8,92 @@
|
||||||
|
|
||||||
.. towncrier release notes start
|
.. towncrier release notes start
|
||||||
|
|
||||||
|
Pytest 3.6.0 (2018-05-23)
|
||||||
|
=========================
|
||||||
|
|
||||||
|
Features
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Revamp the internals of the ``pytest.mark`` implementation with correct per
|
||||||
|
node handling which fixes a number of long standing bugs caused by the old
|
||||||
|
design. This introduces new ``Node.iter_markers(name)`` and
|
||||||
|
``Node.get_closest_mark(name)`` APIs. Users are **strongly encouraged** to
|
||||||
|
read the `reasons for the revamp in the docs
|
||||||
|
<https://docs.pytest.org/en/latest/mark.html#marker-revamp-and-iteration>`_,
|
||||||
|
or jump over to details about `updating existing code to use the new APIs
|
||||||
|
<https://docs.pytest.org/en/latest/mark.html#updating-code>`_. (`#3317
|
||||||
|
<https://github.com/pytest-dev/pytest/issues/3317>`_)
|
||||||
|
|
||||||
|
- Now when ``@pytest.fixture`` is applied more than once to the same function a
|
||||||
|
``ValueError`` is raised. This buggy behavior would cause surprising problems
|
||||||
|
and if was working for a test suite it was mostly by accident. (`#2334
|
||||||
|
<https://github.com/pytest-dev/pytest/issues/2334>`_)
|
||||||
|
|
||||||
|
- Support for Python 3.7's builtin ``breakpoint()`` method, see `Using the
|
||||||
|
builtin breakpoint function
|
||||||
|
<https://docs.pytest.org/en/latest/usage.html#breakpoint-builtin>`_ for
|
||||||
|
details. (`#3180 <https://github.com/pytest-dev/pytest/issues/3180>`_)
|
||||||
|
|
||||||
|
- ``monkeypatch`` now supports a ``context()`` function which acts as a context
|
||||||
|
manager which undoes all patching done within the ``with`` block. (`#3290
|
||||||
|
<https://github.com/pytest-dev/pytest/issues/3290>`_)
|
||||||
|
|
||||||
|
- The ``--pdb`` option now causes KeyboardInterrupt to enter the debugger,
|
||||||
|
instead of stopping the test session. On python 2.7, hitting CTRL+C again
|
||||||
|
exits the debugger. On python 3.2 and higher, use CTRL+D. (`#3299
|
||||||
|
<https://github.com/pytest-dev/pytest/issues/3299>`_)
|
||||||
|
|
||||||
|
- pytest not longer changes the log level of the root logger when the
|
||||||
|
``log-level`` parameter has greater numeric value than that of the level of
|
||||||
|
the root logger, which makes it play better with custom logging configuration
|
||||||
|
in user code. (`#3307 <https://github.com/pytest-dev/pytest/issues/3307>`_)
|
||||||
|
|
||||||
|
|
||||||
|
Bug Fixes
|
||||||
|
---------
|
||||||
|
|
||||||
|
- A rare race-condition which might result in corrupted ``.pyc`` files on
|
||||||
|
Windows has been hopefully solved. (`#3008
|
||||||
|
<https://github.com/pytest-dev/pytest/issues/3008>`_)
|
||||||
|
|
||||||
|
- Also use iter_marker for discovering the marks applying for marker
|
||||||
|
expressions from the cli to avoid the bad data from the legacy mark storage.
|
||||||
|
(`#3441 <https://github.com/pytest-dev/pytest/issues/3441>`_)
|
||||||
|
|
||||||
|
- When showing diffs of failed assertions where the contents contain only
|
||||||
|
whitespace, escape them using ``repr()`` first to make it easy to spot the
|
||||||
|
differences. (`#3443 <https://github.com/pytest-dev/pytest/issues/3443>`_)
|
||||||
|
|
||||||
|
|
||||||
|
Improved Documentation
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
- Change documentation copyright year to a range which auto-updates itself each
|
||||||
|
time it is published. (`#3303
|
||||||
|
<https://github.com/pytest-dev/pytest/issues/3303>`_)
|
||||||
|
|
||||||
|
|
||||||
|
Trivial/Internal Changes
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
- ``pytest`` now depends on the `python-atomicwrites
|
||||||
|
<https://github.com/untitaker/python-atomicwrites>`_ library. (`#3008
|
||||||
|
<https://github.com/pytest-dev/pytest/issues/3008>`_)
|
||||||
|
|
||||||
|
- Update all pypi.python.org URLs to pypi.org. (`#3431
|
||||||
|
<https://github.com/pytest-dev/pytest/issues/3431>`_)
|
||||||
|
|
||||||
|
- Detect `pytest_` prefixed hooks using the internal plugin manager since
|
||||||
|
``pluggy`` is deprecating the ``implprefix`` argument to ``PluginManager``.
|
||||||
|
(`#3487 <https://github.com/pytest-dev/pytest/issues/3487>`_)
|
||||||
|
|
||||||
|
- Import ``Mapping`` and ``Sequence`` from ``_pytest.compat`` instead of
|
||||||
|
directly from ``collections`` in ``python_api.py::approx``. Add ``Mapping``
|
||||||
|
to ``_pytest.compat``, import it from ``collections`` on python 2, but from
|
||||||
|
``collections.abc`` on Python 3 to avoid a ``DeprecationWarning`` on Python
|
||||||
|
3.7 or newer. (`#3497 <https://github.com/pytest-dev/pytest/issues/3497>`_)
|
||||||
|
|
||||||
|
|
||||||
Pytest 3.5.1 (2018-04-23)
|
Pytest 3.5.1 (2018-04-23)
|
||||||
=========================
|
=========================
|
||||||
|
|
||||||
|
|
|
@ -40,11 +40,11 @@ MODULE_NOT_FOUND_ERROR = 'ModuleNotFoundError' if PY36 else 'ImportError'
|
||||||
|
|
||||||
if _PY3:
|
if _PY3:
|
||||||
from collections.abc import MutableMapping as MappingMixin # noqa
|
from collections.abc import MutableMapping as MappingMixin # noqa
|
||||||
from collections.abc import Sequence # noqa
|
from collections.abc import Mapping, Sequence # noqa
|
||||||
else:
|
else:
|
||||||
# those raise DeprecationWarnings in Python >=3.7
|
# those raise DeprecationWarnings in Python >=3.7
|
||||||
from collections import MutableMapping as MappingMixin # noqa
|
from collections import MutableMapping as MappingMixin # noqa
|
||||||
from collections import Sequence # noqa
|
from collections import Mapping, Sequence # noqa
|
||||||
|
|
||||||
|
|
||||||
def _format_args(func):
|
def _format_args(func):
|
||||||
|
|
|
@ -177,7 +177,7 @@ class PytestPluginManager(PluginManager):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(PytestPluginManager, self).__init__("pytest", implprefix="pytest_")
|
super(PytestPluginManager, self).__init__("pytest")
|
||||||
self._conftest_plugins = set()
|
self._conftest_plugins = set()
|
||||||
|
|
||||||
# state related to local conftest plugins
|
# state related to local conftest plugins
|
||||||
|
@ -231,6 +231,11 @@ class PytestPluginManager(PluginManager):
|
||||||
|
|
||||||
method = getattr(plugin, name)
|
method = getattr(plugin, name)
|
||||||
opts = super(PytestPluginManager, self).parse_hookimpl_opts(plugin, name)
|
opts = super(PytestPluginManager, self).parse_hookimpl_opts(plugin, name)
|
||||||
|
|
||||||
|
# collect unmarked hooks as long as they have the `pytest_' prefix
|
||||||
|
if opts is None and name.startswith("pytest_"):
|
||||||
|
opts = {}
|
||||||
|
|
||||||
if opts is not None:
|
if opts is not None:
|
||||||
for name in ("tryfirst", "trylast", "optionalhook", "hookwrapper"):
|
for name in ("tryfirst", "trylast", "optionalhook", "hookwrapper"):
|
||||||
opts.setdefault(name, hasattr(method, name))
|
opts.setdefault(name, hasattr(method, name))
|
||||||
|
|
|
@ -426,7 +426,7 @@ def approx(expected, rel=None, abs=None, nan_ok=False):
|
||||||
__ https://docs.python.org/3/reference/datamodel.html#object.__ge__
|
__ https://docs.python.org/3/reference/datamodel.html#object.__ge__
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from collections import Mapping, Sequence
|
from _pytest.compat import Mapping, Sequence
|
||||||
from _pytest.compat import STRING_TYPES as String
|
from _pytest.compat import STRING_TYPES as String
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
|
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
Now when ``@pytest.fixture`` is applied more than once to the same function a ``ValueError`` is raised. This buggy behavior would cause surprising problems and if was working for a test suite it was mostly by accident.
|
|
|
@ -1 +0,0 @@
|
||||||
A rare race-condition which might result in corrupted ``.pyc`` files on Windows has been hopefully solved.
|
|
|
@ -1 +0,0 @@
|
||||||
``pytest`` now depends on the `python-atomicwrites <https://github.com/untitaker/python-atomicwrites>`_ library.
|
|
|
@ -1 +0,0 @@
|
||||||
Support for Python 3.7's builtin ``breakpoint()`` method, see `Using the builtin breakpoint function <https://docs.pytest.org/en/latest/usage.html#breakpoint-builtin>`_ for details.
|
|
|
@ -1,2 +0,0 @@
|
||||||
``monkeypatch`` now supports a ``context()`` function which acts as a context manager which undoes all patching done
|
|
||||||
within the ``with`` block.
|
|
|
@ -1,2 +0,0 @@
|
||||||
The ``--pdb`` option now causes KeyboardInterrupt to enter the debugger, instead of stopping the test session.
|
|
||||||
On python 2.7, hitting CTRL+C again exits the debugger. On python 3.2 and higher, use CTRL+D.
|
|
|
@ -1 +0,0 @@
|
||||||
Change documentation copyright year to a range which auto-updates itself each time it is published.
|
|
|
@ -1,3 +0,0 @@
|
||||||
pytest not longer changes the log level of the root logger when the
|
|
||||||
``log-level`` parameter has greater numeric value than that of the level of
|
|
||||||
the root logger, which makes it play better with custom logging configuration in user code.
|
|
|
@ -1,4 +0,0 @@
|
||||||
Revamp the internals of the ``pytest.mark`` implementation with correct per node handling which fixes a number of
|
|
||||||
long standing bugs caused by the old design. This introduces new ``Node.iter_markers(name)`` and ``Node.get_closest_mark(name)`` APIs.
|
|
||||||
Users are **strongly encouraged** to read the `reasons for the revamp in the docs <https://docs.pytest.org/en/latest/mark.html#marker-revamp-and-iteration>`_,
|
|
||||||
or jump over to details about `updating existing code to use the new APIs <https://docs.pytest.org/en/latest/mark.html#updating-code>`_.
|
|
|
@ -1 +0,0 @@
|
||||||
Update all pypi.python.org URLs to pypi.org.
|
|
|
@ -1 +0,0 @@
|
||||||
Also use iter_marker for discovering the marks applying for marker expressions from the cli to avoid the bad data from the legacy mark storage.
|
|
|
@ -1 +0,0 @@
|
||||||
When showing diffs of failed assertions where the contents contain only whitespace, escape them using ``repr()`` first to make it easy to spot the differences.
|
|
|
@ -6,6 +6,7 @@ Release announcements
|
||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
|
|
||||||
|
|
||||||
|
release-3.6.0
|
||||||
release-3.5.1
|
release-3.5.1
|
||||||
release-3.5.0
|
release-3.5.0
|
||||||
release-3.4.2
|
release-3.4.2
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
pytest-3.6.0
|
||||||
|
=======================================
|
||||||
|
|
||||||
|
The pytest team is proud to announce the 3.6.0 release!
|
||||||
|
|
||||||
|
pytest is a mature Python testing tool with more than a 1600 tests
|
||||||
|
against itself, passing on many different interpreters and platforms.
|
||||||
|
|
||||||
|
This release contains a number of bugs fixes and improvements, so users are encouraged
|
||||||
|
to take a look at the CHANGELOG:
|
||||||
|
|
||||||
|
http://doc.pytest.org/en/latest/changelog.html
|
||||||
|
|
||||||
|
For complete documentation, please visit:
|
||||||
|
|
||||||
|
http://docs.pytest.org
|
||||||
|
|
||||||
|
As usual, you can upgrade from pypi via:
|
||||||
|
|
||||||
|
pip install -U pytest
|
||||||
|
|
||||||
|
Thanks to all who contributed to this release, among them:
|
||||||
|
|
||||||
|
* Anthony Shaw
|
||||||
|
* ApaDoctor
|
||||||
|
* Brian Maissy
|
||||||
|
* Bruno Oliveira
|
||||||
|
* Jon Dufresne
|
||||||
|
* Katerina Koukiou
|
||||||
|
* Miro Hrončok
|
||||||
|
* Rachel Kogan
|
||||||
|
* Ronny Pfannschmidt
|
||||||
|
* Tim Hughes
|
||||||
|
* Tyler Goodlet
|
||||||
|
* Ville Skyttä
|
||||||
|
* aviral1701
|
||||||
|
* feuillemorte
|
||||||
|
|
||||||
|
|
||||||
|
Happy testing,
|
||||||
|
The Pytest Development Team
|
|
@ -389,7 +389,7 @@ Now we can profile which test functions execute the slowest::
|
||||||
========================= slowest 3 test durations =========================
|
========================= slowest 3 test durations =========================
|
||||||
0.30s call test_some_are_slow.py::test_funcslow2
|
0.30s call test_some_are_slow.py::test_funcslow2
|
||||||
0.20s call test_some_are_slow.py::test_funcslow1
|
0.20s call test_some_are_slow.py::test_funcslow1
|
||||||
0.10s call test_some_are_slow.py::test_funcfast
|
0.11s call test_some_are_slow.py::test_funcfast
|
||||||
========================= 3 passed in 0.12 seconds =========================
|
========================= 3 passed in 0.12 seconds =========================
|
||||||
|
|
||||||
incremental testing - test steps
|
incremental testing - test steps
|
||||||
|
|
|
@ -123,7 +123,7 @@ You can call ``caplog.clear()`` to reset the captured log records in a test::
|
||||||
assert ['Foo'] == [rec.message for rec in caplog.records]
|
assert ['Foo'] == [rec.message for rec in caplog.records]
|
||||||
|
|
||||||
|
|
||||||
The ``caplop.records`` attribute contains records from the current stage only, so
|
The ``caplog.records`` attribute contains records from the current stage only, so
|
||||||
inside the ``setup`` phase it contains only setup logs, same with the ``call`` and
|
inside the ``setup`` phase it contains only setup logs, same with the ``call`` and
|
||||||
``teardown`` phases.
|
``teardown`` phases.
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
|
-e .
|
||||||
gitpython
|
gitpython
|
||||||
invoke
|
invoke
|
||||||
towncrier
|
towncrier
|
||||||
tox
|
tox
|
||||||
|
wheel
|
||||||
|
|
Loading…
Reference in New Issue