Merge branch 'pytest-dev:main' into main

This commit is contained in:
Shekhar verma 2024-04-26 12:30:40 +05:30 committed by GitHub
commit a55abeb053
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
18 changed files with 402 additions and 97 deletions

View File

@ -46,7 +46,7 @@ jobs:
run: python scripts/update-plugin-list.py
- name: Create Pull Request
uses: peter-evans/create-pull-request@c55203cfde3e5c11a452d352b4393e68b85b4533
uses: peter-evans/create-pull-request@9153d834b60caba6d51c9b9510b087acf9f33f83
with:
commit-message: '[automated] Update plugin list'
author: 'pytest bot <pytestbot@users.noreply.github.com>'

View File

@ -1,6 +1,6 @@
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: "v0.3.7"
rev: "v0.4.1"
hooks:
- id: ruff
args: ["--fix"]
@ -34,7 +34,7 @@ repos:
additional_dependencies:
- iniconfig>=1.1.0
- attrs>=19.2.0
- pluggy>=1.4.0
- pluggy>=1.5.0
- packaging
- tomli
- types-pkg_resources
@ -43,7 +43,7 @@ repos:
# on <3.11
- exceptiongroup>=1.0.0rc8
- repo: https://github.com/tox-dev/pyproject-fmt
rev: "1.7.0"
rev: "1.8.0"
hooks:
- id: pyproject-fmt
# https://pyproject-fmt.readthedocs.io/en/latest/#calculating-max-supported-python-version

View File

@ -321,6 +321,7 @@ Pierre Sassoulas
Pieter Mulder
Piotr Banaszkiewicz
Piotr Helm
Poulami Sau
Prakhar Gurunani
Prashant Anand
Prashant Sharma

View File

@ -0,0 +1,12 @@
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:
- :hook:`pytest_ignore_collect` - the ``path`` parameter - use ``collection_path`` instead.
- :hook:`pytest_collect_file` - the ``path`` parameter - use ``file_path`` instead.
- :hook:`pytest_pycollect_makemodule` - the ``path`` parameter - use ``module_path`` instead.
- :hook:`pytest_report_header` - the ``startdir`` parameter - use ``start_path`` instead.
- :hook:`pytest_report_collectionfinish` - 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 :ref:`legacy-path-hooks-deprecated` for more details.

View File

@ -0,0 +1 @@
``pluggy>=1.5.0`` is now required.

View File

@ -0,0 +1 @@
Fixed attribute error in pytest.approx for types implicitly convertible to numpy arrays by converting other_side to a numpy array so that np_array_shape != other_side.shape can be properly checked.

View File

@ -0,0 +1 @@
Fixed a bug with ``--importmode=importlib`` and ``--doctest-modules`` where child modules did not appear as attributes in parent modules.

View File

@ -5,7 +5,8 @@
- `Professional Testing with Python <https://python-academy.com/courses/python_course_testing.html>`_, via `Python Academy <https://www.python-academy.com/>`_ (3 day in-depth training):
* **June 11th to 13th 2024**, Remote
* **March 4th to 6th 2025**, Leipzig, Germany / Remote
- `pytest development sprint <https://github.com/pytest-dev/pytest/discussions/11655>`_, June 2024 (`date poll <https://nuudel.digitalcourage.de/2tEsEpRcwMNcAXVO>`_)
- `pytest development sprint <https://github.com/pytest-dev/pytest/discussions/11655>`_, **June 17th -- 22nd 2024**
- pytest tips and tricks for a better testsuite, `Europython 2024 <https://ep2024.europython.eu/>`_, **July 8th -- 14th 2024** (3h), Prague
Also see :doc:`previous talks and blogposts <talks>`.

View File

@ -27,7 +27,7 @@ please refer to `the update script <https://github.com/pytest-dev/pytest/blob/ma
creating a PDF, because otherwise the table gets far too wide for the
page.
This list contains 1443 plugins.
This list contains 1448 plugins.
.. only:: not latex
@ -145,6 +145,7 @@ This list contains 1443 plugins.
:pypi:`pytest-bdd-wrappers` Feb 11, 2020 2 - Pre-Alpha N/A
:pypi:`pytest-beakerlib` A pytest plugin that reports test results to the BeakerLib framework Mar 17, 2017 5 - Production/Stable pytest
:pypi:`pytest-beartype` Pytest plugin to run your tests with beartype checking enabled. Jan 25, 2024 N/A pytest
:pypi:`pytest-bec-e2e` BEC pytest plugin for end-to-end tests Apr 19, 2024 3 - Alpha pytest
:pypi:`pytest-beds` Fixtures for testing Google Appengine (GAE) apps Jun 07, 2016 4 - Beta N/A
:pypi:`pytest-beeprint` use icdiff for better error messages in pytest assertions Jul 04, 2023 4 - Beta N/A
:pypi:`pytest-bench` Benchmark utility that plugs into pytest. Jul 21, 2014 3 - Alpha N/A
@ -217,7 +218,7 @@ This list contains 1443 plugins.
:pypi:`pytest-checklist` Pytest plugin to track and report unit/function coverage. Mar 12, 2024 N/A N/A
:pypi:`pytest-check-mk` pytest plugin to test Check_MK checks Nov 19, 2015 4 - Beta pytest
:pypi:`pytest-check-requirements` A package to prevent Dependency Confusion attacks against Yandex. Feb 20, 2024 N/A N/A
:pypi:`pytest-ch-framework` My pytest framework Mar 13, 2024 N/A pytest ==8.0.1
:pypi:`pytest-ch-framework` My pytest framework Apr 17, 2024 N/A pytest==8.0.1
:pypi:`pytest-chic-report` A pytest plugin to send a report and printing summary of tests. Jan 31, 2023 5 - Production/Stable N/A
:pypi:`pytest-choose` Provide the pytest with the ability to collect use cases based on rules in text files Feb 04, 2024 N/A pytest >=7.0.0
:pypi:`pytest-chunks` Run only a chunk of your test suite Jul 05, 2022 N/A pytest (>=6.0.0)
@ -230,6 +231,7 @@ This list contains 1443 plugins.
:pypi:`pytest-cldf` Easy quality control for CLDF datasets using pytest Nov 07, 2022 N/A pytest (>=3.6)
:pypi:`pytest_cleanup` Automated, comprehensive and well-organised pytest test cases. Jan 28, 2020 N/A N/A
:pypi:`pytest-cleanuptotal` A cleanup plugin for pytest Mar 19, 2024 5 - Production/Stable N/A
:pypi:`pytest-clerk` A set of pytest fixtures to help with integration testing with Clerk. Apr 19, 2024 N/A pytest<9.0.0,>=8.0.0
:pypi:`pytest-click` Pytest plugin for Click Feb 11, 2022 5 - Production/Stable pytest (>=5.0)
:pypi:`pytest-cli-fixtures` Automatically register fixtures for custom CLI arguments Jul 28, 2022 N/A pytest (~=7.0)
:pypi:`pytest-clld` Jul 06, 2022 N/A pytest (>=3.6)
@ -274,7 +276,7 @@ This list contains 1443 plugins.
:pypi:`pytest-cover` Pytest plugin for measuring coverage. Forked from \`pytest-cov\`. Aug 01, 2015 5 - Production/Stable N/A
:pypi:`pytest-coverage` Jun 17, 2015 N/A N/A
:pypi:`pytest-coverage-context` Coverage dynamic context support for PyTest, including sub-processes Jun 28, 2023 4 - Beta N/A
:pypi:`pytest-coveragemarkers` Using pytest markers to track functional coverage and filtering of tests Nov 29, 2022 N/A pytest (>=7.1.2,<8.0.0)
:pypi:`pytest-coveragemarkers` Using pytest markers to track functional coverage and filtering of tests Apr 15, 2024 N/A pytest<8.0.0,>=7.1.2
:pypi:`pytest-cov-exclude` Pytest plugin for excluding tests based on coverage data Apr 29, 2016 4 - Beta pytest (>=2.8.0,<2.9.0); extra == 'dev'
:pypi:`pytest_covid` Too many faillure, less tests. Jun 24, 2020 N/A N/A
:pypi:`pytest-cpp` Use pytest's runner to discover and execute C++ tests Nov 01, 2023 5 - Production/Stable pytest >=7.0
@ -299,8 +301,9 @@ This list contains 1443 plugins.
:pypi:`pytest-cython-collect` Jun 17, 2022 N/A pytest
:pypi:`pytest-darker` A pytest plugin for checking of modified code using Darker Feb 25, 2024 N/A pytest <7,>=6.0.1
:pypi:`pytest-dash` pytest fixtures to run dash applications. Mar 18, 2019 N/A N/A
:pypi:`pytest-dashboard` Apr 18, 2024 N/A pytest<8.0.0,>=7.4.3
:pypi:`pytest-data` Useful functions for managing data for pytest fixtures Nov 01, 2016 5 - Production/Stable N/A
:pypi:`pytest-databases` Reusable database fixtures for any and all databases. Apr 10, 2024 4 - Beta pytest
:pypi:`pytest-databases` Reusable database fixtures for any and all databases. Apr 19, 2024 4 - Beta pytest
:pypi:`pytest-databricks` Pytest plugin for remote Databricks notebooks testing Jul 29, 2020 N/A pytest
:pypi:`pytest-datadir` pytest plugin for test data directories and files Oct 03, 2023 5 - Production/Stable pytest >=5.0
:pypi:`pytest-datadir-mgr` Manager for test data: downloads, artifact caching, and a tmpdir context. Apr 06, 2023 5 - Production/Stable pytest (>=7.1)
@ -465,7 +468,7 @@ This list contains 1443 plugins.
:pypi:`pytest-ethereum` pytest-ethereum: Pytest library for ethereum projects. Jun 24, 2019 3 - Alpha pytest (==3.3.2); extra == 'dev'
:pypi:`pytest-eucalyptus` Pytest Plugin for BDD Jun 28, 2022 N/A pytest (>=4.2.0)
:pypi:`pytest-eventlet` Applies eventlet monkey-patch as a pytest plugin. Oct 04, 2021 N/A pytest ; extra == 'dev'
:pypi:`pytest-evm` The testing package containing tools to test Web3-based projects Jan 24, 2024 4 - Beta pytest (>=7.4.3,<8.0.0)
:pypi:`pytest-evm` The testing package containing tools to test Web3-based projects Apr 20, 2024 4 - Beta pytest<9.0.0,>=8.1.1
:pypi:`pytest_exact_fixtures` Parse queries in Lucene and Elasticsearch syntaxes Feb 04, 2019 N/A N/A
:pypi:`pytest-examples` Pytest plugin for testing examples in docstrings and markdown files. Jul 11, 2023 4 - Beta pytest>=7
:pypi:`pytest-exasol-itde` Feb 15, 2024 N/A pytest (>=7,<9)
@ -612,7 +615,7 @@ This list contains 1443 plugins.
:pypi:`pytest-helpers-namespace` Pytest Helpers Namespace Plugin Dec 29, 2021 5 - Production/Stable pytest (>=6.0.0)
:pypi:`pytest-henry` Aug 29, 2023 N/A N/A
:pypi:`pytest-hidecaptured` Hide captured output May 04, 2018 4 - Beta pytest (>=2.8.5)
:pypi:`pytest-himark` A plugin that reads a config.json file in your test root directory, searches the 'markers' key, lists the markers declared as 'true' as enabled markers and automatically adds -m option to the command line with an OR on the enabled markers. Apr 07, 2024 4 - Beta pytest>=6.2.0
:pypi:`pytest-himark` A plugin that will filter pytest's test collection using a json file. It will read a json file provided with a --json argument in pytest command line (or in pytest.ini), search the markers key and automatically add -m option to the command line for filtering out the tests marked with disabled markers. Apr 14, 2024 4 - Beta pytest>=6.2.0
:pypi:`pytest-historic` Custom report to display pytest historical execution records Apr 08, 2020 N/A pytest
:pypi:`pytest-historic-hook` Custom listener to store execution results into MYSQL DB, which is used for pytest-historic report Apr 08, 2020 N/A pytest
:pypi:`pytest-history` Pytest plugin to keep a history of your pytest runs Jan 14, 2024 N/A pytest (>=7.4.3,<8.0.0)
@ -621,7 +624,7 @@ This list contains 1443 plugins.
:pypi:`pytest-homeassistant-custom-component` Experimental package to automatically extract test plugins for Home Assistant custom components Apr 13, 2024 3 - Alpha pytest==8.1.1
:pypi:`pytest-honey` A simple plugin to use with pytest Jan 07, 2022 4 - Beta pytest (>=3.5.0)
:pypi:`pytest-honors` Report on tests that honor constraints, and guard against regressions Mar 06, 2020 4 - Beta N/A
:pypi:`pytest-hot-reloading` Jan 06, 2024 N/A N/A
:pypi:`pytest-hot-reloading` Apr 18, 2024 N/A N/A
:pypi:`pytest-hot-test` A plugin that tracks test changes Dec 10, 2022 4 - Beta pytest (>=3.5.0)
:pypi:`pytest-houdini` pytest plugin for testing code in Houdini. Feb 09, 2024 N/A pytest
:pypi:`pytest-hoverfly` Simplify working with Hoverfly from pytest Jan 30, 2023 N/A pytest (>=5.0)
@ -666,11 +669,11 @@ This list contains 1443 plugins.
:pypi:`pytest-informative-node` display more node ininformation. Apr 25, 2019 4 - Beta N/A
:pypi:`pytest-infrastructure` pytest stack validation prior to testing executing Apr 12, 2020 4 - Beta N/A
:pypi:`pytest-ini` Reuse pytest.ini to store env variables Apr 26, 2022 N/A N/A
:pypi:`pytest-initry` Plugin for sending automation test data from Pytest to the initry Apr 09, 2024 N/A pytest<9.0.0,>=8.1.1
:pypi:`pytest-initry` Plugin for sending automation test data from Pytest to the initry Apr 14, 2024 N/A pytest<9.0.0,>=8.1.1
:pypi:`pytest-inline` A pytest plugin for writing inline tests. Oct 19, 2023 4 - Beta pytest >=7.0.0
:pypi:`pytest-inmanta` A py.test plugin providing fixtures to simplify inmanta modules testing. Dec 13, 2023 5 - Production/Stable pytest
:pypi:`pytest-inmanta-extensions` Inmanta tests package Apr 02, 2024 5 - Production/Stable N/A
:pypi:`pytest-inmanta-lsm` Common fixtures for inmanta LSM related modules Feb 20, 2024 5 - Production/Stable N/A
:pypi:`pytest-inmanta-lsm` Common fixtures for inmanta LSM related modules Apr 15, 2024 5 - Production/Stable N/A
:pypi:`pytest-inmanta-yang` Common fixtures used in inmanta yang related modules Feb 22, 2024 4 - Beta pytest
:pypi:`pytest-Inomaly` A simple image diff plugin for pytest Feb 13, 2018 4 - Beta N/A
:pypi:`pytest-in-robotframework` The extension enables easy execution of pytest tests within the Robot Framework environment. Mar 02, 2024 N/A pytest
@ -710,7 +713,7 @@ This list contains 1443 plugins.
:pypi:`pytest-json-report` A pytest plugin to report test results as JSON files Mar 15, 2022 4 - Beta pytest (>=3.8.0)
:pypi:`pytest-json-report-wip` A pytest plugin to report test results as JSON files Oct 28, 2023 4 - Beta pytest >=3.8.0
:pypi:`pytest-jsonschema` A pytest plugin to perform JSONSchema validations Mar 27, 2024 4 - Beta pytest>=6.2.0
:pypi:`pytest-jtr` pytest plugin supporting json test report output Nov 29, 2022 N/A pytest (>=7.1.2,<8.0.0)
:pypi:`pytest-jtr` pytest plugin supporting json test report output Apr 15, 2024 N/A pytest<8.0.0,>=7.1.2
:pypi:`pytest-jupyter` A pytest plugin for testing Jupyter libraries and extensions. Apr 04, 2024 4 - Beta pytest>=7.0
:pypi:`pytest-jupyterhub` A reusable JupyterHub pytest plugin Apr 25, 2023 5 - Production/Stable pytest
:pypi:`pytest-kafka` Zookeeper, Kafka server, and Kafka consumer fixtures for Pytest Jun 14, 2023 N/A pytest
@ -794,7 +797,7 @@ This list contains 1443 plugins.
:pypi:`pytest-meilisearch` Pytest helpers for testing projects using Meilisearch Feb 15, 2024 N/A pytest (>=7.4.3)
:pypi:`pytest-memlog` Log memory usage during tests May 03, 2023 N/A pytest (>=7.3.0,<8.0.0)
:pypi:`pytest-memprof` Estimates memory consumption of test functions Mar 29, 2019 4 - Beta N/A
:pypi:`pytest-memray` A simple plugin to use with pytest Aug 23, 2023 N/A pytest>=7.2
:pypi:`pytest-memray` A simple plugin to use with pytest Apr 18, 2024 N/A pytest>=7.2
:pypi:`pytest-menu` A pytest plugin for console based interactive test selection just after the collection phase Oct 04, 2017 3 - Alpha pytest (>=2.4.2)
:pypi:`pytest-mercurial` pytest plugin to write integration tests for projects using Mercurial Python internals Nov 21, 2020 1 - Planning N/A
:pypi:`pytest-mesh` pytest_mesh插件 Aug 05, 2022 N/A pytest (==7.1.2)
@ -806,7 +809,7 @@ This list contains 1443 plugins.
:pypi:`pytest-mimesis` Mimesis integration with the pytest test runner Mar 21, 2020 5 - Production/Stable pytest (>=4.2)
:pypi:`pytest-minecraft` A pytest plugin for running tests against Minecraft releases Apr 06, 2022 N/A pytest (>=6.0.1)
:pypi:`pytest-mini` A plugin to test mp Feb 06, 2023 N/A pytest (>=7.2.0,<8.0.0)
:pypi:`pytest-minio-mock` A pytest plugin for mocking Minio S3 interactions Jan 04, 2024 N/A pytest >=5.0.0
:pypi:`pytest-minio-mock` A pytest plugin for mocking Minio S3 interactions Apr 15, 2024 N/A pytest>=5.0.0
:pypi:`pytest-missing-fixtures` Pytest plugin that creates missing fixtures Oct 14, 2020 4 - Beta pytest (>=3.5.0)
:pypi:`pytest-mitmproxy` pytest plugin for mitmproxy tests Mar 07, 2024 N/A pytest >=7.0
:pypi:`pytest-ml` Test your machine learning! May 04, 2019 4 - Beta N/A
@ -855,6 +858,7 @@ This list contains 1443 plugins.
:pypi:`pytest-ndb` pytest notebook debugger Oct 15, 2023 N/A pytest
:pypi:`pytest-needle` pytest plugin for visual testing websites using selenium Dec 10, 2018 4 - Beta pytest (<5.0.0,>=3.0.0)
:pypi:`pytest-neo` pytest-neo is a plugin for pytest that shows tests like screen of Matrix. Jan 08, 2022 3 - Alpha pytest (>=6.2.0)
:pypi:`pytest-neos` Pytest plugin for neos Apr 15, 2024 1 - Planning N/A
:pypi:`pytest-netdut` "Automated software testing for switches using pytest" Mar 07, 2024 N/A pytest <7.3,>=3.5.0
:pypi:`pytest-network` A simple plugin to disable network on socket level. May 07, 2020 N/A N/A
:pypi:`pytest-network-endpoints` Network endpoints plugin for pytest Mar 06, 2022 N/A pytest
@ -1152,7 +1156,7 @@ This list contains 1443 plugins.
:pypi:`pytest-sanity` Dec 07, 2020 N/A N/A
:pypi:`pytest-sa-pg` May 14, 2019 N/A N/A
:pypi:`pytest_sauce` pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs Jul 14, 2014 3 - Alpha N/A
:pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Apr 11, 2024 5 - Production/Stable N/A
:pypi:`pytest-sbase` A complete web automation framework for end-to-end testing. Apr 14, 2024 5 - Production/Stable N/A
:pypi:`pytest-scenario` pytest plugin for test scenarios Feb 06, 2017 3 - Alpha N/A
:pypi:`pytest-schedule` The job of test scheduling for humans. Jan 07, 2023 5 - Production/Stable N/A
:pypi:`pytest-schema` 👍 Validate return values against a schema-like object in testing Feb 16, 2024 5 - Production/Stable pytest >=3.5.0
@ -1161,7 +1165,7 @@ This list contains 1443 plugins.
:pypi:`pytest-select` A pytest plugin which allows to (de-)select tests from a file. Jan 18, 2019 3 - Alpha pytest (>=3.0)
:pypi:`pytest-selenium` pytest plugin for Selenium Feb 01, 2024 5 - Production/Stable pytest>=6.0.0
:pypi:`pytest-selenium-auto` pytest plugin to automatically capture screenshots upon selenium webdriver events Nov 07, 2023 N/A pytest >= 7.0.0
:pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Apr 11, 2024 5 - Production/Stable N/A
:pypi:`pytest-seleniumbase` A complete web automation framework for end-to-end testing. Apr 14, 2024 5 - Production/Stable N/A
:pypi:`pytest-selenium-enhancer` pytest plugin for Selenium Apr 29, 2022 5 - Production/Stable N/A
:pypi:`pytest-selenium-pdiff` A pytest package implementing perceptualdiff for Selenium tests. Apr 06, 2017 2 - Pre-Alpha N/A
:pypi:`pytest-selfie` A pytest plugin for selfie snapshot testing. Apr 05, 2024 N/A pytest<9.0.0,>=8.0.0
@ -1228,7 +1232,7 @@ This list contains 1443 plugins.
:pypi:`pytest-spec` Library pytest-spec is a pytest plugin to display test execution output like a SPECIFICATION. May 04, 2021 N/A N/A
:pypi:`pytest-spec2md` Library pytest-spec2md is a pytest plugin to create a markdown specification while running pytest. Apr 10, 2024 N/A pytest>7.0
:pypi:`pytest-speed` Modern benchmarking library for python with pytest integration. Jan 22, 2023 3 - Alpha pytest>=7
:pypi:`pytest-sphinx` Doctest plugin for pytest with support for Sphinx-specific doctest-directives Apr 01, 2024 4 - Beta pytest>=8.0.0
:pypi:`pytest-sphinx` Doctest plugin for pytest with support for Sphinx-specific doctest-directives Apr 13, 2024 4 - Beta pytest>=8.1.1
:pypi:`pytest-spiratest` Exports unit tests as test runs in Spira (SpiraTest/Team/Plan) Jan 01, 2024 N/A N/A
:pypi:`pytest-splinter` Splinter plugin for pytest testing framework Sep 09, 2022 6 - Mature pytest (>=3.0.0)
:pypi:`pytest-splinter4` Pytest plugin for the splinter automation library Feb 01, 2024 6 - Mature pytest >=8.0.0
@ -1237,7 +1241,7 @@ This list contains 1443 plugins.
:pypi:`pytest-splitio` Split.io SDK integration for e2e tests Sep 22, 2020 N/A pytest (<7,>=5.0)
:pypi:`pytest-split-tests` A Pytest plugin for running a subset of your tests by splitting them in to equally sized groups. Forked from Mark Adams' original project pytest-test-groups. Jul 30, 2021 5 - Production/Stable pytest (>=2.5)
:pypi:`pytest-split-tests-tresorit` Feb 22, 2021 1 - Planning N/A
:pypi:`pytest-splunk-addon` A Dynamic test tool for Splunk Apps and Add-ons Jan 12, 2024 N/A pytest (>5.4.0,<8)
:pypi:`pytest-splunk-addon` A Dynamic test tool for Splunk Apps and Add-ons Apr 19, 2024 N/A pytest (>5.4.0,<8)
:pypi:`pytest-splunk-addon-ui-smartx` Library to support testing Splunk Add-on UX Mar 26, 2024 N/A N/A
:pypi:`pytest-splunk-env` pytest fixtures for interaction with Splunk Enterprise and Splunk Cloud Oct 22, 2020 N/A pytest (>=6.1.1,<7.0.0)
:pypi:`pytest-sqitch` sqitch for pytest Apr 06, 2020 4 - Beta N/A
@ -1359,6 +1363,7 @@ This list contains 1443 plugins.
:pypi:`pytest-tomato` Mar 01, 2019 5 - Production/Stable N/A
:pypi:`pytest-toolbelt` This is just a collection of utilities for pytest, but don't really belong in pytest proper. Aug 12, 2019 3 - Alpha N/A
:pypi:`pytest-toolbox` Numerous useful plugins for pytest. Apr 07, 2018 N/A pytest (>=3.5.0)
:pypi:`pytest-toolkit` Useful utils for testing Apr 13, 2024 N/A N/A
:pypi:`pytest-tools` Pytest tools Oct 21, 2022 4 - Beta N/A
:pypi:`pytest-tornado` A py.test plugin providing fixtures and markers to simplify testing of asynchronous tornado applications. Jun 17, 2020 5 - Production/Stable pytest (>=3.6)
:pypi:`pytest-tornado5` A py.test plugin providing fixtures and markers to simplify testing of asynchronous tornado applications. Nov 16, 2018 5 - Production/Stable pytest (>=3.6)
@ -1440,11 +1445,11 @@ This list contains 1443 plugins.
:pypi:`pytest-wiremock` A pytest plugin for programmatically using wiremock in integration tests Mar 27, 2022 N/A pytest (>=7.1.1,<8.0.0)
:pypi:`pytest-with-docker` pytest with docker helpers. Nov 09, 2021 N/A pytest
:pypi:`pytest-workflow` A pytest plugin for configuring workflow/pipeline tests using YAML files Mar 18, 2024 5 - Production/Stable pytest >=7.0.0
:pypi:`pytest-xdist` pytest xdist plugin for distributed testing, most importantly across multiple CPUs Nov 21, 2023 5 - Production/Stable pytest >=6.2.0
:pypi:`pytest-xdist` pytest xdist plugin for distributed testing, most importantly across multiple CPUs Apr 19, 2024 5 - Production/Stable pytest >=6.2.0
:pypi:`pytest-xdist-debug-for-graingert` pytest xdist plugin for distributed testing and loop-on-failing modes Jul 24, 2019 5 - Production/Stable pytest (>=4.4.0)
:pypi:`pytest-xdist-forked` forked from pytest-xdist Feb 10, 2020 5 - Production/Stable pytest (>=4.4.0)
:pypi:`pytest-xdist-tracker` pytest plugin helps to reproduce failures for particular xdist node Nov 18, 2021 3 - Alpha pytest (>=3.5.1)
:pypi:`pytest-xdist-worker-stats` A pytest plugin to list worker statistics after a xdist run. Apr 11, 2024 4 - Beta pytest>7.3.2
:pypi:`pytest-xdist-worker-stats` A pytest plugin to list worker statistics after a xdist run. Apr 16, 2024 4 - Beta pytest>=7.0.0
:pypi:`pytest-xfaillist` Maintain a xfaillist in an additional file to avoid merge-conflicts. Sep 17, 2021 N/A pytest (>=6.2.2,<7.0.0)
:pypi:`pytest-xfiles` Pytest fixtures providing data read from function, module or package related (x)files. Feb 27, 2018 N/A N/A
:pypi:`pytest-xiuyu` This is a pytest plugin Jul 25, 2023 5 - Production/Stable N/A
@ -1459,7 +1464,7 @@ This list contains 1443 plugins.
:pypi:`pytest-xvfb` A pytest plugin to run Xvfb (or Xephyr/Xvnc) for tests. May 29, 2023 4 - Beta pytest (>=2.8.1)
:pypi:`pytest-xvirt` A pytest plugin to virtualize test. For example to transparently running them on a remote box. Oct 01, 2023 4 - Beta pytest >=7.1.0
:pypi:`pytest-yaml` This plugin is used to load yaml output to your test using pytest framework. Oct 05, 2018 N/A pytest
:pypi:`pytest-yaml-sanmu` pytest plugin for generating test cases by yaml Apr 07, 2024 N/A pytest>=7.4.0
:pypi:`pytest-yaml-sanmu` pytest plugin for generating test cases by yaml Apr 19, 2024 N/A pytest>=7.4.0
:pypi:`pytest-yamltree` Create or check file/directory trees described by YAML Mar 02, 2020 4 - Beta pytest (>=3.1.1)
:pypi:`pytest-yamlwsgi` Run tests against wsgi apps defined in yaml May 11, 2010 N/A N/A
:pypi:`pytest-yaml-yoyo` http/https API run by yaml Jun 19, 2023 N/A pytest (>=7.2.0)
@ -2259,6 +2264,13 @@ This list contains 1443 plugins.
Pytest plugin to run your tests with beartype checking enabled.
:pypi:`pytest-bec-e2e`
*last release*: Apr 19, 2024,
*status*: 3 - Alpha,
*requires*: pytest
BEC pytest plugin for end-to-end tests
:pypi:`pytest-beds`
*last release*: Jun 07, 2016,
*status*: 4 - Beta,
@ -2764,9 +2776,9 @@ This list contains 1443 plugins.
A package to prevent Dependency Confusion attacks against Yandex.
:pypi:`pytest-ch-framework`
*last release*: Mar 13, 2024,
*last release*: Apr 17, 2024,
*status*: N/A,
*requires*: pytest ==8.0.1
*requires*: pytest==8.0.1
My pytest framework
@ -2854,6 +2866,13 @@ This list contains 1443 plugins.
A cleanup plugin for pytest
:pypi:`pytest-clerk`
*last release*: Apr 19, 2024,
*status*: N/A,
*requires*: pytest<9.0.0,>=8.0.0
A set of pytest fixtures to help with integration testing with Clerk.
:pypi:`pytest-click`
*last release*: Feb 11, 2022,
*status*: 5 - Production/Stable,
@ -3163,9 +3182,9 @@ This list contains 1443 plugins.
Coverage dynamic context support for PyTest, including sub-processes
:pypi:`pytest-coveragemarkers`
*last release*: Nov 29, 2022,
*last release*: Apr 15, 2024,
*status*: N/A,
*requires*: pytest (>=7.1.2,<8.0.0)
*requires*: pytest<8.0.0,>=7.1.2
Using pytest markers to track functional coverage and filtering of tests
@ -3337,6 +3356,13 @@ This list contains 1443 plugins.
pytest fixtures to run dash applications.
:pypi:`pytest-dashboard`
*last release*: Apr 18, 2024,
*status*: N/A,
*requires*: pytest<8.0.0,>=7.4.3
:pypi:`pytest-data`
*last release*: Nov 01, 2016,
*status*: 5 - Production/Stable,
@ -3345,7 +3371,7 @@ This list contains 1443 plugins.
Useful functions for managing data for pytest fixtures
:pypi:`pytest-databases`
*last release*: Apr 10, 2024,
*last release*: Apr 19, 2024,
*status*: 4 - Beta,
*requires*: pytest
@ -4500,9 +4526,9 @@ This list contains 1443 plugins.
Applies eventlet monkey-patch as a pytest plugin.
:pypi:`pytest-evm`
*last release*: Jan 24, 2024,
*last release*: Apr 20, 2024,
*status*: 4 - Beta,
*requires*: pytest (>=7.4.3,<8.0.0)
*requires*: pytest<9.0.0,>=8.1.1
The testing package containing tools to test Web3-based projects
@ -5529,11 +5555,11 @@ This list contains 1443 plugins.
Hide captured output
:pypi:`pytest-himark`
*last release*: Apr 07, 2024,
*last release*: Apr 14, 2024,
*status*: 4 - Beta,
*requires*: pytest>=6.2.0
A plugin that reads a config.json file in your test root directory, searches the 'markers' key, lists the markers declared as 'true' as enabled markers and automatically adds -m option to the command line with an OR on the enabled markers.
A plugin that will filter pytest's test collection using a json file. It will read a json file provided with a --json argument in pytest command line (or in pytest.ini), search the markers key and automatically add -m option to the command line for filtering out the tests marked with disabled markers.
:pypi:`pytest-historic`
*last release*: Apr 08, 2020,
@ -5592,7 +5618,7 @@ This list contains 1443 plugins.
Report on tests that honor constraints, and guard against regressions
:pypi:`pytest-hot-reloading`
*last release*: Jan 06, 2024,
*last release*: Apr 18, 2024,
*status*: N/A,
*requires*: N/A
@ -5907,7 +5933,7 @@ This list contains 1443 plugins.
Reuse pytest.ini to store env variables
:pypi:`pytest-initry`
*last release*: Apr 09, 2024,
*last release*: Apr 14, 2024,
*status*: N/A,
*requires*: pytest<9.0.0,>=8.1.1
@ -5935,7 +5961,7 @@ This list contains 1443 plugins.
Inmanta tests package
:pypi:`pytest-inmanta-lsm`
*last release*: Feb 20, 2024,
*last release*: Apr 15, 2024,
*status*: 5 - Production/Stable,
*requires*: N/A
@ -6215,9 +6241,9 @@ This list contains 1443 plugins.
A pytest plugin to perform JSONSchema validations
:pypi:`pytest-jtr`
*last release*: Nov 29, 2022,
*last release*: Apr 15, 2024,
*status*: N/A,
*requires*: pytest (>=7.1.2,<8.0.0)
*requires*: pytest<8.0.0,>=7.1.2
pytest plugin supporting json test report output
@ -6803,7 +6829,7 @@ This list contains 1443 plugins.
Estimates memory consumption of test functions
:pypi:`pytest-memray`
*last release*: Aug 23, 2023,
*last release*: Apr 18, 2024,
*status*: N/A,
*requires*: pytest>=7.2
@ -6887,9 +6913,9 @@ This list contains 1443 plugins.
A plugin to test mp
:pypi:`pytest-minio-mock`
*last release*: Jan 04, 2024,
*last release*: Apr 15, 2024,
*status*: N/A,
*requires*: pytest >=5.0.0
*requires*: pytest>=5.0.0
A pytest plugin for mocking Minio S3 interactions
@ -7229,6 +7255,13 @@ This list contains 1443 plugins.
pytest-neo is a plugin for pytest that shows tests like screen of Matrix.
:pypi:`pytest-neos`
*last release*: Apr 15, 2024,
*status*: 1 - Planning,
*requires*: N/A
Pytest plugin for neos
:pypi:`pytest-netdut`
*last release*: Mar 07, 2024,
*status*: N/A,
@ -9309,7 +9342,7 @@ This list contains 1443 plugins.
pytest_sauce provides sane and helpful methods worked out in clearcode to run py.test tests with selenium/saucelabs
:pypi:`pytest-sbase`
*last release*: Apr 11, 2024,
*last release*: Apr 14, 2024,
*status*: 5 - Production/Stable,
*requires*: N/A
@ -9372,7 +9405,7 @@ This list contains 1443 plugins.
pytest plugin to automatically capture screenshots upon selenium webdriver events
:pypi:`pytest-seleniumbase`
*last release*: Apr 11, 2024,
*last release*: Apr 14, 2024,
*status*: 5 - Production/Stable,
*requires*: N/A
@ -9841,9 +9874,9 @@ This list contains 1443 plugins.
Modern benchmarking library for python with pytest integration.
:pypi:`pytest-sphinx`
*last release*: Apr 01, 2024,
*last release*: Apr 13, 2024,
*status*: 4 - Beta,
*requires*: pytest>=8.0.0
*requires*: pytest>=8.1.1
Doctest plugin for pytest with support for Sphinx-specific doctest-directives
@ -9904,7 +9937,7 @@ This list contains 1443 plugins.
:pypi:`pytest-splunk-addon`
*last release*: Jan 12, 2024,
*last release*: Apr 19, 2024,
*status*: N/A,
*requires*: pytest (>5.4.0,<8)
@ -10757,6 +10790,13 @@ This list contains 1443 plugins.
Numerous useful plugins for pytest.
:pypi:`pytest-toolkit`
*last release*: Apr 13, 2024,
*status*: N/A,
*requires*: N/A
Useful utils for testing
:pypi:`pytest-tools`
*last release*: Oct 21, 2022,
*status*: 4 - Beta,
@ -11325,7 +11365,7 @@ This list contains 1443 plugins.
A pytest plugin for configuring workflow/pipeline tests using YAML files
:pypi:`pytest-xdist`
*last release*: Nov 21, 2023,
*last release*: Apr 19, 2024,
*status*: 5 - Production/Stable,
*requires*: pytest >=6.2.0
@ -11353,9 +11393,9 @@ This list contains 1443 plugins.
pytest plugin helps to reproduce failures for particular xdist node
:pypi:`pytest-xdist-worker-stats`
*last release*: Apr 11, 2024,
*last release*: Apr 16, 2024,
*status*: 4 - Beta,
*requires*: pytest>7.3.2
*requires*: pytest>=7.0.0
A pytest plugin to list worker statistics after a xdist run.
@ -11458,7 +11498,7 @@ This list contains 1443 plugins.
This plugin is used to load yaml output to your test using pytest framework.
:pypi:`pytest-yaml-sanmu`
*last release*: Apr 07, 2024,
*last release*: Apr 19, 2024,
*status*: N/A,
*requires*: pytest>=7.4.0

View File

@ -1,5 +1,5 @@
pallets-sphinx-themes
pluggy>=1.2.0
pluggy>=1.5.0
pygments-pytest>=2.3.0
sphinx-removed-in>=0.2.0
sphinx>=7

View File

@ -43,7 +43,7 @@ dependencies = [
'exceptiongroup>=1.0.0rc8; python_version < "3.11"',
"iniconfig",
"packaging",
"pluggy<2.0,>=1.4",
"pluggy<2.0,>=1.5",
'tomli>=1; python_version < "3.11"',
]
[project.optional-dependencies]

View File

@ -15,6 +15,8 @@ from typing import Union
from pluggy import HookspecMarker
from .deprecated import HOOK_LEGACY_PATH_ARG
if TYPE_CHECKING:
import pdb
@ -297,7 +299,14 @@ def pytest_collection_finish(session: "Session") -> None:
"""
@hookspec(firstresult=True)
@hookspec(
firstresult=True,
warn_on_impl_args={
"path": HOOK_LEGACY_PATH_ARG.format(
pylib_path_arg="path", pathlib_path_arg="collection_path"
),
},
)
def pytest_ignore_collect(
collection_path: Path, path: "LEGACY_PATH", config: "Config"
) -> Optional[bool]:
@ -356,6 +365,13 @@ def pytest_collect_directory(path: Path, parent: "Collector") -> "Optional[Colle
"""
@hookspec(
warn_on_impl_args={
"path": HOOK_LEGACY_PATH_ARG.format(
pylib_path_arg="path", pathlib_path_arg="file_path"
),
},
)
def pytest_collect_file(
file_path: Path, path: "LEGACY_PATH", parent: "Collector"
) -> "Optional[Collector]":
@ -468,7 +484,14 @@ def pytest_make_collect_report(collector: "Collector") -> "Optional[CollectRepor
# -------------------------------------------------------------------------
@hookspec(firstresult=True)
@hookspec(
firstresult=True,
warn_on_impl_args={
"path": HOOK_LEGACY_PATH_ARG.format(
pylib_path_arg="path", pathlib_path_arg="module_path"
),
},
)
def pytest_pycollect_makemodule(
module_path: Path, path: "LEGACY_PATH", parent
) -> Optional["Module"]:
@ -994,6 +1017,13 @@ def pytest_assertion_pass(item: "Item", lineno: int, orig: str, expl: str) -> No
# -------------------------------------------------------------------------
@hookspec(
warn_on_impl_args={
"startdir": HOOK_LEGACY_PATH_ARG.format(
pylib_path_arg="startdir", pathlib_path_arg="start_path"
),
},
)
def pytest_report_header( # type:ignore[empty-body]
config: "Config", start_path: Path, startdir: "LEGACY_PATH"
) -> Union[str, List[str]]:
@ -1022,6 +1052,13 @@ def pytest_report_header( # type:ignore[empty-body]
"""
@hookspec(
warn_on_impl_args={
"startdir": HOOK_LEGACY_PATH_ARG.format(
pylib_path_arg="startdir", pathlib_path_arg="start_path"
),
},
)
def pytest_report_collectionfinish( # type:ignore[empty-body]
config: "Config",
start_path: Path,

View File

@ -1,4 +1,3 @@
# mypy: allow-untyped-defs
import atexit
import contextlib
from enum import Enum
@ -23,6 +22,7 @@ import shutil
import sys
import types
from types import ModuleType
from typing import Any
from typing import Callable
from typing import Dict
from typing import Iterable
@ -59,7 +59,7 @@ _IGNORED_WINERRORS = (
)
def _ignore_error(exception):
def _ignore_error(exception: Exception) -> bool:
return (
getattr(exception, "errno", None) in _IGNORED_ERRORS
or getattr(exception, "winerror", None) in _IGNORED_WINERRORS
@ -71,7 +71,7 @@ def get_lock_path(path: _AnyPurePath) -> _AnyPurePath:
def on_rm_rf_error(
func,
func: Optional[Callable[..., Any]],
path: str,
excinfo: Union[
BaseException,
@ -196,7 +196,7 @@ def find_suffixes(root: Path, prefix: str) -> Iterator[str]:
return extract_suffixes(find_prefixed(root, prefix), prefix)
def parse_num(maybe_num) -> int:
def parse_num(maybe_num: str) -> int:
"""Parse number path suffixes, returns -1 on error."""
try:
return int(maybe_num)
@ -264,7 +264,9 @@ def create_cleanup_lock(p: Path) -> Path:
return lock_path
def register_cleanup_lock_removal(lock_path: Path, register=atexit.register):
def register_cleanup_lock_removal(
lock_path: Path, register: Any = atexit.register
) -> Any:
"""Register a cleanup function for removing a lock, by default on atexit."""
pid = os.getpid()
@ -355,7 +357,7 @@ def cleanup_candidates(root: Path, prefix: str, keep: int) -> Iterator[Path]:
yield Path(entry)
def cleanup_dead_symlinks(root: Path):
def cleanup_dead_symlinks(root: Path) -> None:
for left_dir in root.iterdir():
if left_dir.is_symlink():
if not left_dir.resolve().exists():
@ -459,10 +461,14 @@ def parts(s: str) -> Set[str]:
return {sep.join(parts[: i + 1]) or sep for i in range(len(parts))}
def symlink_or_skip(src, dst, **kwargs):
def symlink_or_skip(
src: Union["os.PathLike[str]", str],
dst: Union["os.PathLike[str]", str],
**kwargs: Any,
) -> None:
"""Make a symlink, or skip the test in case symlinks are not supported."""
try:
os.symlink(str(src), str(dst), **kwargs)
os.symlink(src, dst, **kwargs)
except OSError as e:
skip(f"symlinks not supported: {e}")
@ -620,10 +626,6 @@ def _import_module_using_spec(
:param insert_modules:
If True, will call insert_missing_modules to create empty intermediate modules
for made-up module names (when importing test files not reachable from sys.path).
Note: we can probably drop insert_missing_modules altogether: instead of
generating module names such as "src.tests.test_foo", which require intermediate
empty modules, we might just as well generate unique module names like
"src_tests_test_foo".
"""
# Checking with sys.meta_path first in case one of its hooks can import this module,
# such as our own assertion-rewrite hook.
@ -636,9 +638,41 @@ def _import_module_using_spec(
if spec_matches_module_path(spec, module_path):
assert spec is not None
# Attempt to import the parent module, seems is our responsibility:
# https://github.com/python/cpython/blob/73906d5c908c1e0b73c5436faeff7d93698fc074/Lib/importlib/_bootstrap.py#L1308-L1311
parent_module_name, _, name = module_name.rpartition(".")
parent_module: Optional[ModuleType] = None
if parent_module_name:
parent_module = sys.modules.get(parent_module_name)
if parent_module is None:
# Find the directory of this module's parent.
parent_dir = (
module_path.parent.parent
if module_path.name == "__init__.py"
else module_path.parent
)
# Consider the parent module path as its __init__.py file, if it has one.
parent_module_path = (
parent_dir / "__init__.py"
if (parent_dir / "__init__.py").is_file()
else parent_dir
)
parent_module = _import_module_using_spec(
parent_module_name,
parent_module_path,
parent_dir,
insert_modules=insert_modules,
)
# Find spec and import this module.
mod = importlib.util.module_from_spec(spec)
sys.modules[module_name] = mod
spec.loader.exec_module(mod) # type: ignore[union-attr]
# Set this module as an attribute of the parent module (#12194).
if parent_module is not None:
setattr(parent_module, name, mod)
if insert_modules:
insert_missing_modules(sys.modules, module_name)
return mod
@ -709,34 +743,31 @@ def insert_missing_modules(modules: Dict[str, ModuleType], module_name: str) ->
otherwise "src.tests.test_foo" is not importable by ``__import__``.
"""
module_parts = module_name.split(".")
child_module: Union[ModuleType, None] = None
module: Union[ModuleType, None] = None
child_name: str = ""
while module_name:
if module_name not in modules:
try:
# If sys.meta_path is empty, calling import_module will issue
# a warning and raise ModuleNotFoundError. To avoid the
# warning, we check sys.meta_path explicitly and raise the error
# ourselves to fall back to creating a dummy module.
if not sys.meta_path:
raise ModuleNotFoundError
module = importlib.import_module(module_name)
except ModuleNotFoundError:
module = ModuleType(
module_name,
doc="Empty module created by pytest's importmode=importlib.",
)
else:
module = modules[module_name]
if child_module:
parent_module_name, _, child_name = module_name.rpartition(".")
if parent_module_name:
parent_module = modules.get(parent_module_name)
if parent_module is None:
try:
# If sys.meta_path is empty, calling import_module will issue
# a warning and raise ModuleNotFoundError. To avoid the
# warning, we check sys.meta_path explicitly and raise the error
# ourselves to fall back to creating a dummy module.
if not sys.meta_path:
raise ModuleNotFoundError
parent_module = importlib.import_module(parent_module_name)
except ModuleNotFoundError:
parent_module = ModuleType(
module_name,
doc="Empty module created by pytest's importmode=importlib.",
)
modules[parent_module_name] = parent_module
# Add child attribute to the parent that can reference the child
# modules.
if not hasattr(module, child_name):
setattr(module, child_name, child_module)
modules[module_name] = module
# Keep track of the child module while moving up the tree.
child_module, child_name = module, module_name.rpartition(".")[-1]
if not hasattr(parent_module, child_name):
setattr(parent_module, child_name, modules[module_name])
module_parts.pop(-1)
module_name = ".".join(module_parts)

View File

@ -142,7 +142,7 @@ class ApproxNumpy(ApproxBase):
)
return f"approx({list_scalars!r})"
def _repr_compare(self, other_side: "ndarray") -> List[str]:
def _repr_compare(self, other_side: Union["ndarray", List[Any]]) -> List[str]:
import itertools
import math
@ -163,10 +163,14 @@ class ApproxNumpy(ApproxBase):
self._approx_scalar, self.expected.tolist()
)
if np_array_shape != other_side.shape:
# convert other_side to numpy array to ensure shape attribute is available
other_side_as_array = _as_numpy_array(other_side)
assert other_side_as_array is not None
if np_array_shape != other_side_as_array.shape:
return [
"Impossible to compare arrays with different shapes.",
f"Shapes: {np_array_shape} and {other_side.shape}",
f"Shapes: {np_array_shape} and {other_side_as_array.shape}",
]
number_of_elements = self.expected.size
@ -175,7 +179,7 @@ class ApproxNumpy(ApproxBase):
different_ids = []
for index in itertools.product(*(range(i) for i in np_array_shape)):
approx_value = get_value_from_nested_list(approx_side_as_seq, index)
other_value = get_value_from_nested_list(other_side, index)
other_value = get_value_from_nested_list(other_side_as_array, index)
if approx_value != other_value:
abs_diff = abs(approx_value.expected - other_value)
max_abs_diff = max(max_abs_diff, abs_diff)
@ -188,7 +192,7 @@ class ApproxNumpy(ApproxBase):
message_data = [
(
str(index),
str(get_value_from_nested_list(other_side, index)),
str(get_value_from_nested_list(other_side_as_array, index)),
str(get_value_from_nested_list(approx_side_as_seq, index)),
)
for index in different_ids

View File

@ -121,6 +121,32 @@ def test_hookproxy_warnings_for_pathlib(tmp_path, hooktype, request):
)
def test_hookimpl_warnings_for_pathlib() -> None:
class Plugin:
def pytest_ignore_collect(self, path: object) -> None:
raise NotImplementedError()
def pytest_collect_file(self, path: object) -> None:
raise NotImplementedError()
def pytest_pycollect_makemodule(self, path: object) -> None:
raise NotImplementedError()
def pytest_report_header(self, startdir: object) -> str:
raise NotImplementedError()
def pytest_report_collectionfinish(self, startdir: object) -> str:
raise NotImplementedError()
pm = pytest.PytestPluginManager()
with pytest.warns(
pytest.PytestRemovedIn9Warning,
match=r"py\.path\.local.* argument is deprecated",
) as wc:
pm.register(Plugin())
assert len(wc.list) == 5
def test_node_ctor_fspath_argument_is_deprecated(pytester: Pytester) -> None:
mod = pytester.getmodulecol("")

View File

@ -79,7 +79,7 @@ def test_baseexception():
raise self.exc_type(*args)
raise self.exc_type
def __str__(self):
def __str__(self): # noqa: PLE0307
self.raise_exc("__str__")
def __repr__(self):

View File

@ -763,6 +763,23 @@ class TestApprox:
assert a12 != approx(a21)
assert a21 != approx(a12)
def test_numpy_array_implicit_conversion(self):
np = pytest.importorskip("numpy")
class ImplicitArray:
"""Type which is implicitly convertible to a numpy array."""
def __init__(self, vals):
self.vals = vals
def __array__(self, dtype=None, copy=None):
return np.array(self.vals)
vec1 = ImplicitArray([1.0, 2.0, 3.0])
vec2 = ImplicitArray([1.0, 2.0, 4.0])
# see issue #12114 for test case
assert vec1 != approx(vec2)
def test_numpy_array_protocol(self):
"""
array-like objects such as tensorflow's DeviceArray are handled like ndarray.

View File

@ -1126,6 +1126,139 @@ def test_safe_exists(tmp_path: Path) -> None:
assert safe_exists(p) is False
def test_import_sets_module_as_attribute(pytester: Pytester) -> None:
"""Unittest test for #12194."""
pytester.path.joinpath("foo/bar/baz").mkdir(parents=True)
pytester.path.joinpath("foo/__init__.py").touch()
pytester.path.joinpath("foo/bar/__init__.py").touch()
pytester.path.joinpath("foo/bar/baz/__init__.py").touch()
pytester.syspathinsert()
# Import foo.bar.baz and ensure parent modules also ended up imported.
baz = import_path(
pytester.path.joinpath("foo/bar/baz/__init__.py"),
mode=ImportMode.importlib,
root=pytester.path,
consider_namespace_packages=False,
)
assert baz.__name__ == "foo.bar.baz"
foo = sys.modules["foo"]
assert foo.__name__ == "foo"
bar = sys.modules["foo.bar"]
assert bar.__name__ == "foo.bar"
# Check parent modules have an attribute pointing to their children.
assert bar.baz is baz
assert foo.bar is bar
# Ensure we returned the "foo.bar" module cached in sys.modules.
bar_2 = import_path(
pytester.path.joinpath("foo/bar/__init__.py"),
mode=ImportMode.importlib,
root=pytester.path,
consider_namespace_packages=False,
)
assert bar_2 is bar
def test_import_sets_module_as_attribute_without_init_files(pytester: Pytester) -> None:
"""Similar to test_import_sets_module_as_attribute, but without __init__.py files."""
pytester.path.joinpath("foo/bar").mkdir(parents=True)
pytester.path.joinpath("foo/bar/baz.py").touch()
pytester.syspathinsert()
# Import foo.bar.baz and ensure parent modules also ended up imported.
baz = import_path(
pytester.path.joinpath("foo/bar/baz.py"),
mode=ImportMode.importlib,
root=pytester.path,
consider_namespace_packages=False,
)
assert baz.__name__ == "foo.bar.baz"
foo = sys.modules["foo"]
assert foo.__name__ == "foo"
bar = sys.modules["foo.bar"]
assert bar.__name__ == "foo.bar"
# Check parent modules have an attribute pointing to their children.
assert bar.baz is baz
assert foo.bar is bar
# Ensure we returned the "foo.bar.baz" module cached in sys.modules.
baz_2 = import_path(
pytester.path.joinpath("foo/bar/baz.py"),
mode=ImportMode.importlib,
root=pytester.path,
consider_namespace_packages=False,
)
assert baz_2 is baz
def test_import_sets_module_as_attribute_regression(pytester: Pytester) -> None:
"""Regression test for #12194."""
pytester.path.joinpath("foo/bar/baz").mkdir(parents=True)
pytester.path.joinpath("foo/__init__.py").touch()
pytester.path.joinpath("foo/bar/__init__.py").touch()
pytester.path.joinpath("foo/bar/baz/__init__.py").touch()
f = pytester.makepyfile(
"""
import foo
from foo.bar import baz
foo.bar.baz
def test_foo() -> None:
pass
"""
)
pytester.syspathinsert()
result = pytester.runpython(f)
assert result.ret == 0
result = pytester.runpytest("--import-mode=importlib", "--doctest-modules")
assert result.ret == 0
def test_import_submodule_not_namespace(pytester: Pytester) -> None:
"""
Regression test for importing a submodule 'foo.bar' while there is a 'bar' directory
reachable from sys.path -- ensuring the top-level module does not end up imported as a namespace
package.
#12194
https://github.com/pytest-dev/pytest/pull/12208#issuecomment-2056458432
"""
pytester.syspathinsert()
# Create package 'foo' with a submodule 'bar'.
pytester.path.joinpath("foo").mkdir()
foo_path = pytester.path.joinpath("foo/__init__.py")
foo_path.touch()
bar_path = pytester.path.joinpath("foo/bar.py")
bar_path.touch()
# Create top-level directory in `sys.path` with the same name as that submodule.
pytester.path.joinpath("bar").mkdir()
# Import `foo`, then `foo.bar`, and check they were imported from the correct location.
foo = import_path(
foo_path,
mode=ImportMode.importlib,
root=pytester.path,
consider_namespace_packages=False,
)
bar = import_path(
bar_path,
mode=ImportMode.importlib,
root=pytester.path,
consider_namespace_packages=False,
)
assert foo.__name__ == "foo"
assert bar.__name__ == "foo.bar"
assert foo.__file__ is not None
assert bar.__file__ is not None
assert Path(foo.__file__) == foo_path
assert Path(bar.__file__) == bar_path
class TestNamespacePackages:
"""Test import_path support when importing from properly namespace packages."""