Skip to main content

pytest fixtures and assertions functions for layab

pypi version Build status Coverage Code style: black Number of tests Number of downloads

pytest fixtures and utility functions that can be used to test layab based REST API.

Flask

Test client

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')

Helper functions

The following examples consider that you already have a test client.

Posting JSON
from pytest_layab.flask import post_json


def test_json_post(client):
    response = post_json(client, '/my_endpoint', {
        'my_key': 'my_value',
    })
Posting file
from pytest_layab.flask import post_file


def test_file_post(client):
    response = post_file(client, '/my_endpoint', 'file_name', 'file/path')
Putting JSON
from pytest_layab.flask import put_json


def test_json_put(client):
    response = put_json(client, '/my_endpoint', {
        'my_key': 'my_value',
    })
Checking HTTP 201 (CREATED) response

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')
Checking response content

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')

Mocks

Date-Time

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)

How to install

  1. python 3.6+ must be installed
  2. Use pip to install module:
python -m pip install pytest_layab

Release files for pytest-layab 2.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pytest-layab 2.0.0
File Size Uploaded
pytest_layab-2.0.0.tar.gz 4.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pytest-layab 2.0.0
File Interpreter ABI Platform
pytest_layab-2.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 10.3 kB

Release files / pytest_layab-2.0.0.tar.gz

Download URL pytest_layab-2.0.0.tar.gz
Size 4.7 kB
Tags Source
SHA-256 checksum
How to use checksums
3ff93173b7dd6372fa080260d2f716449311b5241f47a159c57f25ebc2326d32
BLAKE2b-256 checksum
How to use checksums
44d2083c7a76bdb72f5d806cbb78fb23333308c3c80323cf3f0c6147fe2a4e79
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.50.0 CPython/3.7.1

Release files / pytest_layab-2.0.0-py3-none-any.whl

Download URL pytest_layab-2.0.0-py3-none-any.whl
Size 5.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9490299d0bf7f7463cae4b673bdb017442e614517704ca9dcebd1df4ad1028d0
BLAKE2b-256 checksum
How to use checksums
f6e04368c964a3d8504f571da70fe90ce3cf3ed2575040fec238ea447f440bfb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.50.0 CPython/3.7.1

Release history Release notifications | RSS feed

This release

2.0.0 This release

2 release files

1.3.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page