From bf6d4b63b52c6b449b6333b31e48959fd20cf532 Mon Sep 17 00:00:00 2001 From: debugtalk Date: Sun, 28 Jul 2019 11:53:18 +0800 Subject: [PATCH 1/5] fix #658: sys.exit 1 if any testcase failed --- CHANGELOG.md | 8 +++++++- httprunner/cli.py | 6 +++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 75fa1ffe..44880cb3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Release History -## 2.2.4 (2019-07-13) +## 2.2.5 (2019-07-28) + +**Fixed** + +- fix #658: sys.exit 1 if any testcase failed + +## 2.2.4 (2019-07-18) **Changed** diff --git a/httprunner/cli.py b/httprunner/cli.py index 0e65ea4a..02cb4c13 100644 --- a/httprunner/cli.py +++ b/httprunner/cli.py @@ -3,6 +3,7 @@ def main_hrun(): """ API test: parse command line options and run commands. """ + import sys import argparse from httprunner import logger from httprunner import __description__, __version__ @@ -85,7 +86,10 @@ def main_hrun(): logger.log_error("!!!!!!!!!! exception stage: {} !!!!!!!!!!".format(runner.exception_stage)) raise - return 0 + if runner.summary and runner.summary["success"]: + sys.exit(0) + else: + sys.exit(1) def main_locust(): From a2ca6c415b1df7c810ff7c01f78b77d2beb2b34c Mon Sep 17 00:00:00 2001 From: debugtalk Date: Sun, 28 Jul 2019 14:30:31 +0800 Subject: [PATCH 2/5] fix ModuleNotFoundError in debugging mode if httprunner uninstalled --- CHANGELOG.md | 1 + httprunner/cli.py | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 44880cb3..de5ccef3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ **Fixed** - fix #658: sys.exit 1 if any testcase failed +- fix ModuleNotFoundError in debugging mode if httprunner uninstalled ## 2.2.4 (2019-07-18) diff --git a/httprunner/cli.py b/httprunner/cli.py index 02cb4c13..03e0c336 100644 --- a/httprunner/cli.py +++ b/httprunner/cli.py @@ -186,9 +186,12 @@ if __name__ == "__main__": """ debugging mode """ import sys + import os + if len(sys.argv) == 0: exit(0) + sys.path.insert(0, os.getcwd()) cmd = sys.argv.pop(1) if cmd in ["hrun", "httprunner", "ate"]: @@ -200,7 +203,7 @@ if __name__ == "__main__": color_print("Miss debugging type.", "RED") example = "\n".join([ "e.g.", - "python main-debug.py hrun /path/to/testcase_file", - "python main-debug.py locusts -f /path/to/testcase_file" + "python -m httprunner.cli hrun /path/to/testcase_file", + "python -m httprunner.cli locusts -f /path/to/testcase_file" ]) color_print(example, "yellow") From f26c2a62fe5597cd8d547bc45e22a6ce2326e257 Mon Sep 17 00:00:00 2001 From: debugtalk Date: Sun, 28 Jul 2019 16:30:38 +0800 Subject: [PATCH 3/5] feat: log HttpRunner version when initializing --- .travis.yml | 2 ++ CHANGELOG.md | 4 ++++ httprunner/api.py | 9 +++++---- httprunner/logger.py | 3 +++ 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 1d917f66..c10a5ae7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,6 +13,8 @@ install: - pip install poetry - poetry install -vvv script: + - python -m httprunner.cli hrun -V + - python -m httprunner.cli hrun -h - poetry build - poetry run coverage run --source=httprunner -m unittest discover after_success: diff --git a/CHANGELOG.md b/CHANGELOG.md index de5ccef3..ccea9762 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## 2.2.5 (2019-07-28) +**Added** + +- log HttpRunner version when initializing + **Fixed** - fix #658: sys.exit 1 if any testcase failed diff --git a/httprunner/api.py b/httprunner/api.py index 0a70277e..3539e85b 100644 --- a/httprunner/api.py +++ b/httprunner/api.py @@ -3,8 +3,8 @@ import os import unittest -from httprunner import (exceptions, loader, logger, parser, report, runner, - utils, validator) +from httprunner import (__version__, exceptions, loader, logger, parser, + report, runner, utils, validator) class HttpRunner(object): @@ -22,6 +22,9 @@ class HttpRunner(object): log_file (str): log file path. """ + logger.setup_logger(log_level, log_file) + logger.log_info("HttpRunner version: {}".format(__version__)) + self.exception_stage = "initialize HttpRunner()" kwargs = { "failfast": failfast, @@ -33,8 +36,6 @@ class HttpRunner(object): self.report_template = report_template self.report_dir = report_dir self._summary = None - if log_file: - logger.setup_logger(log_level, log_file) def _add_tests(self, testcases): """ initialize testcase with Runner() and add to test suite. diff --git a/httprunner/logger.py b/httprunner/logger.py index 3aab4937..d6612da2 100644 --- a/httprunner/logger.py +++ b/httprunner/logger.py @@ -20,6 +20,9 @@ logger = logging.getLogger("httprunner") def setup_logger(log_level, log_file=None): """setup root logger with ColoredFormatter.""" + if len(logger.handlers) > 0: + return + level = getattr(logging, log_level.upper(), None) if not level: color_print("Invalid log level: %s" % log_level, "RED") From 999b63b4ea5b8c026e364bc82516450db2694f18 Mon Sep 17 00:00:00 2001 From: debugtalk Date: Sun, 28 Jul 2019 16:59:47 +0800 Subject: [PATCH 4/5] remove setup_logger in main_hrun() --- httprunner/cli.py | 13 +++++++------ httprunner/logger.py | 5 +---- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/httprunner/cli.py b/httprunner/cli.py index 03e0c336..f6000427 100644 --- a/httprunner/cli.py +++ b/httprunner/cli.py @@ -5,7 +5,7 @@ def main_hrun(): """ import sys import argparse - from httprunner import logger + from httprunner.logger import color_print from httprunner import __description__, __version__ from httprunner.api import HttpRunner from httprunner.compat import is_py2 @@ -52,13 +52,12 @@ def main_hrun(): help="Prettify JSON testcase format.") args = parser.parse_args() - logger.setup_logger(args.log_level, args.log_file) if is_py2: - logger.log_warning(get_python2_retire_msg()) + color_print(get_python2_retire_msg(), "YELLOW") if args.version: - logger.color_print("{}".format(__version__), "GREEN") + color_print("{}".format(__version__), "GREEN") exit(0) if args.validate: @@ -77,13 +76,15 @@ def main_hrun(): failfast=args.failfast, save_tests=args.save_tests, report_template=args.report_template, - report_dir=args.report_dir + report_dir=args.report_dir, + log_level=args.log_level, + log_file=args.log_file ) try: for path in args.testcase_paths: runner.run(path, dot_env_path=args.dot_env_path) except Exception: - logger.log_error("!!!!!!!!!! exception stage: {} !!!!!!!!!!".format(runner.exception_stage)) + color_print("!!!!!!!!!! exception stage: {} !!!!!!!!!!".format(runner.exception_stage), "YELLOW") raise if runner.summary and runner.summary["success"]: diff --git a/httprunner/logger.py b/httprunner/logger.py index d6612da2..62cb56c6 100644 --- a/httprunner/logger.py +++ b/httprunner/logger.py @@ -19,10 +19,7 @@ logger = logging.getLogger("httprunner") def setup_logger(log_level, log_file=None): - """setup root logger with ColoredFormatter.""" - if len(logger.handlers) > 0: - return - + """setup logger with ColoredFormatter.""" level = getattr(logging, log_level.upper(), None) if not level: color_print("Invalid log level: %s" % log_level, "RED") From 71eab6aa358334ea871b264dfaec2e5607fd1db4 Mon Sep 17 00:00:00 2001 From: debugtalk Date: Sun, 28 Jul 2019 17:11:51 +0800 Subject: [PATCH 5/5] bump version to 2.2.5 --- httprunner/__init__.py | 2 +- pyproject.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/httprunner/__init__.py b/httprunner/__init__.py index 8bf642e8..567610eb 100644 --- a/httprunner/__init__.py +++ b/httprunner/__init__.py @@ -1,4 +1,4 @@ -__version__ = "2.2.4" +__version__ = "2.2.5" __description__ = "One-stop solution for HTTP(S) testing." __all__ = ["__version__", "__description__"] diff --git a/pyproject.toml b/pyproject.toml index 12271961..89c2f95e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "httprunner" -version = "2.2.4" +version = "2.2.5" description = "One-stop solution for HTTP(S) testing." license = "Apache-2.0" readme = "README.md"