diff --git a/httprunner/report/html/result.py b/httprunner/report/html/result.py
index 9cb16ab3..40cd3547 100644
--- a/httprunner/report/html/result.py
+++ b/httprunner/report/html/result.py
@@ -3,8 +3,6 @@ import unittest
from loguru import logger
-from httprunner.v3.schema import Record
-
class HtmlTestResult(unittest.TextTestResult):
""" A html result class that can generate formatted html results, used by TextTestRunner.
@@ -12,13 +10,16 @@ class HtmlTestResult(unittest.TextTestResult):
"""
def __init__(self, stream, descriptions, verbosity):
super(HtmlTestResult, self).__init__(stream, descriptions, verbosity)
- self.record = Record()
+ self.name = ""
+ self.status = ""
+ self.attachment = ""
+ self.meta_datas = None
def _record_test(self, test, status, attachment=''):
- self.record.name = test.shortDescription()
- self.record.status = status
- self.record.attachment = attachment
- self.record.meta_datas = test.meta_datas
+ self.name = test.shortDescription()
+ self.status = status
+ self.attachment = attachment
+ self.meta_datas = test.meta_datas
def startTestRun(self):
self.start_at = time.time()
diff --git a/httprunner/report/stringify.py b/httprunner/report/stringify.py
index f0a28c7d..7adbdd8e 100644
--- a/httprunner/report/stringify.py
+++ b/httprunner/report/stringify.py
@@ -206,7 +206,6 @@ def stringify_summary(testsuite_summary: TestSuiteSummary):
if not testcase_summary.name:
testcase_summary.name = f"testcase {index}"
- record = testcase_summary.record
- meta_datas = record.meta_datas
+ meta_datas = testcase_summary.meta_datas
__stringify_meta_datas(meta_datas)
- record.response_time = __get_total_response_time(meta_datas)
+ testcase_summary.total_response_time = __get_total_response_time(meta_datas)
diff --git a/httprunner/report/summarize.py b/httprunner/report/summarize.py
index a8845fe9..2d9d14fd 100644
--- a/httprunner/report/summarize.py
+++ b/httprunner/report/summarize.py
@@ -2,7 +2,7 @@ import platform
from httprunner import __version__
from httprunner.report.html.result import HtmlTestResult
-from httprunner.v3.schema import TestCaseSummary, TestCaseStat, TestCaseTime, TestCaseInOut
+from httprunner.v3.schema import TestCaseSummary, TestCaseTime, TestCaseInOut
def get_platform():
@@ -59,18 +59,13 @@ def get_summary(result: HtmlTestResult) -> TestCaseSummary:
"""
return TestCaseSummary(
success=result.wasSuccessful(),
- stat=TestCaseStat(
- total=result.testsRun,
- failures=len(result.failures),
- errors=len(result.errors),
- skipped=len(result.skipped),
- expectedFailures=len(result.expectedFailures),
- unexpectedSuccesses=len(result.unexpectedSuccesses)
- ),
time=TestCaseTime(
start_at=result.start_at,
duration=result.duration
),
- record=result.record,
- in_out=TestCaseInOut()
+ name=result.name,
+ status=result.status,
+ attachment=result.attachment,
+ in_out=TestCaseInOut(),
+ meta_datas=result.meta_datas
)
diff --git a/httprunner/v3/api.py b/httprunner/v3/api.py
index b7a11d63..a31e4024 100644
--- a/httprunner/v3/api.py
+++ b/httprunner/v3/api.py
@@ -108,7 +108,6 @@ class HttpRunner(object):
result = self.unittest_runner.run(testcase)
testcase_summary = report.get_summary(result)
- testcase_summary.name = testcase.config.name
testcase_summary.in_out.vars = testcase.config.variables
testcase_summary.in_out.out = testcase.config.export
@@ -136,12 +135,9 @@ class HttpRunner(object):
testsuite_summary = {
"success": True,
"stat": {
- "testcases": {
- "total": len(tests_results),
- "success": 0,
- "fail": 0
- },
- "teststeps": {}
+ "total": len(tests_results),
+ "success": 0,
+ "fail": 0
},
"time": {},
"platform": report.get_platform(),
@@ -150,13 +146,11 @@ class HttpRunner(object):
for testcase_summary in tests_results:
if testcase_summary.success:
- testsuite_summary["stat"]["testcases"]["success"] += 1
+ testsuite_summary["stat"]["success"] += 1
else:
- testsuite_summary["stat"]["testcases"]["fail"] += 1
+ testsuite_summary["stat"]["fail"] += 1
testsuite_summary["success"] &= testcase_summary.success
-
- report.aggregate_stat(testsuite_summary["stat"]["teststeps"], testcase_summary.stat.dict())
report.aggregate_stat(testsuite_summary["time"], testcase_summary.time.dict())
testsuite_summary["details"].append(testcase_summary)
@@ -197,7 +191,7 @@ class HttpRunner(object):
utils.prepare_log_file_abs_path(self.test_path, "summary.json")
)
# save variables and export data
- vars_out = self.get_vars_out() # TODO
+ vars_out = self.get_vars_out()
utils.dump_json_file(
vars_out,
utils.prepare_log_file_abs_path(self.test_path, "io.json")
@@ -205,6 +199,35 @@ class HttpRunner(object):
return self._summary
+ def get_vars_out(self):
+ """ get variables and output
+ Returns:
+ list: list of variables and output.
+ if tests are parameterized, list items are corresponded to parameters.
+
+ [
+ {
+ "in": {
+ "user1": "leo"
+ },
+ "out": {
+ "out1": "out_value_1"
+ }
+ },
+ {...}
+ ]
+
+ None: returns None if tests not started or finished or corrupted.
+
+ """
+ if not self._summary:
+ return None
+
+ return [
+ testcase_summary.in_out.dict()
+ for testcase_summary in self._summary.details
+ ]
+
def run_path(self, path, dot_env_path=None, mapping=None) -> TestSuiteSummary:
""" run testcase/testsuite file or folder.
diff --git a/httprunner/v3/api_test.py b/httprunner/v3/api_test.py
index 1ac1ad25..8a377bb8 100644
--- a/httprunner/v3/api_test.py
+++ b/httprunner/v3/api_test.py
@@ -12,6 +12,5 @@ class TestHttpRunner(unittest.TestCase):
summary = self.runner.run_path("examples/postman_echo/request_methods/")
self.assertTrue(summary.success)
self.assertEqual(summary.details[0].name, "request methods testcase with variables")
- self.assertEqual(summary.details[0].record.name, "request methods testcase with variables")
- self.assertEqual(summary.stat.testcases["total"], 1)
+ self.assertGreater(summary.stat.total, 1)
# self.assertEqual(summary.stat.teststeps["total"], 2)
diff --git a/httprunner/v3/schema.py b/httprunner/v3/schema.py
index 4a0c393b..b52dcff5 100644
--- a/httprunner/v3/schema.py
+++ b/httprunner/v3/schema.py
@@ -82,27 +82,12 @@ class TestsMapping(BaseModel):
testcases: List[TestCase]
-class Stat(BaseModel):
- testcases: Dict
- teststeps: Dict
-
-
class TestCaseTime(BaseModel):
start_at: float
duration: float
start_datetime: Text = ""
-class TestCaseStat(BaseModel):
- total: int = 0
- successes: int = 0
- failures: int = 0
- errors: int = 0
- skipped: int = 0
- expectedFailures: int = 0
- unexpectedSuccesses: int = 0
-
-
class TestCaseInOut(BaseModel):
vars: VariablesMapping = {}
out: Export = []
@@ -121,22 +106,16 @@ class MetaData(BaseModel):
validators: Dict = {}
-class Record(BaseModel):
- name: Text = ""
- status: Text = ""
- attachment: Text = ""
- meta_datas: List[MetaData] = []
- response_time: Text = "N/A"
-
-
class TestCaseSummary(BaseModel):
name: Text = ""
success: bool
- stat: TestCaseStat
+ status: Text = ""
+ attachment: Text = ""
time: TestCaseTime
- record: Record = {}
in_out: TestCaseInOut = {}
log: Text = ""
+ meta_datas: List[MetaData] = []
+ total_response_time: Text = "N/A"
class PlatformInfo(BaseModel):
@@ -145,6 +124,12 @@ class PlatformInfo(BaseModel):
platform: Text
+class Stat(BaseModel):
+ total: int = 0
+ success: int = 0
+ fail: int = 0
+
+
class TestSuiteSummary(BaseModel):
success: bool
stat: Stat