Pytest 3.2.1 (2017-08-08)

Bug Fixes

  • Fixed small terminal glitch when collecting a single test item. (#2579)
  • Correctly consider / as the file separator to automatically mark plugin files for rewrite on Windows. (#2591)
  • Properly escape test names when setting PYTEST_CURRENT_TEST environment variable. (#2644)
  • Fix error on Windows and Python 3.6+ when sys.stdout has been replaced with a stream-like object which does not implement the full io module buffer protocol. In particular this affects pytest-xdist users on the aforementioned platform. (#2666)

Improved Documentation

  • Explicitly document which pytest features work with unittest. (#2626)

Pytest 3.2.0 (2017-07-30)

Deprecations and Removals

  • pytest.approx no longer supports >, >=, < and <= operators to avoid surprising/inconsistent behavior. See the docs for more information. (#2003)
  • All old-style specific behavior in current classes in the pytest's API is considered deprecated at this point and will be removed in a future release. This affects Python 2 users only and in rare situations. (#2147)
  • A deprecation warning is now raised when using marks for parameters in pytest.mark.parametrize. Use pytest.param to apply marks to parameters instead. (#2427)

Features

  • Add support for numpy arrays (and dicts) to approx. (#1994)
  • Now test function objects have a pytestmark attribute containing a list of marks applied directly to the test function, as opposed to marks inherited from parent classes or modules. (#2516)
  • Collection ignores local virtualenvs by default; --collect-in-virtualenv overrides this behavior. (#2518)
  • Allow class methods decorated as @staticmethod to be candidates for collection as a test function. (Only for Python 2.7 and above. Python 2.6 will still ignore static methods.) (#2528)
  • Introduce mark.with_args in order to allow passing functions/classes as sole argument to marks. (#2540)
  • New cache_dir ini option: sets the directory where the contents of the cache plugin are stored. Directory may be relative or absolute path: if relative path, then directory is created relative to rootdir, otherwise it is used as is. Additionally path may contain environment variables which are expanded during runtime. (#2543)
  • Introduce the PYTEST_CURRENT_TEST environment variable that is set with the nodeid and stage (setup, call and teardown) of the test being currently executed. See the documentation for more info. (#2583)
  • Introduced @pytest.mark.filterwarnings mark which allows overwriting the warnings filter on a per test, class or module level. See the docs for more information. (#2598)
  • --last-failed now remembers forever when a test has failed and only forgets it if it passes again. This makes it easy to fix a test suite by selectively running files and fixing tests incrementally. (#2621)
  • New pytest_report_collectionfinish hook which allows plugins to add messages to the terminal reporting after collection has been finished successfully. (#2622)
  • Added support for PEP-415's Exception.__suppress_context__. Now if a raise exception from None is caught by pytest, pytest will no longer chain the context in the test report. The behavior now matches Python's traceback behavior. (#2631)
  • Exceptions raised by pytest.fail, pytest.skip and pytest.xfail now subclass BaseException, making them harder to be caught unintentionally by normal code. (#580)

Bug Fixes

  • Set stdin to a closed PIPE in pytester.py.Testdir.popen() for avoid unwanted interactive pdb (#2023)
  • Add missing encoding attribute to sys.std* streams when using capsys capture mode. (#2375)
  • Fix terminal color changing to black on Windows if colorama is imported in a conftest.py file. (#2510)
  • Fix line number when reporting summary of skipped tests. (#2548)
  • capture: ensure that EncodedFile.name is a string. (#2555)
  • The options --fixtures and --fixtures-per-test will now keep indentation within docstrings. (#2574)
  • doctests line numbers are now reported correctly, fixing pytest-sugar#122. (#2610)
  • Fix non-determinism in order of fixture collection. Adds new dependency (ordereddict) for Python 2.6. (#920)

Improved Documentation

  • Clarify pytest_configure hook call order. (#2539)
  • Extend documentation for testing plugin code with the pytester plugin. (#971)

Trivial/Internal Changes

  • Update help message for --strict to make it clear it only deals with unregistered markers, not warnings. (#2444)
  • Internal code move: move code for pytest.approx/pytest.raises to own files in order to cut down the size of python.py (#2489)
  • Renamed the utility function _pytest.compat._escape_strings to _ascii_escaped to better communicate the function's purpose. (#2533)
  • Improve error message for CollectError with skip/skipif. (#2546)
  • Emit warning about yield tests being deprecated only once per generator. (#2562)
  • Ensure final collected line doesn't include artifacts of previous write. (#2571)
  • Fixed all flake8 errors and warnings. (#2581)
  • Added fix-lint tox environment to run automatic pep8 fixes on the code. (#2582)
  • Turn warnings into errors in pytest's own test suite in order to catch regressions due to deprecations more promptly. (#2588)
  • Show multiple issue links in CHANGELOG entries. (#2620)

Pytest 3.1.3 (2017-07-03)

Bug Fixes

  • Fix decode error in Python 2 for doctests in docstrings. (#2434)
  • Exceptions raised during teardown by finalizers are now suppressed until all finalizers are called, with the initial exception reraised. (#2440)
  • Fix incorrect "collected items" report when specifying tests on the command- line. (#2464)
  • deprecated_call in context-manager form now captures deprecation warnings even if the same warning has already been raised. Also, deprecated_call will always produce the same error message (previously it would produce different messages in context-manager vs. function-call mode). (#2469)
  • Fix issue where paths collected by pytest could have triple leading / characters. (#2475)
  • Fix internal error when trying to detect the start of a recursive traceback. (#2486)

Improved Documentation

  • Explicitly state for which hooks the calls stop after the first non-None result. (#2493)

Trivial/Internal Changes

  • Create invoke tasks for updating the vendored packages. (#2474)
  • Update copyright dates in LICENSE, README.rst and in the documentation. (#2499)

Pytest 3.1.2 (2017-06-08)

Bug Fixes

  • Required options added via pytest_addoption will no longer prevent using --help without passing them. (#1999)
  • Respect python_files in assertion rewriting. (#2121)
  • Fix recursion error detection when frames in the traceback contain objects that can't be compared (like numpy arrays). (#2459)
  • UnicodeWarning is issued from the internal pytest warnings plugin only when the message contains non-ascii unicode (Python 2 only). (#2463)
  • Added a workaround for Python 3.6 WindowsConsoleIO breaking due to Pytests's FDCapture. Other code using console handles might still be affected by the very same issue and might require further workarounds/fixes, i.e. colorama. (#2467)

Improved Documentation

  • Fix internal API links to pluggy objects. (#2331)
  • Make it clear that pytest.xfail stops test execution at the calling point and improve overall flow of the skipping docs. (#810)

Pytest 3.1.1 (2017-05-30)

Bug Fixes

  • pytest warning capture no longer overrides existing warning filters. The previous behaviour would override all filters and caused regressions in test suites which configure warning filters to match their needs. Note that as a side-effect of this is that DeprecationWarning and PendingDeprecationWarning are no longer shown by default. (#2430)
  • Fix issue with non-ascii contents in doctest text files. (#2434)
  • Fix encoding errors for unicode warnings in Python 2. (#2436)
  • pytest.deprecated_call now captures PendingDeprecationWarning in context manager form. (#2441)

Improved Documentation

  • Addition of towncrier for changelog management. (#2390)

3.1.0 (2017-05-22)

New Features

  • The pytest-warnings plugin has been integrated into the core and now pytest automatically captures and displays warnings at the end of the test session.

    Warning

    This feature may disrupt test suites which apply and treat warnings themselves, and can be disabled in your pytest.ini:

    [pytest]
    addopts = -p no:warnings
    

    See the warnings documentation page for more information.

    Thanks @nicoddemus for the PR.

  • Added junit_suite_name ini option to specify root <testsuite> name for JUnit XML reports (#533).

  • Added an ini option doctest_encoding to specify which encoding to use for doctest files. Thanks @wheerd for the PR (#2101).

  • pytest.warns now checks for subclass relationship rather than class equality. Thanks @lesteve for the PR (#2166)

  • pytest.raises now asserts that the error message matches a text or regex with the match keyword argument. Thanks @Kriechi for the PR.

  • pytest.param can be used to declare test parameter sets with marks and test ids. Thanks @RonnyPfannschmidt for the PR.

Changes

  • remove all internal uses of pytest_namespace hooks, this is to prepare the removal of preloadconfig in pytest 4.0 Thanks to @RonnyPfannschmidt for the PR.
  • pytest now warns when a callable ids raises in a parametrized test. Thanks @fogo for the PR.
  • It is now possible to skip test classes from being collected by setting a __test__ attribute to False in the class body (#2007). Thanks to @syre for the report and @lwm for the PR.
  • Change junitxml.py to produce reports that comply with Junitxml schema. If the same test fails with failure in call and then errors in teardown we split testcase element into two, one containing the error and the other the failure. (#2228) Thanks to @kkoukiou for the PR.
  • Testcase reports with a url attribute will now properly write this to junitxml. Thanks @fushi for the PR (#1874).
  • Remove common items from dict comparision output when verbosity=1. Also update the truncation message to make it clearer that pytest truncates all assertion messages if verbosity < 2 (#1512). Thanks @mattduck for the PR
  • --pdbcls no longer implies --pdb. This makes it possible to use addopts=--pdbcls=module.SomeClass on pytest.ini. Thanks @davidszotten for the PR (#1952).
  • fix #2013: turn RecordedWarning into namedtuple, to give it a comprehensible repr while preventing unwarranted modification.
  • fix #2208: ensure a iteration limit for _pytest.compat.get_real_func. Thanks @RonnyPfannschmidt for the report and PR.
  • Hooks are now verified after collection is complete, rather than right after loading installed plugins. This makes it easy to write hooks for plugins which will be loaded during collection, for example using the pytest_plugins special variable (#1821). Thanks @nicoddemus for the PR.
  • Modify pytest_make_parametrize_id() hook to accept argname as an additional parameter. Thanks @unsignedint for the PR.
  • Add venv to the default norecursedirs setting. Thanks @The-Compiler for the PR.
  • PluginManager.import_plugin now accepts unicode plugin names in Python 2. Thanks @reutsharabani for the PR.
  • fix #2308: When using both --lf and --ff, only the last failed tests are run. Thanks @ojii for the PR.
  • Replace minor/patch level version numbers in the documentation with placeholders. This significantly reduces change-noise as different contributors regnerate the documentation on different platforms. Thanks @RonnyPfannschmidt for the PR.
  • fix #2391: consider pytest_plugins on all plugin modules Thanks @RonnyPfannschmidt for the PR.

Bug Fixes

  • Fix AttributeError on sys.stdout.buffer / sys.stderr.buffer while using capsys fixture in python 3. (#1407). Thanks to @asottile.
  • Change capture.py's DontReadFromInput class to throw io.UnsupportedOperation errors rather than ValueErrors in the fileno method (#2276). Thanks @metasyn and @vlad-dragos for the PR.
  • Fix exception formatting while importing modules when the exception message contains non-ascii characters (#2336). Thanks @fabioz for the report and @nicoddemus for the PR.
  • Added documentation related to issue (#1937) Thanks @skylarjhdownes for the PR.
  • Allow collecting files with any file extension as Python modules (#2369). Thanks @Kodiologist for the PR.
  • Show the correct error message when collect "parametrize" func with wrong args (#2383). Thanks @The-Compiler for the report and @robin0371 for the PR.

3.0.7 (2017-03-14)

3.0.6 (2017-01-22)

3.0.5 (2016-12-05)

3.0.4 (2016-11-09)

3.0.3 (2016-09-28)

3.0.2 (2016-09-01)

3.0.1 (2016-08-23)

3.0.0 (2016-08-18)

Incompatible changes

A number of incompatible changes were made in this release, with the intent of removing features deprecated for a long time or change existing behaviors in order to make them less surprising/more useful.

New Features

Changes

Bug Fixes

2.9.2 (2016-05-31)

Bug Fixes

2.9.1 (2016-03-17)

Bug Fixes

2.9.0 (2016-02-29)

New Features

Changes

Bug Fixes

2.8.7 (2016-01-24)

2.8.6 (2016-01-21)

2.8.5 (2015-12-11)

2.8.4 (2015-12-06)

2.8.3 (2015-11-18)

2.8.2 (2015-10-07)

2.8.1 (2015-09-29)

2.8.0 (2015-09-18)

2.7.3 (2015-09-15)

2.7.2 (2015-06-23)

2.7.1 (2015-05-19)

2.7.0 (2015-03-26)

2.6.4 (2014-10-24)

2.6.3 (2014-09-24)

2.6.2 (2014-09-05)

2.6.1 (2014-08-07)

2.6

2.5.2 (2014-01-29)

2.5.1 (2013-12-17)

2.5.0 (2013-12-12)

2.4.2 (2013-10-04)

2.4.1 (2013-10-02)

2.4

known incompatibilities:

new features:

Bug fixes:

2.3.5 (2013-04-30)

2.3.4 (2012-11-20)

2.3.3 (2012-11-06)

2.3.2 (2012-10-25)

2.3.1 (2012-10-20)

2.3.0 (2012-10-19)

2.2.4 (2012-05-22)

2.2.3 (2012-02-05)

2.2.2 (2012-02-05)

2.2.1 (2011-12-16)

2.2.0 (2011-11-18)

2.1.3 (2011-10-18)

2.1.2 (2011-09-24)

2.1.1

2.1.0 (2011-07-09)

2.0.3 (2011-05-11)

2.0.2 (2011-03-09)

2.0.1 (2011-02-07)

2.0.0 (2010-11-25)

1.3.4 (2010-09-14)

1.3.3 (2010-07-30)

1.3.2 (2010-07-08)

New features

Bug fixes

1.3.1 (2010-05-25)

New features

Bug Fixes

1.3.0 (2010-05-05)

1.2.0 (2010-01-18)

1.1.1 (2009-11-24)

1.1.0 (2009-11-05)

1.0.3

1.0.2 (2009-08-27)

1.0.1 (2009-08-19)

1.0.0 (2009-08-04)

1.0.0b9 (2009-07-31)

1.0.0b8 (2009-07-22)

1.0.0b7

1.0.0b3 (2009-06-19)

1.0.0b1

XXX lots of things missing here XXX

0.9.2

0.9.1

This is a fairly complete list of v0.9.1, which can serve as a reference for developers.