pytest
fixtures and utility functions that can be used to test layab
based REST API.
You can have access to the pytest-flask
client
fixture for your layab
based REST API.
Providing a service_module_name
pytest
fixture will give you access to a Flask test client and ensure SERVER_ENVIRONMENT
environment variable will be set to test
in order to load test specific configuration.
pytest-flask
must be installed for the following sample to work:
import pytest
from pytest_layab.flask import app
@pytest.fixture
def service_module_name():
# Considering main.py exists within a folder named my_module.
# And main.py contains a variable named application containing the Flask app.
return "my_module.main"
def test_get(client):
# Perform a GET request on your application on /my_endpoint endpoint.
response = client.get('/my_endpoint')
The following examples consider that you already have a test client.
from pytest_layab.flask import post_json
def test_json_post(client):
response = post_json(client, '/my_endpoint', {
'my_key': 'my_value',
})
from pytest_layab.flask import post_file
def test_file_post(client):
response = post_file(client, '/my_endpoint', 'file_name', 'file/path')
from pytest_layab.flask import put_json
def test_json_put(client):
response = put_json(client, '/my_endpoint', {
'my_key': 'my_value',
})
pytest_layab.flask.assert_201
function will ensure that the status code of the response is 201 and that the location
header contains the expected relative route.
from pytest_layab.flask import assert_201
def test_created_response(client):
response = None
assert_201(response, '/my_new_location')
pytest_layab.flask.assert_file
function will ensure that the response body will have the same content as in the provided file.
from pytest_layab.flask import assert_file
def test_with_content_in_a_file(client):
response = None
assert_file(response, 'path/to/file/with/expected/content')
You can mock current date-time.
import datetime
import module_where_datetime_is_used
_date_time_for_tests = datetime.datetime(2018, 10, 11, 15, 5, 5, 663979)
class DateTimeModuleMock:
class DateTimeMock(datetime.datetime):
@classmethod
def now(cls, tz=None):
return _date_time_for_tests.replace(tzinfo=tz)
class DateMock(datetime.date):
@classmethod
def today(cls):
return _date_time_for_tests.date()
timedelta = datetime.timedelta
timezone = datetime.timezone
datetime = DateTimeMock
date = DateMock
def test_date_mock(monkeypatch):
monkeypatch.setattr(module_where_datetime_is_used, "datetime", DateTimeModuleMock)
- python 3.6+ must be installed
- Use pip to install module:
python -m pip install pytest_layab