esptest.testcase package
- class esptest.testcase.ResultDetail(type, context='', params=<factory>, result=<factory>, brief_message='', started_at=None, finished_at=None, file='')[source]
Bases:
objectResultDetail is a class that records the result of a performance test.
Each accumulated record corresponds to one
TestResultDetaildatabase row and can be dumped as JSON / JSONL for batch import into the database.Database schema (
TestResultDetail) that records the target:params: dict[str, Any] (JSONB, required) result: dict[str, Any] (JSONB, required) duration: int | None logs: list[dict[str, Any]] | None brief_message: str | None started_at: datetime | None finished_at: datetime | None
- Parameters:
- class esptest.testcase.TestCaseResult(name: str, classname: str = '', status: str = 'passed', duration: Optional[float] = None, message: Optional[str] = None, failure_type: Optional[str] = None, stdout: Optional[str] = None, stderr: Optional[str] = None, properties: Dict[str, str] = <factory>, logs: Optional[List[Dict[str, Any]]] = None, result_detail_files: List[str] = <factory>, result_details: List[esptest.testcase.result.ResultDetail] = <factory>, started_at: Optional[str] = None)[source]
Bases:
object- Parameters:
- result_details: List[ResultDetail]
- add_result_detail(detail, file_name='')[source]
Attach a
ResultDetailobject directly to this case.The object is kept in
result_details(in memory). Whenfile_name(a path relative to the report/log directory) is given, it is stored on the detail (detail.file) and appended toresult_detail_filesso the report can reference the saved file. Writing the file itself is left to the caller (e.g.detail.save_json). Returns the same object for chaining.- Parameters:
detail (ResultDetail)
file_name (str)
- Return type:
- class esptest.testcase.TestCaseStatus[source]
Bases:
object- PASSED = 'passed'
- FAILED = 'failed'
- ERROR = 'error'
- SKIPPED = 'skipped'
- class esptest.testcase.TestSuiteResult(name: str, test_cases: List[esptest.testcase.result.TestCaseResult] = <factory>, properties: Dict[str, str] = <factory>, timestamp: Optional[str] = None, package: Optional[str] = None, hostname: Optional[str] = None, file: Optional[str] = None)[source]
Bases:
object- Parameters:
- test_cases: List[TestCaseResult]
- class esptest.testcase.TestSuitesResult(name: str = 'testsuites', test_suites: List[esptest.testcase.result.TestSuiteResult] = <factory>, properties: Dict[str, str] = <factory>)[source]
Bases:
object- test_suites: List[TestSuiteResult]
- class esptest.testcase.EspTestCase(methodName='runTest')[source]
Bases:
TestCaseA
unittest.TestCasethat streams results into an xUnit report.Subclasses only need to set
xunit_log_dir(and optionallytarget/config/xunit_suite_name) and write plaintest_*methods. Each case is opened insetUp()and closed intearDown()with the result derived from the runner outcome.Under pytest, the
bind_case_contextfixture fromesptest.pytest_plugincan injecttarget/config/xunit_log_dironto the class automatically.To fold several classes (or a whole pytest session) into a single report, assign a shared
XunitLoggertoxunit_loggerbeforesetUpClass()runs; the class then reuses that logger and does not close it (the owner is responsible for that).- xunit_logger: XunitLogger | None = None
the logger; created in
setUpClass(), or set externally to share one
- classmethod setUpClass()[source]
Hook method for setting up class fixture before running tests in the class.
- Return type:
None
- classmethod tearDownClass()[source]
Hook method for deconstructing the class fixture after running all tests in the class.
- Return type:
None
- class esptest.testcase.XunitLogger(path, suite_name='test-suite', file_name='XUNIT_RESULT.xml', flush_interval=2.0, timestamp=None, package='esptest', hostname='build-33769991-project-1187477-esp-test-utils', std_head_len=4096, std_tail_len=4096)[source]
Bases:
object- Parameters:
- property test_suite: TestSuiteResult
- property current_test_case: TestCaseResult | None
- esptest.testcase.generate_xunit_xml(test_suites)[source]
- Parameters:
test_suites (TestSuitesResult)
- Return type:
- esptest.testcase.get_case_result_from_outcome(test_case)[source]
Read pass/fail and a brief message for the current test method.
Meant to be called from
tearDownand works with both runners, whose outcome objects differ:unittest’s
_Outcomekeeps(test, exc_info)tuples on.errors, populated beforetearDownruns (result.failuresis only filled in afterwards, so it cannot be relied on here).pytest keeps an
ExceptionInfolist on_outcome.result._excinfo.
Returns
(passed, message);messageis empty when the case passed.
- esptest.testcase.save_xunit_xml(test_suites, path)[source]
- Parameters:
test_suites (TestSuitesResult)
- Return type:
Submodules
- esptest.testcase.result module
ResultDetailResultDetail.typeResultDetail.contextResultDetail.paramsResultDetail.resultResultDetail.brief_messageResultDetail.started_atResultDetail.finished_atResultDetail.fileResultDetail.to_dict()ResultDetail.from_dict()ResultDetail.load_json()ResultDetail.to_json()ResultDetail.to_text()ResultDetail.to_markdown()ResultDetail.save_json()ResultDetail.save_text()ResultDetail.save_markdown()
TestCaseStatusTestCaseResultTestCaseResult.nameTestCaseResult.classnameTestCaseResult.statusTestCaseResult.durationTestCaseResult.messageTestCaseResult.failure_typeTestCaseResult.stdoutTestCaseResult.stderrTestCaseResult.propertiesTestCaseResult.logsTestCaseResult.result_detail_filesTestCaseResult.result_detailsTestCaseResult.started_atTestCaseResult.add_result_detail()
TestSuiteResultTestSuitesResult
- esptest.testcase.unittest_case module
- esptest.testcase.xunit module
generate_xunit_xml()save_xunit_xml()parse_xunit_xml()XunitLoggerXunitLogger.test_suiteXunitLogger.has_running_caseXunitLogger.current_test_caseXunitLogger.set_config()XunitLogger.begin_case()XunitLogger.add_sys_out()XunitLogger.add_sys_err()XunitLogger.add_failure()XunitLogger.add_error()XunitLogger.add_skipped()XunitLogger.clear_failures()XunitLogger.end_case()XunitLogger.flush()XunitLogger.close()XunitLogger.get_cur_case_result()XunitLogger.get_cur_case_id()