A pytest plugin for simplifying ODC database tests
Project description
pytest-odc
A pytest plugin for simplifying Open Datacube database tests.
Testing Open Datacube Applications
Anyone writing applications using an ODC Database needs to be able to test their code. This requires an ODC Database containing a known set of data.
There's two challenges here:
- ODC requires a PostgreSQL server accessible anywhere test are run, which can be challenging to set up.
- The database should be reset every time a test is run, to make it possible to repeatedly run tests.
The Solution
This package provides reusable pytest fixtures, to make it easy to write test code against an ODC Database. It handles starting and stopping a temporary PostgreSQL server using Docker, initialising it for ODC use, and loading/wiping sets of test data on a per test module basis.
Steps to Create New Tests
-
Install the ODC Test Plugin into your Python environment.
pip install pytest-odc
-
Create at least one each of an ODC Metadata Type, Product and Dataset YAML files. These will be loaded into an ODC Database before your test code runs.
-
Create a pytest file using this template:
""" Template pytest module for testing ODC Code """ import pytest # UPDATE: these lists with the data you want loaded into your database # Each string is for a file, relative to this python module. METADATA_TYPES = ["metadata/eo3_metadata.yaml",] PRODUCTS = ["products/ga_ls8c_ard_3.odc-product.yaml",] DATASETS = ["datasets/ga_ls8c_ard_3-sample.yaml",] # Use the 'auto_odc_db' fixture to populate the database with sample data. pytestmark = pytest.mark.usefixtures("auto_odc_db") def test_my_odc_code(odc_db: "datacube.Datacube"): ### REPLACE: with your own test code my_datasets = odc_db.find_datasets(product='ga_ls8c_ard_3') assert len(my_datasets) == 3
-
Run your new tests.
pytest tests/
More Details / How it Works
The four provided pytest fixtures compose together to ensure an ODC Database is available and preloaded with test data for each test module.
Fixtures
postgresql_server
This fixture either:
- Runs a temporary PostgreSQL server using Docker
- Or checks that a test PostgreSQL server is already available via the
ODC_TEST_DB_URL
environment variable.
odc_db
This fixture provides a datacube.Datacube()
object configured to connect to the temporary test database.
It can be added to the parameters for a test for getting access to the temporary database.
odc_test_db
This fixture creates all the ODC Database tables.
auto_odc_db
This fixture should be used as a pytestmark autoload
, marking the test module as having variables named METADATA_TYPES
, PRODUCTS
and DATASETS
being lists of files to load into the test database.
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 Apache Software License 2.0 license, "pytest-odc" is free and open source software
Issues
If you encounter any problems, please file an issue along with a detailed description.
Release Process
rm -rf dist/
python -m build
twine upload --repository testpypi dist/*
twine upload dist/*
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file pytest-odc-0.2.0.tar.gz
.
File metadata
- Download URL: pytest-odc-0.2.0.tar.gz
- Upload date:
- Size: 10.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c9c91181741a277061b53f795385888b30f40dda9aac3f8db55b6592be99de2d |
|
MD5 | 7ed335e90f430ece2c423220a64641df |
|
BLAKE2b-256 | 61a61def7c7ea34e93c06d0458d23f0d44b2656bc66762771d5a06075b3b75e5 |
File details
Details for the file pytest_odc-0.2.0-py3-none-any.whl
.
File metadata
- Download URL: pytest_odc-0.2.0-py3-none-any.whl
- Upload date:
- Size: 11.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3f6fa7552b608ec38150777fa3dd026ef13bbc87b2804d516595691a6d17431b |
|
MD5 | a35b335b6ada4df8246b4c62eb656d1f |
|
BLAKE2b-256 | 952189b9681e0dd1d328358aba8aed38cefce13564c34ea6ea41fd4bfa371f73 |