Test utilities and fixtures (testing)
- class message_ix_models.testing.CliRunner(charset: str = 'utf-8', env: Optional[Mapping[str, Optional[str]]] = None, echo_stdin: bool = False, mix_stderr: bool = True)[source]
Subclass of
click.testing.CliRunnerwith extra features.- assert_exit_0(*args, **kwargs)[source]
Assert a result has exit_code 0, or print its traceback.
If any args or kwargs are given,
invoke()is first called. Otherwise, the result from the last call ofinvoke()is used.- Raises
AssertionError – if the result exit code is not 0. The exception contains the traceback from within the CLI.
- Return type
click.testing.Result
- message_ix_models.testing.EXPORT_OMIT = ['aeei', 'cost_MESSAGE', 'demand_MESSAGE', 'demand', 'depr', 'esub', 'gdp_calibrate', 'grow', 'historical_gdp', 'kgdp', 'kpvs', 'lakl', 'land', 'lotol', 'mapping_macro_sector', 'MERtoPPP', 'prfconst', 'price_MESSAGE', 'ref_', 'sector']
Items with names that match (partially or fully) these names are omitted by
export_test_data().
- message_ix_models.testing.NIE = MarkDecorator(mark=Mark(name='xfail', args=(), kwargs={'raises': <class 'NotImplementedError'>}))
Shorthand for marking a parametrized test case that is expected to fail because it is not implemented.
- message_ix_models.testing.bare_res(request, context: message_ix_models.util.context.Context, solved: bool = False) message_ix.core.Scenario[source]
Return or create a Scenario containing the bare RES, for use in testing.
The Scenario has a model name like “MESSAGEix-GLOBIOM [regions] [start]:[duration]:[end]”, e.g. “MESSAGEix-GLOBIOM R14 2020:10:2110” (see
bare.name()) and the scenario name “baseline”.This function should:
only be called from within test code, i.e. in
message_data.tests.be called once for each test function, so that each test receives a fresh copy of the RES scenario.
- Parameters
request (.Request or None) – The pytest
requestfixture. If provided the pytest test node name is used for the scenario name of the returned Scenario.context (.Context) – Passed to
testing.bare_res().solved (bool, optional) – Return a solved Scenario.
- Returns
The scenario is a fresh clone, so can be modified freely without disturbing other tests.
- Return type
.Scenario
- message_ix_models.testing.export_test_data(context: message_ix_models.util.context.Context)[source]
Export a subset of data from a scenario, for use in tests.
The context settings
export_nodes(default: “R11_AFR” and “R11_CPA”) andexport_techs(default: “coal_ppl”) are used to filter the data exported. In addition, any item (set, parameter, variable, or equation) with a name matchingEXPORT_OMITor the context settingexport_excludeis discarded.The output is stored at
data/tests/model name_scenario name_techs.xlsxinmessage_data.See also
- message_ix_models.testing.mix_models_cli(request, session_context, tmp_env)[source]
A
CliRunnerobject that invokes the mix-models CLI.
- message_ix_models.testing.pytest_addoption(parser)[source]
Add two command-line options to pytest:
--local-cacheUse existing, local cache files in tests. This option can speed up tests that use the results of slow data loading/parsing. However, if cached values are not up to date with the current code, unexpected failure may occur.
--jvmargsAdditional arguments to give for the Java Virtual Machine used by
ixmp’sJDBCBackend. Used bysession_context().
- message_ix_models.testing.session_context(pytestconfig, tmp_env)[source]
A Context connected to a temporary, in-memory database.
Uses the
tmp_env()fixture from ixmp.
- message_ix_models.testing.test_context(request, session_context)[source]
A copy of
session_context()scoped to one test function.