mirror of
https://github.com/httprunner/httprunner.git
synced 2026-05-12 02:21:29 +08:00
update report: add testcase stat to summary
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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"] \
|
||||
|
||||
@@ -153,7 +153,6 @@
|
||||
|
||||
<h2>Summary</h2>
|
||||
<table id="summary">
|
||||
|
||||
<tr>
|
||||
<th>START AT</th>
|
||||
<td colspan="4">{{time.start_datetime}}</td>
|
||||
@@ -169,22 +168,14 @@
|
||||
<td colspan="2">{{ platform.platform }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>TOTAL</th>
|
||||
<th>SUCCESS</th>
|
||||
<th>FAILED</th>
|
||||
<th>ERROR</th>
|
||||
<th>SKIPPED</th>
|
||||
<!-- <th>ExpectedFailure</th>
|
||||
<th>UnexpectedSuccess</th> -->
|
||||
<th>STAT</th>
|
||||
<th colspan="2">TESTCASES (success/fail)</th>
|
||||
<th colspan="2">TESTSTEPS (success/fail/error/skip)</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{{stat.testsRun}}</td>
|
||||
<td>{{stat.successes}}</td>
|
||||
<td>{{stat.failures}}</td>
|
||||
<td>{{stat.errors}}</td>
|
||||
<td>{{stat.skipped}}</td>
|
||||
<!-- <td>{{stat.expectedFailures}}</td>
|
||||
<td>{{stat.unexpectedSuccesses}}</td> -->
|
||||
<td>total (details) =></td>
|
||||
<td colspan="2">{{stat.testcases.total}} ({{stat.testcases.success}}/{{stat.testcases.fail}})</td>
|
||||
<td colspan="2">{{stat.teststeps.total}} ({{stat.teststeps.successes}}/{{stat.teststeps.failures}}/{{stat.teststeps.errors}}/{{stat.teststeps.skipped}})</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
@@ -195,7 +186,7 @@
|
||||
<h3>{{test_suite_summary.name}}</h3>
|
||||
<table id="suite_{{suite_index}}" class="details">
|
||||
<tr>
|
||||
<td>TOTAL: {{test_suite_summary.stat.testsRun}}</td>
|
||||
<td>TOTAL: {{test_suite_summary.stat.total}}</td>
|
||||
<td>SUCCESS: {{test_suite_summary.stat.successes}}</td>
|
||||
<td>FAILED: {{test_suite_summary.stat.failures}}</td>
|
||||
<td>ERROR: {{test_suite_summary.stat.errors}}</td>
|
||||
|
||||
@@ -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 = [
|
||||
|
||||
Reference in New Issue
Block a user