def METHOD_NAME(artifacts_dir, test_dir, pattern, exclude_pattern,
                   jmeter_path, env_name, monit, compare_local):
    """Collect test suites, run them and generate reports"""
    logger.info("Artifacts will be stored in directory %s", artifacts_dir)
    test_dirs = get_sub_dirs(test_dir, exclude_list=[], include_pattern=pattern,
                             exclude_pattern=exclude_pattern)
    if not test_dirs:
        logger.info("No test cases are collected...Exiting.")
        sys.exit(3)
    else:
        logger.info("Collected tests %s", test_dirs)
    with ExecutionEnv(MONITORING_AGENT, artifacts_dir, env_name, compare_local, monit) as prt:
        pre_command = 'export PYTHONPATH={}:$PYTHONPATH;'.format(os.path.join(str(ROOT_PATH), "agents"))
        for suite_name in tqdm(test_dirs, desc="Test Suites"):
            with Timer("Test suite {} execution time".format(suite_name)) as t:
                suite_artifacts_dir = os.path.join(artifacts_dir, suite_name)
                options_str = get_taurus_options(suite_artifacts_dir, jmeter_path)
                env_yaml_path = os.path.join(test_dir, suite_name, "environments", "{}.yaml".format(env_name))
                env_yaml_path = "" if not os.path.exists(env_yaml_path) else env_yaml_path
                test_file = os.path.join(test_dir, suite_name, "{}.yaml".format(suite_name))
                with x2junit.X2Junit(suite_name, suite_artifacts_dir, prt.reporter, t, env_name) as s:
                    s.code, s.err = run_process("{} bzt {} {} {} {}".format(pre_command, options_str,
                                                                            test_file, env_yaml_path,
                                                                            GLOBAL_CONFIG_PATH))
                    update_taurus_metric_files(suite_artifacts_dir, test_file)