Merge pull request #704 from terryso/master

feat: generate html report with specified report file
This commit is contained in:
debugtalk
2019-09-19 00:53:52 +08:00
committed by GitHub
4 changed files with 27 additions and 5 deletions

View File

@@ -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

View File

@@ -36,6 +36,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.")
@@ -79,7 +82,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:

View File

@@ -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()

View File

@@ -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)