Go to file
Jurko Gospodnetić f3c9c6e8a8 fix restoring Python state after in-process pytest runs
Now each in-process pytest run saves a snapshot of important global Python
state and restores it after the test completes, including the list of loaded
modules & the Python path settings.

Previously only the loaded package data was getting restored, but that was
also reverting any loaded package changes done in the test triggering the
pytest runs, and not only those done by the pytest runs themselves.

Updated acceptance tests broken by this change, which were only passing before
by accident as they were making multiple pytest runs with later ones depending
on sys.path changes left behind by the initial one.
2017-12-17 12:47:50 +01:00
.github Fix example in PR template 2017-12-05 20:05:35 +01:00
_pytest fix restoring Python state after in-process pytest runs 2017-12-17 12:47:50 +01:00
bench simplify internal pytester machinery 2014-10-06 13:37:57 +02:00
changelog Merge pull request #3041 from segevfiner/capture-no-disable-progress 2017-12-16 12:34:34 -02:00
doc/en Add param annotations and types to hookspec 2017-12-12 18:01:31 -02:00
extra Adapt get_issues.py script for GitHub (instead of Bitbucket) 2016-03-28 20:00:57 +02:00
scripts Use py36 as preferred Python 3 interpreter for CI testing 2017-08-14 20:27:28 -03:00
tasks fix `actial` --> `actual` typo 2017-12-12 12:55:32 +01:00
testing fix restoring Python state after in-process pytest runs 2017-12-17 12:47:50 +01:00
.coveragerc Remove code for unsupported Python versions 2017-10-10 08:54:56 +03:00
.gitattributes Use "union" merge strategy for CHANGELOG 2015-08-10 19:27:22 -03:00
.gitignore second take at setuptools_scm 2017-04-19 19:40:42 +02:00
.travis.yml remove eol python from the ci config 2017-10-09 16:36:41 +02:00
AUTHORS Fix issue 2985. 2017-12-07 15:12:44 +00:00
CHANGELOG.rst Fix spelling of pytest in CHANGELOG 2017-12-08 09:04:42 -02:00
CONTRIBUTING.rst Update github "bugs" link 2017-11-25 17:44:58 +03:00
HOWTORELEASE.rst Add development guide to docs 2017-09-13 19:32:40 -03:00
LICENSE Update copyright date in LICENSE and README.rst 2017-06-13 14:58:07 +02:00
README.rst Remove code for unsupported Python versions 2017-10-10 08:54:56 +03:00
appveyor.yml remove eol python from the ci config 2017-10-09 16:36:41 +02:00
pyproject.toml Show "trivial" category in CHANGELOG 2017-06-23 12:33:50 -03:00
pytest.py remove preinit, its no longer needed 2017-07-31 13:44:05 +02:00
setup.cfg restore setuptools_scm write_to usage 2017-04-23 16:59:08 +02:00
setup.py Update pluggy pin to pluggy>=0.5,<0.7 after pluggy-0.6 release 2017-11-24 14:42:25 -02:00
tox.ini fix tox.ini comment typos 2017-12-09 13:34:57 +01:00

README.rst

.. image:: http://docs.pytest.org/en/latest/_static/pytest1.png
   :target: http://docs.pytest.org
   :align: center
   :alt: pytest

------

.. image:: https://img.shields.io/pypi/v/pytest.svg
    :target: https://pypi.python.org/pypi/pytest

.. image:: https://anaconda.org/conda-forge/pytest/badges/version.svg
    :target: https://anaconda.org/conda-forge/pytest

.. image:: https://img.shields.io/pypi/pyversions/pytest.svg
    :target: https://pypi.python.org/pypi/pytest

.. image:: https://img.shields.io/coveralls/pytest-dev/pytest/master.svg
    :target: https://coveralls.io/r/pytest-dev/pytest

.. image:: https://travis-ci.org/pytest-dev/pytest.svg?branch=master
    :target: https://travis-ci.org/pytest-dev/pytest

.. image:: https://ci.appveyor.com/api/projects/status/mrgbjaua7t33pg6b?svg=true
    :target: https://ci.appveyor.com/project/pytestbot/pytest

The ``pytest`` framework makes it easy to write small tests, yet
scales to support complex functional testing for applications and libraries.

An example of a simple test:

.. code-block:: python

    # content of test_sample.py
    def inc(x):
        return x + 1

    def test_answer():
        assert inc(3) == 5


To execute it::

    $ pytest
    ============================= test session starts =============================
    collected 1 items

    test_sample.py F

    ================================== FAILURES ===================================
    _________________________________ test_answer _________________________________

        def test_answer():
    >       assert inc(3) == 5
    E       assert 4 == 5
    E        +  where 4 = inc(3)

    test_sample.py:5: AssertionError
    ========================== 1 failed in 0.04 seconds ===========================


Due to ``pytest``'s detailed assertion introspection, only plain ``assert`` statements are used. See `getting-started <http://docs.pytest.org/en/latest/getting-started.html#our-first-test-run>`_ for more examples.


Features
--------

- Detailed info on failing `assert statements <http://docs.pytest.org/en/latest/assert.html>`_ (no need to remember ``self.assert*`` names);

- `Auto-discovery
  <http://docs.pytest.org/en/latest/goodpractices.html#python-test-discovery>`_
  of test modules and functions;

- `Modular fixtures <http://docs.pytest.org/en/latest/fixture.html>`_ for
  managing small or parametrized long-lived test resources;

- Can run `unittest <http://docs.pytest.org/en/latest/unittest.html>`_ (or trial),
  `nose <http://docs.pytest.org/en/latest/nose.html>`_ test suites out of the box;

- Python 2.7, Python 3.4+, PyPy 2.3, Jython 2.5 (untested);

- Rich plugin architecture, with over 315+ `external plugins <http://plugincompat.herokuapp.com>`_ and thriving community;


Documentation
-------------

For full documentation, including installation, tutorials and PDF documents, please see http://docs.pytest.org.


Bugs/Requests
-------------

Please use the `GitHub issue tracker <https://github.com/pytest-dev/pytest/issues>`_ to submit bugs or request features.


Changelog
---------

Consult the `Changelog <http://docs.pytest.org/en/latest/changelog.html>`__ page for fixes and enhancements of each version.


License
-------

Copyright Holger Krekel and others, 2004-2017.

Distributed under the terms of the `MIT`_ license, pytest is free and open source software.

.. _`MIT`: https://github.com/pytest-dev/pytest/blob/master/LICENSE