MCPcopy
hub / github.com/pytest-dev/pytest / pytest_runtest_logreport

Method pytest_runtest_logreport

src/_pytest/junitxml.py:529–622  ·  src/_pytest/junitxml.py::LogXML.pytest_runtest_logreport

Handle a setup/call/teardown report, generating the appropriate XML tags as necessary. Note: due to plugins like xdist, this hook may be called in interlaced order with reports from other nodes. For example: Usual call order: -> setup node1 -

(self, report: TestReport)

Source from the content-addressed store, hash-verified

527 return reporter
528
529 def pytest_runtest_logreport(self, report: TestReport) -> None:
530 class="st">"""Handle a setup/call/teardown report, generating the appropriate
531 XML tags as necessary.
532
533 Note: due to plugins like xdist, this hook may be called in interlaced
534 order with reports from other nodes. For example:
535
536 Usual call order:
537 -> setup node1
538 -> call node1
539 -> teardown node1
540 -> setup node2
541 -> call node2
542 -> teardown node2
543
544 Possible call order in xdist:
545 -> setup node1
546 -> call node1
547 -> setup node2
548 -> call node2
549 -> teardown node2
550 -> teardown node1
551 class="st">"""
552 close_report = None
553 if report.passed:
554 if report.when == class="st">"call": class="cm"># ignore setup/teardown
555 reporter = self._opentestcase(report)
556 reporter.append_pass(report)
557 elif report.failed:
558 if report.when == class="st">"teardown":
559 class="cm"># The following vars are needed when xdist plugin is used.
560 report_wid = getattr(report, class="st">"worker_id", None)
561 report_ii = getattr(report, class="st">"item_index", None)
562 close_report = next(
563 (
564 rep
565 for rep in self.open_reports
566 if (
567 rep.nodeid == report.nodeid
568 and getattr(rep, class="st">"item_index", None) == report_ii
569 and getattr(rep, class="st">"worker_id", None) == report_wid
570 )
571 ),
572 None,
573 )
574 if close_report:
575 class="cm"># We need to open new testcase in case we have failure in
576 class="cm"># call and error in teardown in order to follow junit
577 class="cm"># schema.
578 self.finalize(close_report)
579 else:
580 class="cm"># A passing call with a teardown error creates separate
581 class="cm"># terminal reports, but JUnit XML keeps one testcase
582 class="cm"># element for that item (#3850).
583 self.cnt_double_fail_tests += int(
584 (
585 report.nodeid,
586 getattr(report, class="st">"node", None),

Callers

nothing calls this directly

Calls 11

_opentestcaseMethod · 0.95
finalizeMethod · 0.95
intClass · 0.85
append_passMethod · 0.80
append_failureMethod · 0.80
appendMethod · 0.80
write_captured_outputMethod · 0.80
append_errorMethod · 0.80
append_skippedMethod · 0.80
removeMethod · 0.80

Tested by

no test coverage detected