AndreyErmilov / pytest-mock-server

Mock server plugin for pytest
MIT License
27 stars 5 forks source link
mock-server pytest pytest-plugin server

================== pytest-mock-server

.. image:: https://img.shields.io/pypi/v/pytest-mock-server.svg :target: https://pypi.org/project/pytest-mock-server :alt: PyPI version

.. image:: https://img.shields.io/pypi/pyversions/pytest-mock-server.svg :target: https://pypi.org/project/pytest-mock-server :alt: Python versions

.. image:: https://travis-ci.org/AndreyErmilov/pytest-mock-server.svg?branch=master :target: https://travis-ci.org/AndreyErmilov/pytest-mock-server :alt: See Build Status on Travis CI

Mock server plugin for pytest


Installation

You can install "pytest-mock-server" via pip from PyPI::

$ pip install pytest-mock-server

Usage

One handler

.. code-block:: python

  import pytest
  import requests

  @pytest.mark.server(url='/v1/books/', response=[{'id': 1}], method='GET')
  def test_handler_responses():
      response = requests.get('http://localhost:5000/v1/books/')
      assert response.status_code == 200
      assert response.json() == [{'id': 1}]

More than one handlers

.. code-block:: python

import pytest import requests

@pytest.mark.server(url='/v1/books/', response=[{'id': 1}], method='GET') @pytest.mark.server(url='/v1/books//', response={'id': 1}, method='GET') def test_handler_responses(): response = requests.get('http://localhost:5000/v1/books/') assert response.status_code == 200 assert response.json() == [{'id': 1}] response = requests.get('http://localhost:5000/v1/books/1/') assert response.status_code == 200 assert response.json() == {'id': 1}

Callback executes before response returns

.. code-block:: python

  import pytest
  import requests
  import time

  def sleep_two(*args, **kwargs):
      time.sleep(2)

  @pytest.mark.server(url='/v1/books/', response={}, callback=sleep_two)
  def test_handler_responses():
      """Ensures Timeouts works"""
      with pytest.raises(requests.exceptions.Timeout):
          response = requests.get('http://localhost:5000/v1/books/', timeout=1)

Custom settings for server

.. code-block:: python

import pytest import requests

@pytest.mark.server(url='/v1/books/', response={}) @pytest.mark.server_settings(port=8000) def test_handler_responses(): response = requests.get('http://localhost:8000/v1/books/') assert response.status_code == 200 assert response.json() == {}

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-mock-server" is free and open source software

Issues

If you encounter any problems, please file an issue_ along with a detailed description.

.. MIT: http://opensource.org/licenses/MIT .. file an issue: https://github.com/AndreyErmilov/pytest-mock-server/issues .. tox: https://tox.readthedocs.io/en/latest/ .. pip: https://pypi.org/project/pip/ .. _PyPI: https://pypi.org/project