Go to file
Ronny Pfannschmidt c75bd08807 ensure tmp_path is always a realpath 2019-01-27 14:08:43 +01:00
.github Add rtd-bot configuration file [skip appveyor] [skip travis] 2019-01-13 20:38:19 -02:00
bench Apply reorder-python-imports to all files 2018-10-25 00:01:29 -07:00
changelog ensure tmp_path is always a realpath 2019-01-27 14:08:43 +01:00
doc/en Merge pull request #4091 from nicoddemus/setup-methods-as-fixtures-3094 2019-01-23 19:23:31 -02:00
extra Fix formatting of print() calls 2018-11-22 00:15:14 -08:00
scripts [skip travis] Use retry script on AppVeyor 2018-11-26 11:35:34 -02:00
src ensure tmp_path is always a realpath 2019-01-27 14:08:43 +01:00
testing fix #4680 - ensure tmpdir and tmp_path are the same 2019-01-27 13:05:34 +01:00
.coveragerc coverage: use modules for source 2018-09-19 07:46:19 +02:00
.gitattributes Add codecov support to AppVeyor and remove coveralls 2018-09-05 19:50:06 -03:00
.gitignore fix gitignore 2018-11-12 09:28:47 -06:00
.pre-commit-config.yaml Upgrade pyupgrade for crlf fixes (again) 2018-10-31 13:26:49 -07:00
.travis.yml Travis: move faster builds to baseline 2018-11-13 01:26:22 +01:00
AUTHORS Merge pull request #4511 from jhunkeler/junit-strict 2019-01-24 20:54:32 -02:00
CHANGELOG.rst Preparing release version 4.1.1 2019-01-12 00:55:12 +00:00
CITATION Fix linting issues 2018-07-14 16:35:33 +01:00
CONTRIBUTING.rst CI: use py37 instead of py36 by default 2018-11-12 03:16:52 +01:00
HOWTORELEASE.rst doc: fix HOWTORELEASE.rst 2018-11-03 21:26:08 +01:00
LICENSE Update copyright year 2019-01-04 10:37:07 -02:00
README.rst Update copyright year 2019-01-04 10:37:07 -02:00
appveyor.yml AppVeyor: run py{27,37}-xdist first 2018-11-13 01:33:05 +01:00
pyproject.toml fix #4177 - pin setuptools>=40.0 2018-10-17 20:08:07 +02:00
setup.cfg fix url quotes in setup.cfg metadata 2018-10-16 21:48:39 +02:00
setup.py setup.py: add "testing" extra requirement 2018-11-18 08:55:17 +01:00
tox.ini Uninstall hypothesis in regen tox env 2019-01-06 07:53:39 -08:00

README.rst

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


------

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

.. image:: https://img.shields.io/conda/vn/conda-forge/pytest.svg
    :target: https://anaconda.org/conda-forge/pytest

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

.. image:: https://codecov.io/gh/pytest-dev/pytest/branch/master/graph/badge.svg
    :target: https://codecov.io/gh/pytest-dev/pytest
    :alt: Code coverage Status

.. 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

.. image:: https://img.shields.io/badge/code%20style-black-000000.svg
    :target: https://github.com/ambv/black

.. image:: https://www.codetriage.com/pytest-dev/pytest/badges/users.svg
    :target: https://www.codetriage.com/pytest-dev/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 <https://docs.pytest.org/en/latest/getting-started.html#our-first-test-run>`_ for more examples.


Features
--------

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

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

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

- Can run `unittest <https://docs.pytest.org/en/latest/unittest.html>`_ (or trial),
  `nose <https://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 https://docs.pytest.org/en/latest/.


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 <https://docs.pytest.org/en/latest/changelog.html>`__ page for fixes and enhancements of each version.


License
-------

Copyright Holger Krekel and others, 2004-2019.

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