From 215295cdda607fd370f68bda928bd1207fc232c1 Mon Sep 17 00:00:00 2001 From: debugtalk Date: Fri, 19 Jun 2020 15:05:58 +0800 Subject: [PATCH] fix: path handling error when har2case har file and cwd != ProjectRootDir --- docs/CHANGELOG.md | 1 + httprunner/ext/har2case/__init__.py | 15 +-------------- httprunner/ext/har2case/core.py | 23 +++++++++++++++++++++-- httprunner/make.py | 3 ++- 4 files changed, 25 insertions(+), 17 deletions(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index f01a53b0..68906264 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -9,6 +9,7 @@ **Fixed** - change: do not raise error if failed to get client/server address info +- fix: path handling error when har2case har file and cwd != ProjectRootDir ## 3.0.13 (2020-06-17) diff --git a/httprunner/ext/har2case/__init__.py b/httprunner/ext/har2case/__init__.py index 4a503962..dcc316b5 100644 --- a/httprunner/ext/har2case/__init__.py +++ b/httprunner/ext/har2case/__init__.py @@ -8,14 +8,9 @@ Usage: $ hrun har2case demo.har -2y """ -import os -import sys -from loguru import logger -from sentry_sdk import capture_message - -from httprunner.compat import ensure_path_sep from httprunner.ext.har2case.core import HarParser +from sentry_sdk import capture_message def init_har2case_parser(subparsers): @@ -56,14 +51,6 @@ def init_har2case_parser(subparsers): def main_har2case(args): har_source_file = args.har_source_file - if not har_source_file or not har_source_file.endswith(".har"): - logger.error("HAR file not specified.") - sys.exit(1) - - har_source_file = ensure_path_sep(har_source_file) - if not os.path.isfile(har_source_file): - logger.error(f"HAR file not exists: {har_source_file}") - sys.exit(1) if args.to_yaml: output_file_type = "YAML" diff --git a/httprunner/ext/har2case/core.py b/httprunner/ext/har2case/core.py index acb62951..6f8a0ab9 100644 --- a/httprunner/ext/har2case/core.py +++ b/httprunner/ext/har2case/core.py @@ -3,7 +3,9 @@ import json import os import sys import urllib.parse as urlparse +from typing import Text +from httprunner.compat import ensure_path_sep from loguru import logger from sentry_sdk import capture_exception @@ -16,9 +18,26 @@ except ImportError: JSONDecodeError = ValueError +def ensure_file_path(path: Text) -> Text: + + if not path or not path.endswith(".har"): + logger.error("HAR file not specified.") + sys.exit(1) + + path = ensure_path_sep(path) + if not os.path.isfile(path): + logger.error(f"HAR file not exists: {path}") + sys.exit(1) + + if not os.path.isabs(path): + path = os.path.join(os.getcwd(), path) + + return path + + class HarParser(object): def __init__(self, har_file_path, filter_str=None, exclude_str=None): - self.har_file_path = har_file_path + self.har_file_path = ensure_file_path(har_file_path) self.filter_str = filter_str self.exclude_str = exclude_str or "" @@ -346,7 +365,7 @@ class HarParser(object): utils.dump_yaml(testcase, output_testcase_file) else: # default to generate pytest file - testcase["config"]["path"] = self.har_file_path + testcase["config"]["path"] = os.path.join(os.getcwd(), self.har_file_path) output_testcase_file = make_testcase(testcase) format_pytest_with_black(output_testcase_file) diff --git a/httprunner/make.py b/httprunner/make.py index d4804fdb..af9b1337 100644 --- a/httprunner/make.py +++ b/httprunner/make.py @@ -80,7 +80,8 @@ def __ensure_absolute(path: Text) -> Text: absolute_path = os.path.join(project_meta.RootDir, path) if not os.path.isfile(absolute_path): - raise exceptions.ParamsError(f"Invalid testcase file path: {absolute_path}") + logger.error(f"Invalid testcase file path: {absolute_path}") + sys.exit(1) return absolute_path