diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 8ed660b9..bff5a16a 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,5 +1,11 @@ # Release History +## 2.5.0 (2019-12-30) + +**Changed** + +- refactor: use loader.load_cases to validate test files + ## 2.4.9 (2019-12-29) **Added** diff --git a/httprunner/cli.py b/httprunner/cli.py index 5e8a5576..1314cb8a 100644 --- a/httprunner/cli.py +++ b/httprunner/cli.py @@ -4,11 +4,11 @@ import sys from sentry_sdk import capture_exception -from httprunner import __description__, __version__ +from httprunner import __description__, __version__, exceptions from httprunner.api import HttpRunner from httprunner.compat import is_py2 -from httprunner.loader import validate_test_file -from httprunner.logger import color_print +from httprunner.loader import load_cases +from httprunner.logger import color_print, log_error from httprunner.report import gen_html_report from httprunner.utils import (create_scaffold, get_python2_retire_msg, prettify_json_file) @@ -73,8 +73,17 @@ def main(): sys.exit(0) if args.validate: - validate_test_file(args.validate) + for validate_path in args.validate: + try: + color_print("validate test file: {}".format(validate_path), "GREEN") + load_cases(validate_path, args.dot_env_path) + except exceptions.MyBaseError as ex: + log_error(str(ex)) + continue + + color_print("done!", "BLUE") sys.exit(0) + if args.prettify: prettify_json_file(args.prettify) sys.exit(0) diff --git a/httprunner/loader/__init__.py b/httprunner/loader/__init__.py index 79fc4a3c..8c6320b2 100644 --- a/httprunner/loader/__init__.py +++ b/httprunner/loader/__init__.py @@ -8,7 +8,7 @@ HttpRunner loader """ -from httprunner.loader.check import is_testcase_path, is_testcases, validate_test_file +from httprunner.loader.check import is_testcase_path, is_testcases from httprunner.loader.locate import get_project_working_directory as get_pwd from httprunner.loader.load import load_csv_file, load_builtin_functions from httprunner.loader.buildup import load_cases, load_project_data @@ -16,7 +16,6 @@ from httprunner.loader.buildup import load_cases, load_project_data __all__ = [ "is_testcase_path", "is_testcases", - "validate_test_file", "get_pwd", "load_csv_file", "load_builtin_functions", diff --git a/httprunner/loader/check.py b/httprunner/loader/check.py index 4e5943b3..3d535c9d 100644 --- a/httprunner/loader/check.py +++ b/httprunner/loader/check.py @@ -1,5 +1,3 @@ -import io -import json import os import types @@ -149,25 +147,6 @@ def check_testcase_format(file_path, content): raise exceptions.FileFormatError(err_msg) -def validate_test_file(file_list): - """ validate JSON testcase format - """ - for test_file in set(file_list): - if not test_file.endswith(".json"): - logger.log_warning("Only JSON file format can be validated, skip: {}".format(test_file)) - continue - - logger.color_print("Start to validate JSON file: {}".format(test_file), "GREEN") - - with io.open(test_file) as stream: - try: - json.load(stream) - except ValueError as e: - raise SystemExit(e) - - print("OK") - - def is_function(item): """ Takes item object, returns True if it is a function. """ diff --git a/httprunner/loader/load.py b/httprunner/loader/load.py index 3b783856..287b2560 100644 --- a/httprunner/loader/load.py +++ b/httprunner/loader/load.py @@ -22,7 +22,12 @@ def _load_yaml_file(yaml_file): """ load yaml file and check file content format """ with io.open(yaml_file, 'r', encoding='utf-8') as stream: - yaml_content = yaml.load(stream) + try: + yaml_content = yaml.load(stream) + except yaml.YAMLError as ex: + logger.log_error(str(ex)) + raise exceptions.FileFormatError + check_testcase_format(yaml_file, yaml_content) return yaml_content