pytest-flask
A set of py.test fixtures to test Flask applications.
Rank: #3681Downloads: 1,334,647 (30 days)Stars: 500Forks: 89
Description
pytest-flask
============
.. image:: https://img.shields.io/pypi/v/pytest-flask.svg
:target: https://pypi.python.org/pypi/pytest-flask
:alt: PyPi version
.. image:: https://img.shields.io/conda/vn/conda-forge/pytest-flask.svg
:target: https://anaconda.org/conda-forge/pytest-flask
:alt: conda-forge version
.. image:: https://github.com/pytest-dev/pytest-flask/workflows/build/badge.svg
:target: https://github.com/pytest-dev/pytest-flask/actions
:alt: CI status
.. image:: https://img.shields.io/pypi/pyversions/pytest-flask.svg
:target: https://pypi.org/project/pytest-flask
:alt: PyPi downloads
.. image:: https://readthedocs.org/projects/pytest-flask/badge/?version=latest
:target: https://pytest-flask.readthedocs.org/en/latest/
:alt: Documentation status
.. image:: https://img.shields.io/maintenance/yes/2022?color=blue
:target: https://github.com/pytest-dev/pytest-flask
:alt: Maintenance
.. image:: https://img.shields.io/github/last-commit/pytest-dev/pytest-flask?color=blue
:target: https://github.com/pytest-dev/pytest-flask/commits/master
:alt: GitHub last commit
.. image:: https://img.shields.io/github/issues-pr-closed-raw/pytest-dev/pytest-flask?color=blue
:target: https://github.com/pytest-dev/pytest-flask/pulls?q=is%3Apr+is%3Aclosed
:alt: GitHub closed pull requests
.. image:: https://img.shields.io/github/issues-closed/pytest-dev/pytest-flask?color=blue
:target: https://github.com/pytest-dev/pytest-flask/issues?q=is%3Aissue+is%3Aclosed
:alt: GitHub closed issues
.. image:: https://img.shields.io/pypi/dm/pytest-flask?color=blue
:target: https://pypi.org/project/pytest-flask/
:alt: PyPI - Downloads
.. image:: https://img.shields.io/github/languages/code-size/pytest-dev/pytest-flask?color=blue
:target: https://github.com/pytest-dev/pytest-flask
:alt: Code size
.. image:: https://img.shields.io/badge/license-MIT-blue.svg?color=blue
:target: https://github.com/pytest-dev/pytest-flask/blob/master/LICENSE
:alt: License
.. image:: https://img.shields.io/github/issues-raw/pytest-dev/pytest-flask.svg?color=blue
:target: https://github.com/pytest-dev/pytest-flask/issues
:alt: Issues
.. image:: https://img.shields.io/badge/code%20style-black-000000.svg
:target: https://github.com/ambv/black
:alt: style
An extension of `pytest`_ test runner which
provides a set of useful tools to simplify testing and development
of the Flask extensions and applications.
To view a more detailed list of extension features and examples go to
the `PyPI`_ overview page or
`package documentation`_.
How to start?
-------------
Considering the minimal flask `application factory`_ below in ``myapp.py`` as an example:
.. code-block:: python
from flask import Flask
def create_app():
# create a minimal app
app = Flask(__name__)
# simple hello world view
@app.route('/hello')
def hello():
return 'Hello, World!'
return app
You first need to define your application fixture in ``conftest.py``:
.. code-block:: python
from myapp import create_app
@pytest.fixture
def app():
app = create_app()
return app
Finally, install the extension with dependencies and run your test suite::
$ pip install pytest-flask
$ pytest
Contributing
------------
Don’t hesitate to create a `GitHub issue`_ for any bug or
suggestion. For more information check our contribution `guidelines`_.
.. _pytest: https://docs.pytest.org/en/stable/
.. _PyPI: https://pypi.python.org/pypi/pytest-flask
.. _Github issue: https://github.com/vitalk/pytest-flask/issues
.. _package documentation: http://pytest-flask.readthedocs.org/en/latest/
.. _guidelines: https://github.com/pytest-dev/pytest-flask/blob/master/CONTRIBUTING.rst
.. _application factory: https://flask.palletsprojects.com/patterns/appfactories/
.. _changelog:
Changelog
=========
1.3.0 (2023-10-23)
------------------
- Fix compatibility with ``Flask 3.0`` -- the consequence is that the deprecated and incompatible ``request_ctx`` has been removed.
1.2.1
------------------
- Fix bug in ``:meth:pytest_flask.fixtures.live_server``
where ``SESSION_COOKIE_DOMAIN`` was set to false due to
``original_server_name`` defaulting to "localhost".
The new default is "localhost.localdomain".
- Drop support for python 3.6 and 3.5
1.2.0 (2021-02-26)
------------------
- Remove deprecated ``:meth:live_server.url``
- fixture ``request_ctx is now deprecated``
and will be removed in the future
- ``JSONReponse.json`` removed in favour of
``Werkzeug.wrappers.Response.json``
1.1.0 (2020-11-08)
------------------
- Speedup live server start time. Use `socket` instead of server
pulling (`#58`_) to check server availability and add new
``--live-server-wait`` option to set the live server wait timeout.
Thanks to `@jadkik`_.
1.0.0 (2020-03-03)
------------------
**Important**
- ``live_server`` is now ``session``-scoped by default. This can be changed by using the ``live-server_scope`` option in your ``pytest.ini`` (`#113`_). Thanks `@havok2063`_ for the initial patch and `@TWood67`_ for finishing it up.
- pytest 5.2 or later is now required.
- Python 2.7 and 3.4 are no longer supported.
.. _@havok2063: https://github.com/havok2063
.. _@TWood67: https://github.com/TWood67
.. _#113: https://github.com/pytest-dev/pytest-flask/pull/113
0.15.1 (2020-02-03)
-------------------
- Fix ``ImportError`` with ``Werkzeug 1.0.0rc1`` (`#105`_).
.. _#105: https://github.com/pytest-dev/pytest-flask/pull/105
0.15.0 (2019-05-13)
-------------------
- Properly register the ``options`` marker (`#97`_).
.. _#97: https://github.com/pytest-dev/pytest-flask/pull/97
0.14.0 (2018-10-15)
-------------------
- New ``--live-server-host`` command-line option to set the host name used by
the ``live_server`` fixture.
Thanks `@o1da`_ for the PR (`#90`_).
.. _@o1da: https://github.com/o1da
.. _#90: https://github.com/pytest-dev/pytest-flask/pull/90
0.13.0 (2018-09-29)
-------------------
- ``JSONReponse`` now supports comparison directly with status codes:
.. code-block:: python
assert client.get('invalid-route', headers=[('Accept', 'application/json')]) == 404
Thanks `@dusktreader`_ for the PR (`#86`_).
.. _@dusktreader: https://github.com/dusktreader
.. _#86: https://github.com/pytest-dev/pytest-flask/pull/86
0.12.0 (2018-09-06)
-------------------
- ``pytest-flask`` now requires ``pytest>=3.6`` (`#84`_).
- Add new ``--live-server-port`` option to select the port the live server will use (`#82`_).
Thanks `@RazerM`_ for the PR.
- Now ``live_server`` will try to stop the server cleanly by emitting a ``SIGINT`` signal and
waiting 5 seconds for the server to shutdown. If the server is still running after 5 seconds,
it will be forcefully terminated. This behavior can be changed by passing
``--no-live-server-clean-stop`` in the command-line (`#49`_).
Thanks `@jadkik`_ for the PR.
- Internal fixes silence pytest warnings, more visible now with ``pytest-3.8.0`` (`#84`_).
.. _@jadkik: https://github.com/jadkik
.. _@RazerM: https://github.com/RazerM
.. _#49: https://github.com/pytest-dev/pytest-flask/issues/49
.. _#82: https://github.com/pytest-dev/pytest-flask/pull/82
.. _#84: https://github.com/pytest-dev/pytest-flask/pull/84
0.11.0 (compared to 0.10.0)
---------------------------
- Implement deployment using Travis, following in line with many other pytest plugins.
- Allow live server to handle concurrent requests (`#56`_), thanks to
`@mattwbarry`_ for the PR.
- Fix broken link to pytest documentation (`#50`_), thanks to
`@jineshpaloor`_ for the PR.
- Tox support (`#48`_), thanks to `@steenzout`_ for the PR.
- Add ``LICENSE`` into distribution (`#43`_), thanks to `@danstender`_.
- Minor typography improvements in documentation.
- Add changelog to documentation.
.. _#43: https://github.com/vitalk/pytest-flask/issues/43
.. _#48: https://github.com/pytest-dev/pytest-flask/pull/48
.. _#50: https://github.com/pytest-dev/pytest-flask/pull/50
.. _#56: https://github.com/pytest-dev/pytest-flask/pull/56
.. _#58: steenzouthttps://github.com/pytest-dev/pytest-flask/pull/58
.. _@danstender: https://github.com/danstender
.. _@jadkik: https://github.com/jadkik
.. _@jineshpaloor: https://github.com/jineshpaloor
.. _@mattwbarry: https://github.com/mattwbarry
.. _@steenzout: https://github.com/steenzout
0.10.0 (compared to 0.9.0)
--------------------------
- Add ``--start-live-server``/``--no-start-live-server`` options to prevent
live server from starting automatically (`#36`_), thanks to `@EliRibble`_.
- Fix title formatting in documentation.
.. _#36: https://github.com/vitalk/pytest-flask/issues/36
.. _@EliRibble: https://github.com/EliRibble
0.9.0 (compared to 0.8.1)
-------------------------
- Rename marker used to pass options to application, e.g. ``pytest.mark.app``
is now ``pytest.mark.options`` (`#35`_).
- Documentation badge points to the package documentation.
- Add Travis CI configuration to ensure the tests are passed in supported
environments (`#32`_).
.. _#32: https://github.com/vitalk/pytest-flask/issues/32
.. _#35: https://github.com/vitalk/pytest-flask/issues/35
0.8.1
-----
- Minor changes in documentation.
0.8.0
-----
- New ``request_ctx`` fixture which contains all request relevant
information (`#29`_).
.. _#29: https://github.com/vitalk/pytest-flask/issues/29
0.7.5
-----
- Use pytest ``monkeypath`` fixture to teardown application config (`#27`_).
.. _#27: https://github.com/vitalk/pytest-flask/issues/27
0.7.4
-----
- Better test coverage, e.g. tests for available fixtures and markers.
0.7.3
-----
- Use retina-ready badges in documentation (`#21`_).
.. _#21: https://github.com/vitalk/pytest-flask/issues/21
0.7.2
-----
- Use pytest ``monkeypatch`` fixture to rewrite live server name.
0.7.1
-----
- Single-sourcing package version (`#24`_), as per `"Python Pac