beeware / briefcase

Tools to support converting a Python project into a standalone native application.
https://briefcase.readthedocs.io/
BSD 3-Clause "New" or "Revised" License
2.48k stars 353 forks source link

Bump pytest from 8.1.1 to 8.2.0 #1755

Closed dependabot[bot] closed 1 month ago

dependabot[bot] commented 2 months ago

Bumps pytest from 8.1.1 to 8.2.0.

Release notes

Sourced from pytest's releases.

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.local parameter instead of the pathlib.Path parameter which replaced it:

    • pytest_ignore_collect{.interpreted-text role="hook"} - the path parameter - use collection_path instead.
    • pytest_collect_file{.interpreted-text role="hook"} - the path parameter - use file_path instead.
    • pytest_pycollect_makemodule{.interpreted-text role="hook"} - the path parameter - use module_path instead.
    • pytest_report_header{.interpreted-text role="hook"} - the startdir parameter - use start_path instead.
    • pytest_report_collectionfinish{.interpreted-text role="hook"} - the startdir parameter - use start_path instead.

    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 raised ImportError{.interpreted-text role="class"} instead of ModuleNotFoundError{.interpreted-text role="class"}.

    The warning can be suppressed by passing exc_type=ImportError to pytest.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 with TestCase.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 info section when -vv is 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 of pytest.__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_method and tests using @staticmethod or @classmethod would crash with AttributeError: 'NoneType' object has no attribute 'setup_method'.

    Now the request.instance <pytest.FixtureRequest.instance>{.interpreted-text role="attr"} attribute of tests using @staticmethod and @classmethod is no longer None, but a fresh instance of the class, like in non-static methods.

... (truncated)

Commits
  • 6bd3f31 Tweak changelog for 8.2.0
  • 9b6219b Prepare release version 8.2.0
  • 835765c Merge pull request #12130 from bluetech/fixtures-inline
  • 7e7503c unittest: report class cleanup exceptions (#12250)
  • 882c4da fixtures: inline fail_fixturefunc
  • 2e8fb9f fixtures: extract a _check_fixturedef method
  • acf2971 fixtures: inline _getnextfixturedef into _get_active_fixturedef
  • 3c77aec fixtures: move "request" check early
  • d217d68 fixtures: inline _compute_fixture_value
  • 530be28 fixtures: use early return in _get_active_fixturedef
  • Additional commits viewable in compare view


Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
freakboy3742 commented 2 months ago

Not sure what the issue is with Ubuntu + Python3.13, but I'm hoping it's a temporary issue. Skipping this pytest update in the hope the next minor fixes it.

@dependabot ignore this minor version

dependabot[bot] commented 2 months ago

OK, I won't notify you about version 8.2.x again, unless you re-open this PR.

rmartin16 commented 2 months ago

FWIW, I played around with pytest 8.2.0 a bit.

First, the test that triggers the error is different as well as the traceback....but still consistent.

Second, if I use the command below to run the tests....the error doesn't happen...

tox -e py-cov --installpkg dist/briefcase-*.whl -- -vv --color yes \
    tests/bootstraps/ \
    tests/commands/ \
    tests/config/ \
    tests/console/ \
    tests/integrations/ \
    tests/platforms/ \
    tests/test_cmdline.py \
    tests/test_mainline.py

but running tox -e py-cov --installpkg dist/briefcase-*.whl -- -vv --color yes tests/ still fails...

At any rate, I'm not really any closer to understanding the issue...

rmartin16 commented 2 months ago

Another thought came to to mind....what if I run tox -e py instead of tox -e py-cov?

Well, turning off coverage for the tests removed the error in CI....

One of the causes of a PytestUnraisableExceptionWarning is a thread exiting with an exception....maybe coverage.py is doing something weird and that's triggering pytest....albeit only in CI...

freakboy3742 commented 2 months ago

Ok - that's an interesting data point. Coverage does involve opening files, and there's a binary module implementing some of that, so it's at least conceivable that there is some weird interaction going on here.

rmartin16 commented 2 months ago

Because I can't help myself.....I've tracked this down a little further.

With a bit of debug code, I've confirmed that the ResourceWarning for /dev/null is, in fact, the "unraiseable exception"....however, it is not for Briefcase's file handle for /dev/null.

Adding an audit hook for opening /dev/null, I see it opened a few times....notably by coverage.py.

As another twist, this only happens when pytest-xdist==3.6.1 is installed; it doesn't happen for pytest-xdist==3.5.0. The primary change for 3.6.1 was ensuring workers run tests in the main thread by updating the execution model of the workers.

So....the coverage.py file handle for /dev/null is getting in to a forked process from pytest-xdist and when that process exits....a ResourceWarning is getting thrown.....idk....a lotta speculation here...

rmartin16 commented 1 month ago

@dependabot reopen

dependabot[bot] commented 1 month ago

Superseded by #1817.