On this page:
A high-level introduction, to how testing supports validity, reproducibility, interoperability, and reusability, in
message_ix_modelsand related packages.
The code in
model.bare generates a “bare” reference energy system.
This is a Scenario that has the same structure (ixmp ‘sets’) as actual instances of the MESSAGEix-GLOBIOM global model, but contains no data (ixmp ‘parameter’ values).
Code that operates on the global model can be tested on the bare RES; if it works on that scenario, this is one indication (necessary, but not always sufficient) that it should work on fully-populated scenarios.
Such tests are faster and lighter than testing on fully-populated scenarios, and make it easier to isolate errors in the code that is being tested.
Test suite (
The following is automatically generated documentation of all modules, test classes, functions, and fixtures in the test suite. Each test should have a docstring explaining what it checks.
Test suite for
Running the test suite
Some notes for running the test suite.
cached() is used to cache the data resulting from slow operations, like parsing large input files.
Data are stored in a location described by the
The test suite interacts with caches in two ways:
--local-cache: Giving this option causes pytest to use whatever cache directory is configured for normal runs/usage of
By default (without
--local-cache), the test suite uses pytest’s built-in cache fixture. This creates and uses a temporary directory, usually
.pytest_cache/d/cache/within the repository root. This location is used only by tests, and not by normal runs/usage of the code.
In either case:
The tests use existing cached data in these locations and skip over code that generates this data. If the generating code is changed, the cached data must be deleted in order to actually check that the code runs properly.
Running the test suite with
--local-cachecauses the local cache to be populated, and this will affect subsequent runs.
The continuous integration (below) services don’t preserve caches, so code always runs.
The test suite (
message_ix_models.tests) is run using GitHub Actions for new commits on the
main branch, or on any branch associated with a pull request.
Because it is closed-source and requires access to internal IIASA resources, including databases, continuous integration for
message_data is handled by an internal server running TeamCity: https://ene-builds.iiasa.ac.at/project/message (requires authorization)
Prepare data for testing
export-test-data CLI command:
mix-models --url="ixmp://ixmp-dev/ENGAGE_SSP2_v4.1.7/baseline" export-test-data
See also the documentation for
Use the --exclude, --nodes, and --techs options to control the content of the resulting file.