pytest fixtures and assertions functions for layab
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
- python 3.6+ must be installed
- 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)
| File | Size | Uploaded | |
|---|---|---|---|
| pytest_layab-2.0.0.tar.gz | 4.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|