pytest 3.6.4 (2018-07-28)

Bug Fixes

  • Invoke pytest using -mpytest so sys.path does not get polluted by packages installed in site-packages. (#742)

Improved Documentation

  • Use smtp_connection instead of smtp in fixtures documentation to avoid possible confusion. (#3592)

Trivial/Internal Changes

  • Remove obsolete __future__ imports. (#2319)
  • Add CITATION to provide information on how to formally cite pytest. (#3402)
  • Replace broken type annotations with type comments. (#3635)
  • Pin pluggy to <0.8. (#3727)

Pytest 3.6.3 (2018-07-04)

Bug Fixes

  • Fix ImportWarning triggered by explicit relative imports in assertion-rewritten package modules. (#3061)
  • Fix error in pytest.approx when dealing with 0-dimension numpy arrays. (#3593)
  • No longer raise ValueError when using the get_marker API. (#3605)
  • Fix problem where log messages with non-ascii characters would not appear in the output log file. (#3630)
  • No longer raise AttributeError when legacy marks can't be stored in functions. (#3631)

Improved Documentation

  • The description above the example for @pytest.mark.skipif now better matches the code. (#3611)

Trivial/Internal Changes

  • Internal refactoring: removed unused CallSpec2tox ._globalid_args attribute and metafunc parameter from CallSpec2.copy(). (#3598)
  • Silence usage of reduce warning in Python 2 (#3609)
  • Fix usage of attr.ib deprecated convert parameter. (#3653)

Pytest 3.6.2 (2018-06-20)

Bug Fixes

  • Fix regression in Node.add_marker by extracting the mark object of a MarkDecorator. (#3555)
  • Warnings without location were reported as None. This is corrected to now report <undetermined location>. (#3563)
  • Continue to call finalizers in the stack when a finalizer in a former scope raises an exception. (#3569)
  • Fix encoding error with print statements in doctests (#3583)

Improved Documentation

  • Add documentation for the --strict flag. (#3549)

Trivial/Internal Changes

  • Update old quotation style to parens in fixture.rst documentation. (#3525)
  • Improve display of hint about --fulltrace with KeyboardInterrupt. (#3545)
  • pytest's testsuite is no longer runnable through python setup.py test -- instead invoke pytest or tox directly. (#3552)
  • Fix typo in documentation (#3567)

Pytest 3.6.1 (2018-06-05)

Bug Fixes

  • Fixed a bug where stdout and stderr were logged twice by junitxml when a test was marked xfail. (#3491)
  • Fix usefixtures mark applyed to unittest tests by correctly instantiating FixtureInfo. (#3498)
  • Fix assertion rewriter compatibility with libraries that monkey patch file objects. (#3503)

Improved Documentation

  • Added a section on how to use fixtures as factories to the fixture documentation. (#3461)

Trivial/Internal Changes

  • Enable caching for pip/pre-commit in order to reduce build time on travis/appveyor. (#3502)
  • Switch pytest to the src/ layout as we already suggested it for good practice - now we implement it as well. (#3513)
  • Fix if in tests to support 3.7.0b5, where a docstring handling in AST got reverted. (#3530)
  • Remove some python2.5 compatibility code. (#3529)

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, or jump over to details about updating existing code to use the new APIs. (#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)
  • Support for Python 3.7's builtin breakpoint() method, see Using the builtin breakpoint function for details. (#3180)
  • monkeypatch now supports a context() function which acts as a context manager which undoes all patching done within the with block. (#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)
  • 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)

Bug Fixes

  • A rare race-condition which might result in corrupted .pyc files on Windows has been hopefully solved. (#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)
  • 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)

Improved Documentation

  • Change documentation copyright year to a range which auto-updates itself each time it is published. (#3303)

Trivial/Internal Changes

  • pytest now depends on the python-atomicwrites library. (#3008)
  • Update all pypi.python.org URLs to pypi.org. (#3431)
  • Detect pytest_ prefixed hooks using the internal plugin manager since pluggy is deprecating the implprefix argument to PluginManager. (#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)

Pytest 3.5.1 (2018-04-23)

Bug Fixes

  • Reset sys.last_type, sys.last_value and sys.last_traceback before each test executes. Those attributes are added by pytest during the test run to aid debugging, but were never reset so they would create a leaking reference to the last failing test's frame which in turn could never be reclaimed by the garbage collector. (#2798)
  • pytest.raises now raises TypeError when receiving an unknown keyword argument. (#3348)
  • pytest.raises now works with exception classes that look like iterables. (#3372)

Improved Documentation

  • Fix typo in caplog fixture documentation, which incorrectly identified certain attributes as methods. (#3406)

Trivial/Internal Changes

  • Added a more indicative error message when parametrizing a function whose argument takes a default value. (#3221)
  • Remove internal _pytest.terminal.flatten function in favor of more_itertools.collapse. (#3330)
  • Import some modules from collections.abc instead of collections as the former modules trigger DeprecationWarning in Python 3.7. (#3339)
  • record_property is no longer experimental, removing the warnings was forgotten. (#3360)
  • Mention in documentation and CLI help that fixtures with leading _ are printed by pytest --fixtures only if the -v option is added. (#3398)

Pytest 3.5.0 (2018-03-21)

Deprecations and Removals

  • record_xml_property fixture is now deprecated in favor of the more generic record_property. (#2770)
  • Defining pytest_plugins is now deprecated in non-top-level conftest.py files, because they "leak" to the entire directory tree. (#3084)

Features

  • New --show-capture command-line option that allows to specify how to display captured output when tests fail: no, stdout, stderr, log or all (the default). (#1478)
  • New --rootdir command-line option to override the rules for discovering the root directory. See customize in the documentation for details. (#1642)
  • Fixtures are now instantiated based on their scopes, with higher-scoped fixtures (such as session) being instantiated first than lower-scoped fixtures (such as function). The relative order of fixtures of the same scope is kept unchanged, based in their declaration order and their dependencies. (#2405)
  • record_xml_property renamed to record_property and is now compatible with xdist, markers and any reporter. record_xml_property name is now deprecated. (#2770)
  • New --nf, --new-first options: run new tests first followed by the rest of the tests, in both cases tests are also sorted by the file modified time, with more recent files coming first. (#3034)
  • New --last-failed-no-failures command-line option that allows to specify the behavior of the cache plugin's `--last-failed feature when no tests failed in the last run (or no cache was found): none or all (the default). (#3139)
  • New --doctest-continue-on-failure command-line option to enable doctests to show multiple failures for each snippet, instead of stopping at the first failure. (#3149)
  • Captured log messages are added to the <system-out> tag in the generated junit xml file if the junit_logging ini option is set to system-out. If the value of this ini option is system-err, the logs are written to <system-err>. The default value for junit_logging is no, meaning captured logs are not written to the output file. (#3156)
  • Allow the logging plugin to handle pytest_runtest_logstart and pytest_runtest_logfinish hooks when live logs are enabled. (#3189)
  • Passing --log-cli-level in the command-line now automatically activates live logging. (#3190)
  • Add command line option --deselect to allow deselection of individual tests at collection time. (#3198)
  • Captured logs are printed before entering pdb. (#3204)
  • Deselected item count is now shown before tests are run, e.g. collected X items / Y deselected. (#3213)
  • The builtin module platform is now available for use in expressions in pytest.mark. (#3236)
  • The short test summary info section now is displayed after tracebacks and warnings in the terminal. (#3255)
  • New --verbosity flag to set verbosity level explicitly. (#3296)
  • pytest.approx now accepts comparing a numpy array with a scalar. (#3312)

Bug Fixes

  • Suppress IOError when closing the temporary file used for capturing streams in Python 2.7. (#2370)
  • Fixed clear() method on caplog fixture which cleared records, but not the text property. (#3297)
  • During test collection, when stdin is not allowed to be read, the DontReadFromStdin object still allow itself to be iterable and resolved to an iterator without crashing. (#3314)

Improved Documentation

Trivial/Internal Changes

  • Change minimum requirement of attrs to 17.4.0. (#3228)
  • Renamed example directories so all tests pass when ran from the base directory. (#3245)
  • Internal mark.py module has been turned into a package. (#3250)
  • pytest now depends on the more-itertools package. (#3265)
  • Added warning when [pytest] section is used in a .cfg file passed with -c (#3268)
  • nodeids can now be passed explicitly to FSCollector and Node constructors. (#3291)
  • Internal refactoring of FormattedExcinfo to use attrs facilities and remove old support code for legacy Python versions. (#3292)
  • Refactoring to unify how verbosity is handled internally. (#3296)
  • Internal refactoring to better integrate with argparse. (#3304)
  • Fix a python example when calling a fixture in doc/en/usage.rst (#3308)

Pytest 3.4.2 (2018-03-04)

Bug Fixes

  • Removed progress information when capture option is no. (#3203)
  • Refactor check of bindir from exists to isdir. (#3241)
  • Fix TypeError issue when using approx with a Decimal value. (#3247)
  • Fix reference cycle generated when using the request fixture. (#3249)
  • [tool:pytest] sections in *.cfg files passed by the -c option are now properly recognized. (#3260)

Improved Documentation

  • Add logging plugin to plugins list. (#3209)

Trivial/Internal Changes

  • Fix minor typo in fixture.rst (#3259)

Pytest 3.4.1 (2018-02-20)

Bug Fixes

  • Move import of doctest.UnexpectedException to top-level to avoid possible errors when using --pdb. (#1810)
  • Added printing of captured stdout/stderr before entering pdb, and improved a test which was giving false negatives about output capturing. (#3052)
  • Fix ordering of tests using parametrized fixtures which can lead to fixtures being created more than necessary. (#3161)
  • Fix bug where logging happening at hooks outside of "test run" hooks would cause an internal error. (#3184)
  • Detect arguments injected by unittest.mock.patch decorator correctly when pypi mock.patch is installed and imported. (#3206)
  • Errors shown when a pytest.raises() with match= fails are now cleaner on what happened: When no exception was raised, the "matching '...'" part got removed as it falsely implies that an exception was raised but it didn't match. When a wrong exception was raised, it's now thrown (like pytest.raised() without match= would) instead of complaining about the unmatched text. (#3222)
  • Fixed output capture handling in doctests on macOS. (#985)

Improved Documentation

  • Add Sphinx parameter docs for match and message args to pytest.raises. (#3202)

Trivial/Internal Changes

  • pytest has changed the publication procedure and is now being published to PyPI directly from Travis. (#3060)
  • Rename ParameterSet._for_parameterize() to _for_parametrize() in order to comply with the naming convention. (#3166)
  • Skip failing pdb/doctest test on mac. (#985)

Pytest 3.4.0 (2018-01-30)

Deprecations and Removals

  • All pytest classes now subclass object for better Python 2/3 compatibility. This should not affect user code except in very rare edge cases. (#2147)

Features

  • Introduce empty_parameter_set_mark ini option to select which mark to apply when @pytest.mark.parametrize is given an empty set of parameters. Valid options are skip (default) and xfail. Note that it is planned to change the default to xfail in future releases as this is considered less error prone. (#2527)
  • Incompatible change: after community feedback the logging functionality has undergone some changes. Please consult the logging documentation for details. (#3013)
  • Console output falls back to "classic" mode when capturing is disabled (-s), otherwise the output gets garbled to the point of being useless. (#3038)
  • New pytest_runtest_logfinish hook which is called when a test item has finished executing, analogous to pytest_runtest_logstart. (#3101)
  • Improve performance when collecting tests using many fixtures. (#3107)
  • New caplog.get_records(when) method which provides access to the captured records for the "setup", "call" and "teardown" testing stages. (#3117)
  • New fixture record_xml_attribute that allows modifying and inserting attributes on the <testcase> xml node in JUnit reports. (#3130)
  • The default cache directory has been renamed from .cache to .pytest_cache after community feedback that the name .cache did not make it clear that it was used by pytest. (#3138)
  • Colorize the levelname column in the live-log output. (#3142)

Bug Fixes

  • Fix hanging pexpect test on MacOS by using flush() instead of wait(). (#2022)
  • Fix restoring Python state after in-process pytest runs with the pytester plugin; this may break tests using multiple inprocess pytest runs if later ones depend on earlier ones leaking global interpreter changes. (#3016)
  • Fix skipping plugin reporting hook when test aborted before plugin setup hook. (#3074)
  • Fix progress percentage reported when tests fail during teardown. (#3088)
  • Incompatible change: -o/--override option no longer eats all the remaining options, which can lead to surprising behavior: for example, pytest -o foo=1 /path/to/test.py would fail because /path/to/test.py would be considered as part of the -o command-line argument. One consequence of this is that now multiple configuration overrides need multiple -o flags: pytest -o foo=1 -o bar=2. (#3103)

Improved Documentation

  • Document hooks (defined with historic=True) which cannot be used with hookwrapper=True. (#2423)
  • Clarify that warning capturing doesn't change the warning filter by default. (#2457)
  • Clarify a possible confusion when using pytest_fixture_setup with fixture functions that return None. (#2698)
  • Fix the wording of a sentence on doctest flags used in pytest. (#3076)
  • Prefer https://*.readthedocs.io over http://*.rtfd.org for links in the documentation. (#3092)
  • Improve readability (wording, grammar) of Getting Started guide (#3131)
  • Added note that calling pytest.main multiple times from the same process is not recommended because of import caching. (#3143)

Trivial/Internal Changes

  • Show a simple and easy error when keyword expressions trigger a syntax error (for example, "-k foo and import" will show an error that you can not use the import keyword in expressions). (#2953)
  • Change parametrized automatic test id generation to use the __name__ attribute of functions instead of the fallback argument name plus counter. (#2976)
  • Replace py.std with stdlib imports. (#3067)
  • Corrected 'you' to 'your' in logging docs. (#3129)

Pytest 3.3.2 (2017-12-25)

Bug Fixes

  • pytester: ignore files used to obtain current user metadata in the fd leak detector. (#2784)
  • Fix memory leak where objects returned by fixtures were never destructed by the garbage collector. (#2981)
  • Fix conversion of pyargs to filename to not convert symlinks on Python 2. (#2985)
  • PYTEST_DONT_REWRITE is now checked for plugins too rather than only for test modules. (#2995)

Improved Documentation

  • Add clarifying note about behavior of multiple parametrized arguments (#3001)

Trivial/Internal Changes

  • Code cleanup. (#3015, #3021)
  • Clean up code by replacing imports and references of _ast to ast. (#3018)

Pytest 3.3.1 (2017-12-05)

Bug Fixes

  • Fix issue about -p no:<plugin> having no effect. (#2920)
  • Fix regression with warnings that contained non-strings in their arguments in Python 2. (#2956)
  • Always escape null bytes when setting PYTEST_CURRENT_TEST. (#2957)
  • Fix ZeroDivisionError when using the testmon plugin when no tests were actually collected. (#2971)
  • Bring back TerminalReporter.writer as an alias to TerminalReporter._tw. This alias was removed by accident in the 3.3.0 release. (#2984)
  • The pytest-capturelog plugin is now also blacklisted, avoiding errors when running pytest with it still installed. (#3004)

Improved Documentation

  • Fix broken link to plugin pytest-localserver. (#2963)

Trivial/Internal Changes

  • Update github "bugs" link in CONTRIBUTING.rst (#2949)

Pytest 3.3.0 (2017-11-23)

Deprecations and Removals

  • Pytest no longer supports Python 2.6 and 3.3. Those Python versions are EOL for some time now and incur maintenance and compatibility costs on the pytest core team, and following up with the rest of the community we decided that they will no longer be supported starting on this version. Users which still require those versions should pin pytest to <3.3. (#2812)
  • Remove internal _preloadplugins() function. This removal is part of the pytest_namespace() hook deprecation. (#2636)
  • Internally change CallSpec2 to have a list of marks instead of a broken mapping of keywords. This removes the keywords attribute of the internal CallSpec2 class. (#2672)
  • Remove ParameterSet.deprecated_arg_dict - its not a public api and the lack of the underscore was a naming error. (#2675)
  • Remove the internal multi-typed attribute Node._evalskip and replace it with the boolean Node._skipped_by_mark. (#2767)
  • The params list passed to pytest.fixture is now for all effects considered immutable and frozen at the moment of the pytest.fixture call. Previously the list could be changed before the first invocation of the fixture allowing for a form of dynamic parametrization (for example, updated from command-line options), but this was an unwanted implementation detail which complicated the internals and prevented some internal cleanup. See issue #2959 for details and a recommended workaround.

Features

  • pytest_fixture_post_finalizer hook can now receive a request argument. (#2124)
  • Replace the old introspection code in compat.py that determines the available arguments of fixtures with inspect.signature on Python 3 and funcsigs.signature on Python 2. This should respect __signature__ declarations on functions. (#2267)
  • Report tests with global pytestmark variable only once. (#2549)
  • Now pytest displays the total progress percentage while running tests. The previous output style can be set by configuring the console_output_style setting to classic. (#2657)
  • Match warns signature to raises by adding match keyword. (#2708)
  • Pytest now captures and displays output from the standard logging module. The user can control the logging level to be captured by specifying options in pytest.ini, the command line and also during individual tests using markers. Also, a caplog fixture is available that enables users to test the captured log during specific tests (similar to capsys for example). For more information, please see the logging docs. This feature was introduced by merging the popular pytest-catchlog plugin, thanks to Thomas Hisch. Be advised that during the merging the backward compatibility interface with the defunct pytest-capturelog has been dropped. (#2794)
  • Add allow_module_level kwarg to pytest.skip(), enabling to skip the whole module. (#2808)
  • Allow setting file_or_dir, -c, and -o in PYTEST_ADDOPTS. (#2824)
  • Return stdout/stderr capture results as a namedtuple, so out and err can be accessed by attribute. (#2879)
  • Add capfdbinary, a version of capfd which returns bytes from readouterr(). (#2923)
  • Add capsysbinary a version of capsys which returns bytes from readouterr(). (#2934)
  • Implement feature to skip setup.py files when run with --doctest-modules. (#502)

Bug Fixes

  • Resume output capturing after capsys/capfd.disabled() context manager. (#1993)
  • pytest_fixture_setup and pytest_fixture_post_finalizer hooks are now called for all conftest.py files. (#2124)
  • If an exception happens while loading a plugin, pytest no longer hides the original traceback. In Python 2 it will show the original traceback with a new message that explains in which plugin. In Python 3 it will show 2 canonized exceptions, the original exception while loading the plugin in addition to an exception that pytest throws about loading a plugin. (#2491)
  • capsys and capfd can now be used by other fixtures. (#2709)
  • Internal pytester plugin properly encodes bytes arguments to utf-8. (#2738)
  • testdir now uses use the same method used by tmpdir to create its temporary directory. This changes the final structure of the testdir directory slightly, but should not affect usage in normal scenarios and avoids a number of potential problems. (#2751)
  • Pytest no longer complains about warnings with unicode messages being non-ascii compatible even for ascii-compatible messages. As a result of this, warnings with unicode messages are converted first to an ascii representation for safety. (#2809)
  • Change return value of pytest command when --maxfail is reached from 2 (interrupted) to 1 (failed). (#2845)
  • Fix issue in assertion rewriting which could lead it to rewrite modules which should not be rewritten. (#2939)
  • Handle marks without description in pytest.ini. (#2942)

Trivial/Internal Changes

  • pytest now depends on attrs for internal structures to ease code maintainability. (#2641)
  • Refactored internal Python 2/3 compatibility code to use six. (#2642)
  • Stop vendoring pluggy - we're missing out on its latest changes for not much benefit (#2719)
  • Internal refactor: simplify ascii string escaping by using the backslashreplace error handler in newer Python 3 versions. (#2734)
  • Remove unnecessary mark evaluator in unittest plugin (#2767)
  • Calls to Metafunc.addcall now emit a deprecation warning. This function is scheduled to be removed in pytest-4.0. (#2876)
  • Internal move of the parameterset extraction to a more maintainable place. (#2877)
  • Internal refactoring to simplify scope node lookup. (#2910)
  • Configure pytest to prevent pip from installing pytest in unsupported Python versions. (#2922)

Pytest 3.2.5 (2017-11-15)

Bug Fixes

  • Remove py<1.5 restriction from pytest as this can cause version conflicts in some installations. (#2926)

Pytest 3.2.4 (2017-11-13)

Bug Fixes

  • Fix the bug where running with --pyargs will result in items with empty parent.nodeid if run from a different root directory. (#2775)
  • Fix issue with @pytest.parametrize if argnames was specified as keyword arguments. (#2819)
  • Strip whitespace from marker names when reading them from INI config. (#2856)
  • Show full context of doctest source in the pytest output, if the line number of failed example in the docstring is < 9. (#2882)
  • Match fixture paths against actual path segments in order to avoid matching folders which share a prefix. (#2836)

Improved Documentation

  • Introduce a dedicated section about conftest.py. (#1505)
  • Explicitly mention xpass in the documentation of xfail. (#1997)
  • Append example for pytest.param in the example/parametrize document. (#2658)
  • Clarify language of proposal for fixtures parameters (#2893)
  • List python 3.6 in the documented supported versions in the getting started document. (#2903)
  • Clarify the documentation of available fixture scopes. (#538)
  • Add documentation about the python -m pytest invocation adding the current directory to sys.path. (#911)

Pytest 3.2.3 (2017-10-03)

Bug Fixes

  • Fix crash in tab completion when no prefix is given. (#2748)
  • The equality checking function (__eq__) of MarkDecorator returns False if one object is not an instance of MarkDecorator. (#2758)
  • When running pytest --fixtures-per-test: don't crash if an item has no _fixtureinfo attribute (e.g. doctests) (#2788)

Improved Documentation

  • In help text of -k option, add example of using not to not select certain tests whose names match the provided expression. (#1442)
  • Add note in parametrize.rst about calling metafunc.parametrize multiple times. (#1548)

Trivial/Internal Changes

  • Set xfail_strict=True in pytest's own test suite to catch expected failures as soon as they start to pass. (#2722)
  • Fix typo in example of passing a callable to markers (in example/markers.rst) (#2765)

Pytest 3.2.2 (2017-09-06)

Bug Fixes

  • Calling the deprecated request.getfuncargvalue() now shows the source of the call. (#2681)
  • Allow tests declared as @staticmethod to use fixtures. (#2699)
  • Fixed edge-case during collection: attributes which raised pytest.fail when accessed would abort the entire collection. (#2707)
  • Fix ReprFuncArgs with mixed unicode and UTF-8 args. (#2731)

Improved Documentation

  • In examples on working with custom markers, add examples demonstrating the usage of pytest.mark.MARKER_NAME.with_args in comparison with pytest.mark.MARKER_NAME.__call__ (#2604)
  • In one of the simple examples, use pytest_collection_modifyitems() to skip tests based on a command-line option, allowing its sharing while preventing a user error when acessing pytest.config before the argument parsing. (#2653)

Trivial/Internal Changes

  • Fixed minor error in 'Good Practices/Manual Integration' code snippet. (#2691)
  • Fixed typo in goodpractices.rst. (#2721)
  • Improve user guidance regarding --resultlog deprecation. (#2739)

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 approx 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 comparison 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 an 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.