pytest-2.6.0: shorter tracebacks, new warning system, test runner compat

pytest is a mature Python testing tool with more than 1000 tests against itself, passing on many different interpreters and platforms.

The 2.6.0 release should be drop-in backward compatible to 2.5.2 and fixes a number of bugs and brings some new features, mainly:

  • shorter tracebacks by default: only the first (test function) entry and the last (failure location) entry are shown, the ones between only in “short” format. Use --tb=long to get back the old behaviour of showing “long” entries everywhere.

  • a new warning system which reports oddities during collection and execution. For example, ignoring collecting Test* classes with an __init__ now produces a warning.

  • various improvements to nose/mock/unittest integration

Note also that 2.6.0 departs with the “zero reported bugs” policy because it has been too hard to keep up with it, unfortunately. Instead we are for now rather bound to work on “upvoted” issues in the https://bitbucket.org/pytest-dev/pytest/issues?status=new&status=open&sort=-votes issue tracker.

See docs at:

As usual, you can upgrade from pypi via:

pip install -U pytest

Thanks to all who contributed, among them:

Benjamin Peterson Jurko Gospodnetić Floris Bruynooghe Marc Abramowitz Marc Schlaich Trevor Bekolay Bruno Oliveira Alex Groenholm

have fun, holger krekel

2.6.0

  • fix issue537: Avoid importing old assertion reinterpretation code by default. Thanks Benjamin Peterson.

  • fix issue364: shorten and enhance tracebacks representation by default. The new “–tb=auto” option (default) will only display long tracebacks for the first and last entry. You can get the old behaviour of printing all entries as long entries with “–tb=long”. Also short entries by default are now printed very similarly to “–tb=native” ones.

  • fix issue514: teach assertion reinterpretation about private class attributes Thanks Benjamin Peterson.

  • change -v output to include full node IDs of tests. Users can copy a node ID from a test run, including line number, and use it as a positional argument in order to run only a single test.

  • fix issue 475: fail early and comprehensible if calling pytest.raises with wrong exception type.

  • fix issue516: tell in getting-started about current dependencies.

  • cleanup setup.py a bit and specify supported versions. Thanks Jurko Gospodnetic for the PR.

  • change XPASS colour to yellow rather then red when tests are run with -v.

  • fix issue473: work around mock putting an unbound method into a class dict when double-patching.

  • fix issue498: if a fixture finalizer fails, make sure that the fixture is still invalidated.

  • fix issue453: the result of the pytest_assertrepr_compare hook now gets it’s newlines escaped so that format_exception does not blow up.

  • internal new warning system: pytest will now produce warnings when it detects oddities in your test collection or execution. Warnings are ultimately sent to a new pytest_logwarning hook which is currently only implemented by the terminal plugin which displays warnings in the summary line and shows more details when -rw (report on warnings) is specified.

  • change skips into warnings for test classes with an __init__ and callables in test modules which look like a test but are not functions.

  • fix issue436: improved finding of initial conftest files from command line arguments by using the result of parse_known_args rather than the previous flaky heuristics. Thanks Marc Abramowitz for tests and initial fixing approaches in this area.

  • fix issue #479: properly handle nose/unittest(2) SkipTest exceptions during collection/loading of test modules. Thanks to Marc Schlaich for the complete PR.

  • fix issue490: include pytest_load_initial_conftests in documentation and improve docstring.

  • fix issue472: clarify that pytest.config.getvalue() cannot work if it’s triggered ahead of command line parsing.

  • merge PR123: improved integration with mock.patch decorator on tests.

  • fix issue412: messing with stdout/stderr FD-level streams is now captured without crashes.

  • fix issue483: trial/py33 works now properly. Thanks Daniel Grana for PR.

  • improve example for pytest integration with “python setup.py test” which now has a generic “-a” or “–pytest-args” option where you can pass additional options as a quoted string. Thanks Trevor Bekolay.

  • simplified internal capturing mechanism and made it more robust against tests or setups changing FD1/FD2, also better integrated now with pytest.pdb() in single tests.

  • improvements to pytest’s own test-suite leakage detection, courtesy of PRs from Marc Abramowitz

  • fix issue492: avoid leak in test_writeorg. Thanks Marc Abramowitz.

  • fix issue493: don’t run tests in doc directory with python setup.py test (use tox -e doctesting for that)

  • fix issue486: better reporting and handling of early conftest loading failures

  • some cleanup and simplification of internal conftest handling.

  • work a bit harder to break reference cycles when catching exceptions. Thanks Jurko Gospodnetic.

  • fix issue443: fix skip examples to use proper comparison. Thanks Alex Groenholm.

  • support nose-style __test__ attribute on modules, classes and functions, including unittest-style Classes. If set to False, the test will not be collected.

  • fix issue512: show “<notset>” for arguments which might not be set in monkeypatch plugin. Improves output in documentation.

  • avoid importing “py.test” (an old alias module for “pytest”)