code: def test_print_cached_steps_and_running_steps(capsys):
      recipe = Recipe(profile="local")
      recipe.clean()
      recipe.run()
      captured = capsys.readouterr()
      output_info = captured.out
      run_step_pattern = "Running step {step}..."
      for step in _STEP_NAMES:
          # Check for printed message when every step is actually executed
          assert (
              re.search(run_step_pattern.format(step=step), output_info)
              is not None
          )
  
      recipe.run()  # cached
      captured = capsys.readouterr()
      output_info = captured.err
      cached_step_pattern = "{step}: No changes. Skipping."
      cached_steps = ", ".join(_STEP_NAMES)
      # Check for printed message when steps are cached
      assert (
          re.search(
              cached_step_pattern.format(step=cached_steps), output_info
          )
          is not None
      )
  
imports: import os
  import pathlib
  import re
  import shutil
  from unittest import mock
  import pandas
  import pytest
  import yaml
  import mlflow
  from mlflow.entities import Run, SourceType
  from mlflow.entities.model_registry import ModelVersion
  from mlflow.exceptions import MlflowException
  from mlflow.recipes.recipe import Recipe
  from mlflow.recipes.step import BaseStep
  from mlflow.recipes.utils.execution import _MAKEFILE_FORMAT_STRING, _get_execution_directory_basename, get_step_output_path
  from mlflow.tracking.client import MlflowClient
  from mlflow.tracking.context.registry import resolve_tags
  from mlflow.utils.file_utils import path_to_local_file_uri
  from mlflow.utils.mlflow_tags import LEGACY_MLFLOW_GIT_REPO_URL, MLFLOW_GIT_COMMIT, MLFLOW_GIT_REPO_URL, MLFLOW_SOURCE_NAME, MLFLOW_SOURCE_TYPE
  from tests.recipes.helper_functions import chdir, list_all_artifacts
label_desc: Use image node_id 12 for calling a global function with example usage: test_print_cached_steps_and_running_steps(capsys) without return types