From 48064b9004ca5a64db3bd183357d60f2904ec14e Mon Sep 17 00:00:00 2001 From: nee Date: Sat, 14 Sep 2019 15:36:01 +0800 Subject: [PATCH 1/2] feat: genernate html report with specified report file --- .gitignore | 3 +++ httprunner/api.py | 6 ++++-- httprunner/report.py | 7 +++++-- tests/test_api.py | 13 +++++++++++++ 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 31a72c46..7d2455c7 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,6 @@ logs/% .coverage locustfile.py site/ +.idea/ +reports/ +tests/reports/ diff --git a/httprunner/api.py b/httprunner/api.py index 3539e85b..43a6cf0c 100644 --- a/httprunner/api.py +++ b/httprunner/api.py @@ -10,7 +10,7 @@ from httprunner import (__version__, exceptions, loader, logger, parser, class HttpRunner(object): def __init__(self, failfast=False, save_tests=False, report_template=None, report_dir=None, - log_level="INFO", log_file=None): + log_level="INFO", log_file=None, report_file=None): """ initialize HttpRunner. Args: @@ -35,6 +35,7 @@ class HttpRunner(object): self.save_tests = save_tests self.report_template = report_template self.report_dir = report_dir + self.report_file = report_file self._summary = None def _add_tests(self, testcases): @@ -207,7 +208,8 @@ class HttpRunner(object): report_path = report.render_html_report( self._summary, self.report_template, - self.report_dir + self.report_dir, + self.report_file ) return report_path diff --git a/httprunner/report.py b/httprunner/report.py index 989e2b3b..15877b4c 100644 --- a/httprunner/report.py +++ b/httprunner/report.py @@ -271,7 +271,7 @@ def __stringify_meta_datas(meta_datas): __stringify_response(data["response"]) -def render_html_report(summary, report_template=None, report_dir=None): +def render_html_report(summary, report_template=None, report_dir=None, report_file=None): """ render html report with specified report name and template Args: @@ -298,7 +298,10 @@ def render_html_report(summary, report_template=None, report_dir=None): start_at_timestamp = int(summary["time"]["start_at"]) summary["time"]["start_datetime"] = datetime.fromtimestamp(start_at_timestamp).strftime('%Y-%m-%d %H:%M:%S') - report_path = os.path.join(report_dir, "{}.html".format(start_at_timestamp)) + if report_file: + report_path = os.path.join(report_dir, report_file) + else: + report_path = os.path.join(report_dir, "{}.html".format(start_at_timestamp)) with io.open(report_template, "r", encoding='utf-8') as fp_r: template_content = fp_r.read() diff --git a/tests/test_api.py b/tests/test_api.py index 8479695f..9cf176f3 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -190,6 +190,19 @@ class TestHttpRunner(ApiServerUnittest): self.assertGreater(len(os.listdir(report_save_dir)), 0) shutil.rmtree(report_save_dir) + def test_html_report_with_fixed_report_file(self): + report_save_dir = os.path.join(os.getcwd(), 'reports', "demo") + report_file = 'test.html' + runner = HttpRunner(failfast=True, report_dir=report_save_dir, report_file=report_file) + runner.run(self.testcase_cli_path) + summary = runner.summary + self.assertEqual(summary["stat"]["testcases"]["total"], 1) + self.assertEqual(summary["stat"]["teststeps"]["total"], 10) + self.assertEqual(summary["stat"]["teststeps"]["skipped"], 4) + self.assertEqual(len(os.listdir(report_save_dir)), 1) + self.assertTrue(os.path.isfile(os.path.join(report_save_dir, report_file))) + shutil.rmtree(report_save_dir) + def test_log_file(self): log_file_path = os.path.join(os.getcwd(), 'reports', "test_log_file.log") runner = HttpRunner(failfast=True, log_file=log_file_path) From cd02e72765056968aefe085cb252a6fdea0158a0 Mon Sep 17 00:00:00 2001 From: nee Date: Sat, 14 Sep 2019 16:22:06 +0800 Subject: [PATCH 2/2] cli support --report-file parameter. --- httprunner/cli.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/httprunner/cli.py b/httprunner/cli.py index f6000427..ca6385ec 100644 --- a/httprunner/cli.py +++ b/httprunner/cli.py @@ -35,6 +35,9 @@ def main_hrun(): parser.add_argument( '--report-dir', help="specify report save directory.") + parser.add_argument( + '--report-file', + help="specify report file name.") parser.add_argument( '--failfast', action='store_true', default=False, help="Stop the test run on the first error or failure.") @@ -78,7 +81,8 @@ def main_hrun(): report_template=args.report_template, report_dir=args.report_dir, log_level=args.log_level, - log_file=args.log_file + log_file=args.log_file, + report_file=args.report_file ) try: for path in args.testcase_paths: