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 75fa1ffe..ccea9762 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,17 @@ # Release History -## 2.2.4 (2019-07-13) +## 2.2.5 (2019-07-28) + +**Added** + +- log HttpRunner version when initializing + +**Fixed** + +- fix #658: sys.exit 1 if any testcase failed +- fix ModuleNotFoundError in debugging mode if httprunner uninstalled + +## 2.2.4 (2019-07-18) **Changed** 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/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/cli.py b/httprunner/cli.py index 0e65ea4a..f6000427 100644 --- a/httprunner/cli.py +++ b/httprunner/cli.py @@ -3,8 +3,9 @@ def main_hrun(): """ API test: parse command line options and run commands. """ + 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 @@ -51,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: @@ -76,16 +76,21 @@ 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 - return 0 + if runner.summary and runner.summary["success"]: + sys.exit(0) + else: + sys.exit(1) def main_locust(): @@ -182,9 +187,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"]: @@ -196,7 +204,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") diff --git a/httprunner/logger.py b/httprunner/logger.py index 3aab4937..62cb56c6 100644 --- a/httprunner/logger.py +++ b/httprunner/logger.py @@ -19,7 +19,7 @@ logger = logging.getLogger("httprunner") def setup_logger(log_level, log_file=None): - """setup root logger with ColoredFormatter.""" + """setup logger with ColoredFormatter.""" level = getattr(logging, log_level.upper(), None) if not level: color_print("Invalid log level: %s" % log_level, "RED") 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"