pytest-fastest
pytest-fastest copied to clipboard
Use Git and coverage data to run only needed tests
============== pytest-fastest
.. image:: https://img.shields.io/pypi/v/pytest-fastest.svg :target: https://pypi.org/project/pytest-fastest :alt: PyPI version
.. image:: https://img.shields.io/pypi/pyversions/pytest-fastest.svg :target: https://pypi.org/project/pytest-fastest :alt: Python versions
.. image:: https://travis-ci.com/kstrauser/pytest-fastest.svg?branch=dev :target: https://travis-ci.com/kstrauser/pytest-fastest :alt: See Build Status on Travis CI
.. image:: https://ci.appveyor.com/api/projects/status/github/kstrauser/pytest-fastest?branch=dev :target: https://ci.appveyor.com/project/kstrauser/pytest-fastest/branch/dev :alt: See Build Status on AppVeyor
Use SCM and coverage to run only needed tests
This pytest_ plugin was generated with Cookiecutter_ along with @hackebrot's cookiecutter-pytest-plugin template.
Features
- Gathers coverage data from tests to track which tests call functions from which modules.
- Uses Git to track changes from a given commit to find the minimum set of tests that need to run to test new changes, then skips everything else.
Requirements
- Python 3.8+
- pytest 3.4.0+
Installation
You can install "pytest-fastest" via pip_ from PyPI_::
$ pip install pytest-fastest
Usage
pytest-fastest can be set to run only tests:
- That test modules that have changed in Git,
- Tests that we don't already have coverage data for, and
- Tests that we've added or changed.
In most common development workflows where you make short-lived branches off a main "master" or "dev" branch, the amount of code that actually changes while fixing a bug or writing a feature is usually just a small portion of the whole codebase. Instead of running thousands of tests after each change, pytest-fastest can identify the relevant ones that thoroughly test your work but skip all the things you haven't changed.
To use it:
-
In
pytest.ini, setfastest_committo the name of a Git commit to compare your current work against. (You can also set or override it on the command line with--fastest-commit). This is required if you want to skip tests, which is the main reason for using this plugin. -
Use the command line argument
--fastest-modeto choice the appropriate running mode:all(default): Run all tests without collecting coverage data. This emulates normal pytest behavior and has no effect on performance.skip: Skip tests that don't need to be run, but update coverage data on the ones that do run. This will usually be faster thanall, but because collecting coverage information takes some time, as the number of un-skippable tests grows very large it may actually become slower.gather: Don't skip any tests, but do gather coverage data. This is slower thanallbut can be used to seed the coverage cache.cache: This is a fast mode for fixing existing tests. It skips tests but doesn't update the coverage cache. It will never be slower thanalland will always be faster thanskip.
Contributing
Contributions are very welcome. Tests can be run with tox_, please ensure
the coverage at least stays the same before you submit a pull request.
License
Distributed under the terms of the MIT_ license, "pytest-fastest" is free and open source software
Issues
If you encounter any problems, please file an issue_ along with a detailed description.
.. _Cookiecutter: https://github.com/audreyr/cookiecutter
.. _@hackebrot: https://github.com/hackebrot
.. _MIT: http://opensource.org/licenses/MIT
.. _BSD-3: http://opensource.org/licenses/BSD-3-Clause
.. _GNU GPL v3.0: http://www.gnu.org/licenses/gpl-3.0.txt
.. _Apache Software License 2.0: http://www.apache.org/licenses/LICENSE-2.0
.. _cookiecutter-pytest-plugin: https://github.com/pytest-dev/cookiecutter-pytest-plugin
.. _file an issue: https://github.com/kstrauser/pytest-fastest/issues
.. _pytest: https://github.com/pytest-dev/pytest
.. _tox: https://tox.readthedocs.io/en/latest/
.. _pip: https://pypi.org/project/pip/
.. _PyPI: https://pypi.org/project