pytest-loop


Namepytest-loop JSON
Version 1.0.11 PyPI version JSON
download
home_pageNone
Summarypytest plugin for looping tests
upload_time2024-03-30 11:58:06
maintainerNone
docs_urlNone
authorAdam Nogowski
requires_python>=3.7
licenseThis Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at https://www.mozilla.org/en-US/MPL/2.0/.
keywords duration loop pytest pytest-loop pytest-repeat pytest-rerun pytest-stress repeat rerun stress test time
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            pytest-loop
===========

pytest-loop is a plugin for `pytest <https://docs.pytest.org>`_ that makes it
easy to loop a single test, or multiple tests, a specific number of times or for a certain duration of time.
This plugin merges pytest-repeat and pytest-stress with a fix for test results.

.. image:: https://img.shields.io/badge/license-MPL%202.0-blue.svg
   :target: https://github.com/anogowski/pytest-loop/blob/master/LICENSE
   :alt: License
.. image:: https://img.shields.io/pypi/v/pytest-loop.svg
   :target: https://pypi.python.org/pypi/pytest-loop/
   :alt: PyPI
.. image:: https://img.shields.io/pypi/pyversions/pytest-loop.svg
   :target: https://pypi.org/project/pytest-loop/
   :alt: Python versions
.. image:: https://github.com/anogowski/pytest-loop/actions/workflows/test.yml/badge.svg
    :target: https://github.com/anogowski/pytest-cov/actions
    :alt: See Build Status on GitHub Actions
.. image:: https://img.shields.io/github/issues-raw/anogowski/pytest-loop.svg
   :target: https://github.com/anogowski/pytest-loop/issues
   :alt: Issues
.. image:: https://img.shields.io/requires/github/anogowski/pytest-loop.svg
   :target: https://requires.io/github/anogowski/pytest-loop/requirements/?branch=master
   :alt: Requirements

Requirements
------------

You will need the following prerequisites in order to use pytest-loop:
- Python 3.7+ or PyPy
- pytest 7 or newer

Installation
------------

To install pytest-loop:

.. code-block:: bash

  $ pip install pytest-loop

Usage
-----

Iterative Loop:
^^^^^^^^^^^^^^^
Use the :code:`--loop` command line option to specify how many times you want
your test, or tests, to be run:

.. code-block:: bash

  $ pytest --loop=10 test_file.py

Each test collected by pytest will be run :code:`n` times.

If you want to mark a test in your code to be looped a number of times, you
can use the :code:`@pytest.mark.loop(n)` decorator:

.. code-block:: python

   import pytest


   @pytest.mark.loop(3)
   def test_loop_decorator():
       pass



Time based loop:
^^^^^^^^^^^^^^^^

Loop tests for 30 seconds::

    $ pytest --seconds 30

Loop tests for 45 minutes::

    $ pytest --minutes 45

Loop tests for 8 hours::

    $ pytest --hours 8

Loop tests for 1 hour 8 minutes and 9 seconds::

    $ pytest --hours 1 --minutes 8 --seconds 9

Need to wait some time after each test loop?::

    $ pytest --delay 5 --hours 4 --minutes 30

You can also add these values to config files::

    [pytest]
    addopts = --hours 1 --minutes 30

Note: These loop times include setup and teardown operations as well. So if you have a test setup that takes 5
seconds, your actual tests will run for 5 seconds less than your desired time.

looping a test until failure:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

If you are trying to diagnose an intermittent failure, it can be useful to run the same
test over and over again until it fails. You can use pytest's :code:`-x` option in
conjunction with pytest-loop to force the test runner to stop at the first failure.
For example:

.. code-block:: bash

  $ pytest --loop=1000 -x test_file.py

This will attempt to run test_file.py 1000 times, but will stop as soon as a failure
occurs.

.. code-block:: bash

  $ pytest --hours 10 -x test_file.

This will attempt to run test_file.py for 10 hours, but will stop as soon as a failure
occurs.

UnitTest Style Tests
--------------------

Unfortunately pytest-loop is not able to work with unittest.TestCase test classes.
These tests will simply always run once, regardless of :code:`--loop`, and show a warning.

Resources
---------

- `Release Notes <https://github.com/anogowski/pytest-loop/blob/master/CHANGES.rst>`_
- `Issue Tracker <https://github.com/anogowski/pytest-loop/issues>`_
- `Code <https://github.com/anogowski/pytest-loop/>`_
            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "pytest-loop",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": null,
    "keywords": "duration, loop, pytest, pytest-loop, pytest-repeat, pytest-rerun, pytest-stress, repeat, rerun, stress, test, time",
    "author": "Adam Nogowski",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/cf/fc/401f13e9ba21ea5483a635eadf724fc9b8e7274615cf0075c8d7968b495b/pytest_loop-1.0.11.tar.gz",
    "platform": null,
    "description": "pytest-loop\n===========\n\npytest-loop is a plugin for `pytest <https://docs.pytest.org>`_ that makes it\neasy to loop a single test, or multiple tests, a specific number of times or for a certain duration of time.\nThis plugin merges pytest-repeat and pytest-stress with a fix for test results.\n\n.. image:: https://img.shields.io/badge/license-MPL%202.0-blue.svg\n   :target: https://github.com/anogowski/pytest-loop/blob/master/LICENSE\n   :alt: License\n.. image:: https://img.shields.io/pypi/v/pytest-loop.svg\n   :target: https://pypi.python.org/pypi/pytest-loop/\n   :alt: PyPI\n.. image:: https://img.shields.io/pypi/pyversions/pytest-loop.svg\n   :target: https://pypi.org/project/pytest-loop/\n   :alt: Python versions\n.. image:: https://github.com/anogowski/pytest-loop/actions/workflows/test.yml/badge.svg\n    :target: https://github.com/anogowski/pytest-cov/actions\n    :alt: See Build Status on GitHub Actions\n.. image:: https://img.shields.io/github/issues-raw/anogowski/pytest-loop.svg\n   :target: https://github.com/anogowski/pytest-loop/issues\n   :alt: Issues\n.. image:: https://img.shields.io/requires/github/anogowski/pytest-loop.svg\n   :target: https://requires.io/github/anogowski/pytest-loop/requirements/?branch=master\n   :alt: Requirements\n\nRequirements\n------------\n\nYou will need the following prerequisites in order to use pytest-loop:\n- Python 3.7+ or PyPy\n- pytest 7 or newer\n\nInstallation\n------------\n\nTo install pytest-loop:\n\n.. code-block:: bash\n\n  $ pip install pytest-loop\n\nUsage\n-----\n\nIterative Loop:\n^^^^^^^^^^^^^^^\nUse the :code:`--loop` command line option to specify how many times you want\nyour test, or tests, to be run:\n\n.. code-block:: bash\n\n  $ pytest --loop=10 test_file.py\n\nEach test collected by pytest will be run :code:`n` times.\n\nIf you want to mark a test in your code to be looped a number of times, you\ncan use the :code:`@pytest.mark.loop(n)` decorator:\n\n.. code-block:: python\n\n   import pytest\n\n\n   @pytest.mark.loop(3)\n   def test_loop_decorator():\n       pass\n\n\n\nTime based loop:\n^^^^^^^^^^^^^^^^\n\nLoop tests for 30 seconds::\n\n    $ pytest --seconds 30\n\nLoop tests for 45 minutes::\n\n    $ pytest --minutes 45\n\nLoop tests for 8 hours::\n\n    $ pytest --hours 8\n\nLoop tests for 1 hour 8 minutes and 9 seconds::\n\n    $ pytest --hours 1 --minutes 8 --seconds 9\n\nNeed to wait some time after each test loop?::\n\n    $ pytest --delay 5 --hours 4 --minutes 30\n\nYou can also add these values to config files::\n\n    [pytest]\n    addopts = --hours 1 --minutes 30\n\nNote: These loop times include setup and teardown operations as well. So if you have a test setup that takes 5\nseconds, your actual tests will run for 5 seconds less than your desired time.\n\nlooping a test until failure:\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nIf you are trying to diagnose an intermittent failure, it can be useful to run the same\ntest over and over again until it fails. You can use pytest's :code:`-x` option in\nconjunction with pytest-loop to force the test runner to stop at the first failure.\nFor example:\n\n.. code-block:: bash\n\n  $ pytest --loop=1000 -x test_file.py\n\nThis will attempt to run test_file.py 1000 times, but will stop as soon as a failure\noccurs.\n\n.. code-block:: bash\n\n  $ pytest --hours 10 -x test_file.\n\nThis will attempt to run test_file.py for 10 hours, but will stop as soon as a failure\noccurs.\n\nUnitTest Style Tests\n--------------------\n\nUnfortunately pytest-loop is not able to work with unittest.TestCase test classes.\nThese tests will simply always run once, regardless of :code:`--loop`, and show a warning.\n\nResources\n---------\n\n- `Release Notes <https://github.com/anogowski/pytest-loop/blob/master/CHANGES.rst>`_\n- `Issue Tracker <https://github.com/anogowski/pytest-loop/issues>`_\n- `Code <https://github.com/anogowski/pytest-loop/>`_",
    "bugtrack_url": null,
    "license": "This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at https://www.mozilla.org/en-US/MPL/2.0/.",
    "summary": "pytest plugin for looping tests",
    "version": "1.0.11",
    "project_urls": {
        "Changelog": "https://github.com/anogowski/pytest-loop/blob/master/CHANGELOG.rst",
        "Homepage": "https://github.com/anogowski/pytest-loop",
        "Issues": "https://github.com/anogowski/pytest-loop/issues",
        "Repository": "https://github.com/anogowski/pytest-loop.git"
    },
    "split_keywords": [
        "duration",
        " loop",
        " pytest",
        " pytest-loop",
        " pytest-repeat",
        " pytest-rerun",
        " pytest-stress",
        " repeat",
        " rerun",
        " stress",
        " test",
        " time"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f4bdae3fa64fc9757a7a5fe0044f0722ba091b0fd934e09f1289162721efb47b",
                "md5": "1b51435c91189c5bb9ab9a510d5df06b",
                "sha256": "367a5bd48b32f8205ed726fb562836e7c775ad790e9b95a4c629ea396bd05408"
            },
            "downloads": -1,
            "filename": "pytest_loop-1.0.11-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "1b51435c91189c5bb9ab9a510d5df06b",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7",
            "size": 6063,
            "upload_time": "2024-03-30T11:58:05",
            "upload_time_iso_8601": "2024-03-30T11:58:05.483462Z",
            "url": "https://files.pythonhosted.org/packages/f4/bd/ae3fa64fc9757a7a5fe0044f0722ba091b0fd934e09f1289162721efb47b/pytest_loop-1.0.11-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "cffc401f13e9ba21ea5483a635eadf724fc9b8e7274615cf0075c8d7968b495b",
                "md5": "14e326b70409180dc0bb1d8ddcc6d2e0",
                "sha256": "fad5986fca92c73d79e10c961d09004ef6efdec10b6a5c3f8bf8b2433d8f29e9"
            },
            "downloads": -1,
            "filename": "pytest_loop-1.0.11.tar.gz",
            "has_sig": false,
            "md5_digest": "14e326b70409180dc0bb1d8ddcc6d2e0",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 10190,
            "upload_time": "2024-03-30T11:58:06",
            "upload_time_iso_8601": "2024-03-30T11:58:06.618164Z",
            "url": "https://files.pythonhosted.org/packages/cf/fc/401f13e9ba21ea5483a635eadf724fc9b8e7274615cf0075c8d7968b495b/pytest_loop-1.0.11.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-03-30 11:58:06",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "anogowski",
    "github_project": "pytest-loop",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "tox": true,
    "lcname": "pytest-loop"
}
        
Elapsed time: 0.22175s