Files

Adding examples unit tests to pytest test suite

Two types of test runs for code in examples directory are supported:

  • Examples run by mlflow run
  • Examples run by another command, such as the python interpreter

Each of these types of runs are implemented using @pytest.mark.parametrize decorator. Adding a new example to test involves updating the decorator list as described below.

For purpose of discussion, new_example_dir designates the directory the example code is found, i.e., it is located in examples/new_example_dir.

Examples that utilize mlflow run construct

The @pytest.mark.mark.parametrize decorator for def test_mlflow_run_example(directory, params): is updated.

If the example is executed by cd examples/new_example_dir && mlflow run . -P param1=99 -P param2=3, then this tuple is added to the decorator list

("new_example_dir", ["-P", "param1=123", "-P", "param2=99"])

as shown below

@pytest.mark.parametrize(("directory", "params"), [
    ("sklearn_elasticnet_wine", ["-P", "alpha=0.5"]),
    (os.path.join("sklearn_elasticnet_diabetes", "linux"), []),
    ("new_example_dir", ["-P", "param1=123", "-P", "param2=99"]),
])
def test_mlflow_run_example(directory, params):

The tuple for an example requiring no parameters is simply:

("new_example_dir", []),

Examples that are executed with another command

For an example that is not run by mlflow run, the list in @pytest.mark.parametrize decorator for test_command_example(tmpdir, directory, command): is updated.

Examples invoked by cd examples/new_example_dir && python train.py require this tuple added to the decorator's list

("new_example_dir", ["python", "train.py"]),

as shown below

@pytest.mark.parametrize(("directory", "command"), [
    ('sklearn_logistic_regression', ['python', 'train.py']),
    ('h2o', ['python', 'random_forest.py']),
    ('quickstart', ['python', 'mlflow_tracking.py']),
    ("new_example_dir", ["python", "train.py"]),
])
def test_command_example(tmpdir, directory, command):

If the example requires arguments to run, i.e., python train.py arg1 arg2, then the tuple would look like this

('new_example_dir', ['python', 'train.py', 'arg1', 'arg2'])