diff --git a/httprunner/api.py b/httprunner/api.py index 15edefc6..d0190388 100644 --- a/httprunner/api.py +++ b/httprunner/api.py @@ -121,7 +121,14 @@ class HttpRunner(object): """ summary = { "success": True, - "stat": {}, + "stat": { + "testcases": { + "total": len(tests_results), + "success": 0, + "fail": 0 + }, + "teststeps": {} + }, "time": {}, "platform": report.get_platform(), "details": [] @@ -131,6 +138,11 @@ class HttpRunner(object): testcase, result = tests_result testcase_summary = report.get_summary(result) + if testcase_summary["success"]: + summary["stat"]["testcases"]["success"] += 1 + else: + summary["stat"]["testcases"]["fail"] += 1 + summary["success"] &= testcase_summary["success"] testcase_summary["name"] = testcase.config.get("name") @@ -138,7 +150,7 @@ class HttpRunner(object): utils.print_io(in_out) testcase_summary["in_out"] = in_out - report.aggregate_stat(summary["stat"], testcase_summary["stat"]) + report.aggregate_stat(summary["stat"]["teststeps"], testcase_summary["stat"]) report.aggregate_stat(summary["time"], testcase_summary["time"]) summary["details"].append(testcase_summary) diff --git a/httprunner/report.py b/httprunner/report.py index 23feb524..19d1581a 100644 --- a/httprunner/report.py +++ b/httprunner/report.py @@ -33,11 +33,21 @@ def get_summary(result): Args: result (instance): HtmlTestResult() instance + Returns: + dict: summary extracted from result. + + { + "success": True, + "stat": {}, + "time": {}, + "records": [] + } + """ summary = { "success": result.wasSuccessful(), "stat": { - 'testsRun': result.testsRun, + 'total': result.testsRun, 'failures': len(result.failures), 'errors': len(result.errors), 'skipped': len(result.skipped), @@ -45,7 +55,7 @@ def get_summary(result): 'unexpectedSuccesses': len(result.unexpectedSuccesses) } } - summary["stat"]["successes"] = summary["stat"]["testsRun"] \ + summary["stat"]["successes"] = summary["stat"]["total"] \ - summary["stat"]["failures"] \ - summary["stat"]["errors"] \ - summary["stat"]["skipped"] \ diff --git a/httprunner/templates/report_template.html b/httprunner/templates/report_template.html index 8e4414d1..36b11bfd 100644 --- a/httprunner/templates/report_template.html +++ b/httprunner/templates/report_template.html @@ -153,7 +153,6 @@

Summary

- @@ -169,22 +168,14 @@ - - - - - - + + + - - - - - - + + +
START AT {{time.start_datetime}}{{ platform.platform }}
TOTALSUCCESSFAILEDERRORSKIPPEDSTATTESTCASES (success/fail)TESTSTEPS (success/fail/error/skip)
{{stat.testsRun}}{{stat.successes}}{{stat.failures}}{{stat.errors}}{{stat.skipped}}total (details) =>{{stat.testcases.total}} ({{stat.testcases.success}}/{{stat.testcases.fail}}){{stat.teststeps.total}} ({{stat.teststeps.successes}}/{{stat.teststeps.failures}}/{{stat.teststeps.errors}}/{{stat.teststeps.skipped}})
@@ -195,7 +186,7 @@

{{test_suite_summary.name}}

- + diff --git a/tests/test_api.py b/tests/test_api.py index a43f2294..ba2b0ad0 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -75,19 +75,21 @@ class TestHttpRunner(ApiServerUnittest): def test_text_run_times(self): self.runner.run(self.testcase_cli_path) - self.assertEqual(self.runner.summary["stat"]["testsRun"], 10) + self.assertEqual(self.runner.summary["stat"]["testcases"]["total"], 1) + self.assertEqual(self.runner.summary["stat"]["teststeps"]["total"], 10) def test_text_skip(self): self.runner.run(self.testcase_cli_path) - self.assertEqual(self.runner.summary["stat"]["skipped"], 4) + self.assertEqual(self.runner.summary["stat"]["teststeps"]["skipped"], 4) def test_html_report(self): report_save_dir = os.path.join(os.getcwd(), 'reports', "demo") runner = HttpRunner(failfast=True, report_dir=report_save_dir) runner.run(self.testcase_cli_path) summary = runner.summary - self.assertEqual(summary["stat"]["testsRun"], 10) - self.assertEqual(summary["stat"]["skipped"], 4) + self.assertEqual(summary["stat"]["testcases"]["total"], 1) + self.assertEqual(summary["stat"]["teststeps"]["total"], 10) + self.assertEqual(summary["stat"]["teststeps"]["skipped"], 4) self.assertGreater(len(os.listdir(report_save_dir)), 0) shutil.rmtree(report_save_dir) @@ -102,7 +104,8 @@ class TestHttpRunner(ApiServerUnittest): self.runner.run_tests(self.tests_mapping) summary = self.runner.summary self.assertTrue(summary["success"]) - self.assertEqual(summary["stat"]["testsRun"], 2) + self.assertEqual(summary["stat"]["testcases"]["total"], 1) + self.assertEqual(summary["stat"]["teststeps"]["total"], 2) self.assertIn("details", summary) self.assertIn("records", summary["details"][0]) @@ -110,7 +113,8 @@ class TestHttpRunner(ApiServerUnittest): self.runner.run("tests/httpbin/upload.yml") summary = self.runner.summary self.assertTrue(summary["success"]) - self.assertEqual(summary["stat"]["testsRun"], 1) + self.assertEqual(summary["stat"]["testcases"]["total"], 1) + self.assertEqual(summary["stat"]["teststeps"]["total"], 1) self.assertIn("details", summary) self.assertIn("records", summary["details"][0]) @@ -149,7 +153,8 @@ class TestHttpRunner(ApiServerUnittest): self.runner.run_tests(tests_mapping) summary = self.runner.summary self.assertTrue(summary["success"]) - self.assertEqual(summary["stat"]["testsRun"], 1) + self.assertEqual(summary["stat"]["testcases"]["total"], 1) + self.assertEqual(summary["stat"]["teststeps"]["total"], 1) self.assertEqual( summary["details"][0]["records"][0]["meta_datas"]["data"][0]["response"]["json"]["data"], "abc" @@ -167,13 +172,15 @@ class TestHttpRunner(ApiServerUnittest): summary = self.runner.summary self.assertTrue(summary["success"]) self.assertEqual(summary["details"][0]["records"][0]["name"], "get token (setup)") - self.assertEqual(summary["stat"]["testsRun"], 2) + self.assertEqual(summary["stat"]["testcases"]["total"], 1) + self.assertEqual(summary["stat"]["teststeps"]["total"], 2) def test_testcase_layer_with_testcase(self): self.runner.run("tests/testsuites/create_users.yml") summary = self.runner.summary self.assertTrue(summary["success"]) - self.assertEqual(summary["stat"]["testsRun"], 8) + self.assertEqual(summary["stat"]["testcases"]["total"], 2) + self.assertEqual(summary["stat"]["teststeps"]["total"], 8) def test_run_httprunner_with_hooks(self): testcase_file_path = os.path.join( @@ -255,7 +262,7 @@ class TestHttpRunner(ApiServerUnittest): self.runner.run_tests(tests_mapping) summary = self.runner.summary self.assertFalse(summary["success"]) - self.assertEqual(summary["stat"]["errors"], 1) + self.assertEqual(summary["stat"]["teststeps"]["errors"], 1) def test_run_httprunner_with_teardown_hooks_error(self): testcases = [ @@ -286,23 +293,25 @@ class TestHttpRunner(ApiServerUnittest): self.runner.run_tests(tests_mapping) summary = self.runner.summary self.assertFalse(summary["success"]) - self.assertEqual(summary["stat"]["errors"], 1) + self.assertEqual(summary["stat"]["teststeps"]["errors"], 1) def test_run_api(self): path = "tests/httpbin/api/get_headers.yml" self.runner.run(path) summary = self.runner.summary self.assertTrue(summary["success"]) - self.assertEqual(summary["stat"]["testsRun"], 1) - self.assertEqual(summary["stat"]["successes"], 1) + self.assertEqual(summary["stat"]["testcases"]["total"], 1) + self.assertEqual(summary["stat"]["teststeps"]["total"], 1) + self.assertEqual(summary["stat"]["teststeps"]["successes"], 1) def test_request_302_logs(self): path = "tests/httpbin/api/302_redirect.yml" self.runner.run(path) summary = self.runner.summary self.assertTrue(summary["success"]) - self.assertEqual(summary["stat"]["testsRun"], 1) - self.assertEqual(summary["stat"]["successes"], 1) + self.assertEqual(summary["stat"]["testcases"]["total"], 1) + self.assertEqual(summary["stat"]["teststeps"]["total"], 1) + self.assertEqual(summary["stat"]["teststeps"]["successes"], 1) req_resp_data = summary["details"][0]["records"][0]["meta_datas"]["data"] self.assertEqual(len(req_resp_data), 2) @@ -314,8 +323,9 @@ class TestHttpRunner(ApiServerUnittest): self.runner.run(path) summary = self.runner.summary self.assertTrue(summary["success"]) - self.assertEqual(summary["stat"]["testsRun"], 1) - self.assertEqual(summary["stat"]["successes"], 1) + self.assertEqual(summary["stat"]["testcases"]["total"], 1) + self.assertEqual(summary["stat"]["teststeps"]["total"], 1) + self.assertEqual(summary["stat"]["teststeps"]["successes"], 1) req_resp_data = summary["details"][0]["records"][0]["meta_datas"]["data"] self.assertEqual(len(req_resp_data), 2) @@ -329,19 +339,22 @@ class TestHttpRunner(ApiServerUnittest): self.runner.run(api_folder) summary = self.runner.summary self.assertTrue(summary["success"]) - self.assertEqual(summary["stat"]["testsRun"], 2) - self.assertEqual(summary["stat"]["successes"], 2) + self.assertEqual(summary["stat"]["testcases"]["total"], 2) + self.assertEqual(summary["stat"]["teststeps"]["total"], 2) + self.assertEqual(summary["stat"]["teststeps"]["successes"], 2) self.assertEqual(len(summary["details"]), 2) - self.assertEqual(summary["details"][0]["stat"]["testsRun"], 1) - self.assertEqual(summary["details"][1]["stat"]["testsRun"], 1) + self.assertEqual(summary["details"][0]["stat"]["total"], 1) + self.assertEqual(summary["details"][1]["stat"]["total"], 1) def test_run_testcase_hardcode(self): for testcase_file_path in self.testcase_file_path_list: self.runner.run(testcase_file_path) summary = self.runner.summary self.assertTrue(summary["success"]) - self.assertEqual(summary["stat"]["testsRun"], 3) - self.assertEqual(summary["stat"]["successes"], 3) + self.assertEqual(summary["stat"]["testcases"]["total"], 1) + self.assertEqual(summary["stat"]["teststeps"]["total"], 3) + self.assertEqual(summary["stat"]["teststeps"]["successes"], 3) + def test_run_testcase_template_variables(self): testcase_file_path = os.path.join( @@ -395,7 +408,9 @@ class TestHttpRunner(ApiServerUnittest): summary = self.runner.summary self.assertTrue(summary["success"]) self.assertEqual(len(summary["details"]), 3 * 2) - self.assertEqual(summary["stat"]["testsRun"], 3 * 2 * 4) + + self.assertEqual(summary["stat"]["testcases"]["total"], 6) + self.assertEqual(summary["stat"]["teststeps"]["total"], 3 * 2 * 4) self.assertEqual( summary["details"][0]["name"], "create user 101 and check result for TESTSUITE_X1." @@ -405,7 +420,7 @@ class TestHttpRunner(ApiServerUnittest): "create user 103 and check result for TESTSUITE_X2." ) self.assertEqual( - summary["details"][0]["stat"]["testsRun"], + summary["details"][0]["stat"]["total"], 4 ) records_name_list = [
TOTAL: {{test_suite_summary.stat.testsRun}}TOTAL: {{test_suite_summary.stat.total}} SUCCESS: {{test_suite_summary.stat.successes}} FAILED: {{test_suite_summary.stat.failures}} ERROR: {{test_suite_summary.stat.errors}}