# # spec file for package python-pytest-xdist # # Copyright (c) 2024 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed # upon. The license for this file, and modifications and additions to the # file, is the same license as for the pristine package itself (unless the # license for the pristine package is not an Open Source License, in which # case the license is the MIT License). An "Open Source License" is a # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. # Please submit bugfixes or comments via https://bugs.opensuse.org/ # %{?sle15_python_module_pythons} Name: python-pytest-xdist Version: 3.6.1 Release: 1.5 Summary: Distributed testing and loop-on-failing for py.test License: MIT URL: https://github.com/pytest-dev/pytest-xdist Source0: https://files.pythonhosted.org/packages/source/p/pytest-xdist/pytest_xdist-%{version}.tar.gz BuildRequires: %{python_module base >= 3.7} BuildRequires: %{python_module execnet >= 1.1} BuildRequires: %{python_module filelock} BuildRequires: %{python_module pip} BuildRequires: %{python_module psutil >= 3.0.0} BuildRequires: %{python_module pytest >= 6.2.0} BuildRequires: %{python_module setuptools_scm >= 6.2.3} BuildRequires: %{python_module setuptools} BuildRequires: %{python_module wheel} BuildRequires: fdupes BuildRequires: python-rpm-macros Requires: python-execnet >= 1.1 Requires: python-pytest >= 6.2.0 Suggests: python-psutil >= 3.0.0 BuildArch: noarch %python_subpackages %description The `pytest-xdist`_ plugin extends py.test with some unique test execution modes: * test run parallelization_: if you have multiple CPUs or hosts you can use those for a combined test run. This allows to speed up development or to use special resources of `remote machines`_. * ``--boxed``: (not available on Windows) run each test in a boxed_ subprocess to survive ``SEGFAULTS`` or otherwise dying processes * ``--looponfail``: run your tests repeatedly in a subprocess. After each run py.test waits until a file in your project changes and then re-runs the previously failing tests. This is repeated until all tests pass after which again a full run is performed. * `Multi-Platform`_ coverage: you can specify different Python interpreters or different platforms and run tests in parallel on all of them. Before running tests remotely, ``py.test`` efficiently "rsyncs" your program source code to the remote place. All test results are reported back and displayed to your local terminal. You may specify different Python versions and interpreters. %prep %autosetup -p1 -n pytest_xdist-%{version} sed -i 's/\r//' README.rst %build %pyproject_wheel %install %pyproject_install %python_expand %fdupes %{buildroot}%{$python_sitelib} %check %pytest %files %{python_files} %doc CHANGELOG.rst README.rst %license LICENSE %{python_sitelib}/xdist %{python_sitelib}/pytest_xdist-%{version}*-info %changelog * Thu Jun 6 2024 Markéta Machová - update to 3.6.1 * pytest-xdist workers now always execute the tests in the main thread. * Added proper handling of shouldstop and shouldfail conditions in workers. * Fixed compatibility issue between looponfail and editable installs. * Use the new main_thread_only execnet “execmodel” so that code which expects to only run in the main thread will now work as expected. * Add backward compatibility for deadlock issue with the execnet new main_thread_only “execmodel” triggered when pytest-cov accesses rinfo. * Mon Nov 27 2023 Dirk Müller - update to 3.5.0: * ``--dist=loadscope`` now sorts scopes by number of tests to assign largest scopes early -- in many cases this should improve overall test session running time, as there is less chance of a large scope being left to be processed near the end of the session, leaving other workers idle. * Thu Nov 16 2023 Benoît Monin - update to 3.4.0: * #963: Wait for workers to finish reporting when test run stops early. * #965: Added support for Python 3.12. * Mon May 22 2023 Dirk Müller - update to 3.3.1: * Avoid remote calls during startup as execnet by default does not ensure remote affinity with the main thread and might accidentally schedule the pytest worker into a non-main thread, which breaks numerous frameworks, for example ``asyncio``, ``anyio``, ``PyQt/PySide``, etc. A more safe correction will require thread affinity in ``execnet`` * Sun May 14 2023 Dirk Müller - update to 3.3.0: * Improved progress output when collecting nodes to be less verbose. * Fri Apr 21 2023 Dirk Müller - add sle15_python_module_pythons (jsc#PED-68) * Thu Apr 13 2023 Matej Cepl - Make calling of %%{sle15modernpython} optional. * Mon Mar 27 2023 Dirk Müller - update to 3.2.1: * Fixed hang in ``worksteal`` scheduler. * Improved Documentation * Document limitations for debugging due to standard I/O of workers not being forwarded. Also, mention remote debugging as a possible workaround. Features: * Users can now configure ``load`` scheduling precision using ``--maxschedchunk`` command line option. * New ``worksteal`` scheduler, based on the idea of `work stealing It's similar to ``load`` scheduler, but it should handle tests with significantly differing duration better, and, at the same time, it should provide similar or better reuse of fixtures. * Wed Nov 30 2022 Daniel Garcia - Remove python_module macro definition - Use autosetup instead of setup + autopatch - Remove reintroduce-slave-terminology.patch - Remove 0001-Revert-Remove-compat-for-pytest-6.patch - Update to 3.0.2: [#] Bug Fixes * #813: Cancel shutdown when a crashed worker is restarted. [#] Deprecations * #825: The --rsyncdir command line argument and rsyncdirs config variable are deprecated. * The rsync feature will be removed in pytest-xdist 4.0. * #826: The --looponfail command line argument and looponfailroots config variable are deprecated. * The loop-on-fail feature will be removed in pytest-xdist 4.0. [#] Improved Documentation * #791: Document the pytest_xdist_auto_num_workers hook. * #796: Added known limitations section to documentation. * #829: Document the -n logical option. [#] Features * #792: The environment variable PYTEST_XDIST_AUTO_NUM_WORKERS can now be used to specify the default for -n auto and -n logical. * #812: Partially restore old initial batch distribution algorithm in LoadScheduling. * pytest orders tests for optimal sequential execution - i. e. avoiding unnecessary setup and teardown of fixtures. So executing tests in consecutive chunks is important for optimal performance. * In v1.14, initial test distribution in LoadScheduling was changed to round-robin, optimized for the corner case, when the number of tests is less than 2 * number of nodes. At the same time, it became worse for all other cases. * For example: if some tests use some "heavy" fixture, and these tests fit into the initial batch, with round-robin distribution the fixture will be created min(n_tests, n_workers) times, no matter how many other tests there are. * With the old algorithm (before v1.14), if there are enough tests not using the fixture, the fixture was created only once. * So restore the old behavior for typical cases where the number of tests is much greater than the number of workers (or, strictly speaking, when there are at least 2 tests for every node). [#] Removals * #468: The --boxed command-line option has been removed. If you still need this functionality, install pytest-forked separately. [#] Trivial Changes * #468: The py dependency has been dropped. * #822: Replace internal usage of py.log with a custom solution (but with the same interface). * #823: Remove usage of py._pydir as an rsync candidate. * #824: Replace internal usages of py.path.local by pathlib.Path. * Sat Jan 15 2022 Matthias Fehring - Update to 2.5.0 * Features + Full compatibility with pytest 7 - no deprecation warnings or use of legacy features. + New --dist=loadgroup option, which ensures all tests marked with @pytest.mark.xdist_group run in the same session/worker. Other tests run distributed as in --dist=load. * Trivial Changes + Use @pytest.hookspec decorator to declare hook options in newhooks.py to avoid warnings in pytest 7.0. + Use up-to-date setup.cfg/pyproject.toml packaging setup. + Started using type annotations and mypy checking internally. The types are incomplete and not published. - Changes from 2.4.0 * Features + On Linux, the process title now changes to indicate the current worker state (running/idle). Depends on the setproctitle package, which can be installed with pip install pytest-xdist[setproctitle]. + Add support for Python 3.10. - Changes from 2.3.0 * Deprecations and Removals + Python 3.5 is no longer supported. * Features + Add --numprocesses=logical flag, which automatically uses the number of logical CPUs available, instead of physical CPUs with auto. This is very useful for test suites which are not CPU-bound. + Added new pytest_handlecrashitem hook to allow handling and rescheduling crashed items. * Bug Fixes + Copy the parent process sys.path into local workers, to work around execnet's python -c adding the current directory to sys.path. + Fix issue caused by changing the branch name of the pytest repository. * Trivial Changes + Replace master with controller where ever possible. + Use 'main' to refer to pytest default branch in tox env names. - Update patches * reintroduce-slave-terminology.patch * 0001-Revert-Remove-compat-for-pytest-6.patch - Require setuptools_scm >= 6.0 for building * Tue Feb 2 2021 Dirk Müller - update to 2.2.0: * Internal errors in workers are now propagated to the master node. * Tue Oct 13 2020 Marketa Calabkova - Skip test failing with the new pytest * Mon Aug 31 2020 Marketa Calabkova - Update to 2.1.0 * New ``pytest_xdist_auto_num_workers`` hook can be implemented by plugins or ``conftest.py`` files to control the number of workers when ``--numprocesses=auto`` is given in the command-line. * ``psutil`` has proven to make ``pytest-xdist`` installation in certain platforms and containers problematic, so to use it for automatic number of CPUs detection users need to install the ``psutil`` extra - Add patches to keep compatibility with older pytests: * reintroduce-slave-terminology.patch * 0001-Revert-Remove-compat-for-pytest-6.patch * Tue Aug 25 2020 Marketa Calabkova - Update to 2.0.0 * Drop backward-compatibility "slave" aliases related to worker nodes. We deliberately moved away from this terminology years ago, and it seems like the right time to finish the deprecation and removal process. * ``pytest-xdist`` no longer supports Python 2.7. * New functions ``xdist.is_xdist_worker``, ``xdist.is_xdist_master``, ``xdist.get_xdist_worker_id``, to easily identify the current node. * When using ``-n auto``, count the number of physical CPU cores instead of logical ones. * ``pytest-xdist`` now requires ``pytest>=6.0``. * Wed May 13 2020 Tomáš Chvátal - Do not do symlinks * Sun May 3 2020 Tomáš Chvátal - 1.32.0: * #524: Add testrun_uid fixture. This is a shared value that uniquely identifies a test run among all workers. This also adds a PYTEST_XDIST_TESTRUNUID environment variable that is accessible within a test as well as a command line option --testrunuid to manually set the value from outside. * Mon Jan 6 2020 Tomáš Chvátal - Update to 1.31.0: * #486: Add support for Python 3.8. * #491: Fix regression that caused custom plugin command-line arguments to be discarded when using --tx mode. * Mon Oct 7 2019 Tomáš Chvátal - Update to 1.30.0: * Fix crash issues related to running xdist with the terminal plugin disabled * Initialization between workers and master nodes is now more consistent * Tue Jul 2 2019 Tomáš Chvátal - Update to 1.29.0: * #226: --max-worker-restart now assumes a more reasonable value (4 times the number of nodes) when not given explicitly. This prevents test suites from running forever when the suite crashes during collection. * #435: When the test session is interrupted due to running out of workers, the reason is shown in the test summary for easier viewing. * #442: Compatibility fix for upcoming pytest 5.0: session.exitstatus is now an IntEnum object. * #435: No longer show an internal error when we run out of workers due to crashes. * Mon Jun 3 2019 Tomáš Chvátal - Update to 1.28.0: * #426: pytest-xdist now uses the new pytest_report_to_serializable and pytest_report_from_serializable hooks from pytest 4.4 * Thu Mar 21 2019 Tomáš Chvátal - Update to 1.27.0: * #374: The new ``pytest_xdist_getremotemodule`` hook allows overriding the module run on remote nodes. * #415: Improve behavior of ``--numprocesses=auto`` to work well with ``--pdb`` option. * Tue Feb 12 2019 Tomáš Chvátal - Update to 1.26.1: * #406: Do not implement deprecated pytest_logwarning hook in pytest versions where it is deprecated. * #376: The current directory is no longer added sys.path for local workers, only for remote connections. * #379: Warning attributes are checked to make sure they can be dumped prior to serializing the warning for submission to the master node. * #372: Pytest versions older than 3.6 are no longer supported. * #373: Node setup information is hidden when pytest is run in quiet mode to reduce noise on many-core machines. * #388: mainargv is made available in workerinput from the host's sys.argv. * #384: pytest 4.1 support: ExceptionInfo API changes. * #390: pytest 4.1 support: pytest_logwarning hook removed. * Fri Oct 26 2018 Ondřej Súkup - update to version 1.23.2 - add python-six to runtime deps * Fix issue where Warnings could cause pytest to fail if they do not set the args attribute correctly. * Fix warnings transfer between workers and master node with pytest >= 3.8 * Improve collection performance by reducing the number of events sent to master node * Sat Apr 7 2018 arun@gmx.de - update to version 1.22.2: * Add backward compatibility for slaveoutput attribute to WorkerController instances. (#285) * Sat Feb 24 2018 mimi.vx@gmail.com - cleanup Requires and spec * Sat Feb 24 2018 arun@gmx.de - update to version 1.22.1: * Bug Fixes + Fix issue when using loadscope or loadfile where tests would fail to start if the first scope had only one test. (#257) * Trivial Changes + Change terminology used by pytest-xdist to master and worker in arguments and messages (for example --max-worker-reset). (#234) * Thu Jan 11 2018 arun@gmx.de - update to version 1.22.0: * Add support for the pytest_runtest_logfinish hook which will be released in pytest 3.4. (#266) * Wed Jan 3 2018 arun@gmx.de - update to version 1.21.0: * Deprecations and Removals + Drop support for EOL Python 2.6. (#259) * Features + New --dist=loadfile option which load-distributes test to workers grouped by the file the tests live in. (#242) * Bug Fixes + Fix accidental mutation of test report during serialization causing longrepr string-ification to break. (#241) * Wed Nov 15 2017 mimi.vx@gmail.com - new pytest-xdist requires pytest-forked package * Sat Nov 11 2017 arun@gmx.de - specfile: * CHANGELOG->CHANGELOG.rst * update pytest version requirement to 3.0.0 - update to version 1.20.1: * Bug Fixes + Fix hang when all worker nodes crash and restart limit is reached (#45) + Fix issue where the -n option would still run distributed tests when pytest was run with the --collect-only option (#5) - changes from version 1.20.0: * Features + xdist now supports tests to log results multiple times, improving integration with plugins which require it like pytest-rerunfailures and flaky. (#206) * Bug Fixes + Fix issue where tests were being incorrectly identified if a worker crashed during the teardown stage of the test. (#124) - changes from version 1.19.1: * Bug Fixes + Fix crash when transferring internal pytest warnings from workers to the master node. (#214) - changes from version 1.19.0: * Deprecations and Removals + --boxed functionality has been moved to a separate plugin, pytest-forked. This release now depends on " pytest-forked" and provides --boxed as a backward compatibility option. (#1) * Features + New --dist=loadscope option: sends group of related tests to the same worker. Tests are grouped by module for test functions and by class for test methods. See README.rst for more information. (#191) + Warnings are now properly transferred from workers to the master node. (#92) * Bug Fixes + Fix serialization of native tracebacks (--tb=native). (#196) - changes from version 1.18.2: * Bug Fixes + Removal of unnecessary dependency on incorrect version of py. (#105) + Fix bug in internal event-loop error handler in the master node. This bug would shadow the original errors making extremely hard/impossible for users to diagnose the problem properly. (#175) - changes from version 1.18.1 : * Bug Fixes + Fixed serialization of longrepr.sections during error reporting from workers. (#171) + Fix ReprLocal not being unserialized breaking --showlocals usages. (#176) - changes from version 1.18.0 : * pytest-xdist now requires pytest>=3.0.0. * Features + Add long option --numprocesses as alternative for -n. (#168) * Bug Fixes + Fix serialization and deserialization dropping longrepr details. (#133) - changes from version 1.17.1 : * Bug Fixes + Hot fix release reverting the change introduced by #124, unfortunately it broke a number of test suites so we are reversing this change while we investigate the problem. (#157) * Improved Documentation + Introduced towncrier for CHANGELOG management. (#154) + Added HOWTORELEASE documentation. (#155) - changes from version 1.17.0: * fix #124: xdist would mark test as complete after 'call' step. As a result, xdist could identify the wrong test as failing when test crashes at teardown. To address this issue, xdist now marks test as complete at teardown. - changes from version 1.16.0: * pytest-xdist now requires pytest 2.7 or later. * Add worker_id attribute in the TestReport * new hook: pytest_xdist_make_scheduler(config, log), can return custom tests items distribution logic implementation. You can take a look at built-in LoadScheduling and EachScheduling implementations. Note that required scheduler class public API may change in next pytest-xdist versions. * Sat Apr 22 2017 aloisio@gmx.com - Converted to single-spec - Fix source URL * Wed Jan 18 2017 hpj@urpla.net - fix Source URL * Sun Jan 15 2017 hpj@urpla.net - Update to 1.15.0 - new ``worker_id`` fixture, returns the id of the worker in a test or fixture. Thanks Jared Hellman for the PR. - display progress during collection only when in a terminal, similar to pytest #1397 issue. Thanks Bruno Oliveira for the PR. - fix internal error message when ``--maxfail`` is used (#62, #65). Thanks Collin RM Stocks and Bryan A. Jones for reports and Bruno Oliveira for the PR. - exclude two tests, that fail due to too narrow requirements * Fri May 27 2016 toddrme2178@gmail.com - Update to 1.14 - new hook: ``pytest_xdist_node_collection_finished(node, ids)``, called when a worker has finished collection. Thanks Omer Katz for the request and Bruno Oliveira for the PR. - fix README display on pypi - fix #22: xdist now works if the internal tmpdir plugin is disabled. Thanks Bruno Oliveira for the PR. - fix #32: xdist now works if looponfail or boxed are disabled. Thanks Bruno Oliveira for the PR. * Wed Oct 21 2015 hpj@urpla.net - Update to 1.13.1: - fix a regression -n 0 now disables xdist again - Update to 1.13: - extended the tox matrix with the supported py.test versions - split up the plugin into 3 plugin's to prepare the departure of boxed and looponfail. looponfail will be a part of core and forked boxed will be replaced with a more reliable primitive based on xdist - conforming with new pytest-2.8 behavior of returning non-zero when all tests were skipped or deselected. - new "--max-slave-restart" option that can be used to control maximum number of times pytest-xdist can restart slaves due to crashes. Thanks to Anatoly Bubenkov for the report and Bruno Oliveira for the PR. - release as wheel - "-n" option now can be set to "auto" for automatic detection of number of cpus in the host system. Thanks Suloev Dmitry for the PR. - Update to 1.12: - fix issue594: properly report errors when the test collection is random. Thanks Bruno Oliveira. - some internal test suite adaptation (to become forward compatible with the upcoming pytest-2.8) - Update to 1.11: - fix pytest/xdist issue485 (also depends on py-1.4.22): attach stdout/stderr on --boxed processes that die. - fix pytest/xdist issue503: make sure that a node has usually two items to execute to avoid scoped fixtures to be torn down pre-maturely (fixture teardown/setup is "nextitem" sensitive). Thanks to Andreas Pelme for bug analysis and failing test. - restart crashed nodes by internally refactoring setup handling of nodes. Also includes better code documentation. Many thanks to Floris Bruynooghe for the complete PR. * Fri Jun 13 2014 mvyskocil@opensuse.org - Needs py.test 2.4.2 or higher * Wed Jun 11 2014 mvyskocil@opensuse.org - Update to 1.10 * Sun Jan 19 2014 toms@opensuse.org - Initial version 1.9