8.2.0
pytest 8.2.0 (2024-04-27)
Deprecations
-
#12069: A deprecation warning is now raised when implementations of one of the following hooks request a deprecated
py.path.localparameter instead of thepathlib.Pathparameter which replaced it:pytest_ignore_collect{.interpreted-text role="hook"} - thepathparameter - usecollection_pathinstead.pytest_collect_file{.interpreted-text role="hook"} - thepathparameter - usefile_pathinstead.pytest_pycollect_makemodule{.interpreted-text role="hook"} - thepathparameter - usemodule_pathinstead.pytest_report_header{.interpreted-text role="hook"} - thestartdirparameter - usestart_pathinstead.pytest_report_collectionfinish{.interpreted-text role="hook"} - thestartdirparameter - usestart_pathinstead.
The replacement parameters are available since pytest 7.0.0.
The old parameters will be removed in pytest 9.0.0.See
legacy-path-hooks-deprecated{.interpreted-text role="ref"} for more details.
Features
-
#11871: Added support for reading command line arguments from a file using the prefix character
@, like e.g.:pytest @tests.txt. The file must have one argument per line.See
Read arguments from file <args-from-file>{.interpreted-text role="ref"} for details.
Improvements
-
#11523:
pytest.importorskip{.interpreted-text role="func"} will now issue a warning if the module could be found, but raisedImportError{.interpreted-text role="class"} instead ofModuleNotFoundError{.interpreted-text role="class"}.The warning can be suppressed by passing
exc_type=ImportErrortopytest.importorskip{.interpreted-text role="func"}.See
import-or-skip-import-error{.interpreted-text role="ref"} for details. -
#11728: For
unittest-based tests, exceptions during class cleanup (as raised by functions registered withTestCase.addClassCleanup <unittest.TestCase.addClassCleanup>{.interpreted-text role="meth"}) are now reported instead of silently failing. -
#11777: Text is no longer truncated in the
short test summary infosection when-vvis given. -
#12112: Improved namespace packages detection when
consider_namespace_packages{.interpreted-text role="confval"} is enabled, covering more situations (like editable installs). -
#9502: Added
PYTEST_VERSION{.interpreted-text role="envvar"} environment variable which is defined at the start of the pytest session and undefined afterwards. It contains the value ofpytest.__version__, and among other things can be used to easily check if code is running from within a pytest run.
Bug Fixes
-
#12065: Fixed a regression in pytest 8.0.0 where test classes containing
setup_methodand tests using@staticmethodor@classmethodwould crash withAttributeError: 'NoneType' object has no attribute 'setup_method'.Now the
request.instance <pytest.FixtureRequest.instance>{.interpreted-text role="attr"} attribute of tests using@staticmethodand@classmethodis no longerNone, but a fresh instance of the class, like in non-static methods.
Previously it wasNone, and all fixtures of such tests would share a singleself. -
#12135: Fixed issue where fixtures adding their finalizer multiple times to fixtures they request would cause unreliable and non-intuitive teardown ordering in some instances.
-
#12194: Fixed a bug with
--importmode=importliband--doctest-moduleswhere child modules did not appear as attributes in parent modules. -
#1489: Fixed some instances where teardown of higher-scoped fixtures was not happening in the reverse order they were initialized in.