diff --git a/src/pytest_html/basereport.py b/src/pytest_html/basereport.py index f3aa6455..4f02763c 100644 --- a/src/pytest_html/basereport.py +++ b/src/pytest_html/basereport.py @@ -196,7 +196,7 @@ def pytest_terminal_summary(self, terminalreporter): @pytest.hookimpl(trylast=True) def pytest_collectreport(self, report): if report.failed: - self._process_report(report, 0) + self._process_report(report, 0, []) @pytest.hookimpl(trylast=True) def pytest_collection_finish(self, session): @@ -238,16 +238,25 @@ def pytest_runtest_logreport(self, report): if outcome != "rerun": test_duration += reports[0].duration + processed_extras = [] + for key, reports in self._reports[report.nodeid].items(): + when, _ = key + for each in reports: + test_id = report.nodeid + if when != "call": + test_id += f"::{when}" + processed_extras += self._process_extras(each, test_id) + for key, reports in self._reports[report.nodeid].items(): when, _ = key for each in reports: dur = test_duration if when == "call" else each.duration - self._process_report(each, dur) + self._process_report(each, dur, processed_extras) if self._config.getini("generate_report_on_test"): self._generate_report() - def _process_report(self, report, duration): + def _process_report(self, report, duration, processed_extras): outcome = _process_outcome(report) try: # hook returns as list for some reason @@ -262,8 +271,9 @@ def _process_report(self, report, duration): test_id += f"::{report.when}" data = { - "extras": self._process_extras(report, test_id), + "extras": processed_extras, # self._process_extras(report, test_id), } + print(processed_extras) links = [ extra for extra in data["extras"] diff --git a/testing/test_integration.py b/testing/test_integration.py index 145dd34b..c1fa4ed8 100644 --- a/testing/test_integration.py +++ b/testing/test_integration.py @@ -518,26 +518,26 @@ def pytest_runtest_makereport(item, call): ) def test_extra_url(self, pytester): - content = str(random.random()) pytester.makeconftest( - f""" + """ import pytest @pytest.hookimpl(hookwrapper=True) def pytest_runtest_makereport(item, call): outcome = yield report = outcome.get_result() - if report.when == 'call': - from pytest_html import extras - report.extras = [extras.url('{content}')] + from pytest_html import extras + report.extras = [extras.url(f'{report.when}')] """ ) pytester.makepyfile("def test_pass(): pass") page = run(pytester) - element = page.select_one("a[class='col-links__extra url']") - assert_that(element.string).is_equal_to("URL") - assert_that(element["href"]).is_equal_to(content) + elements = page.select("a[class='col-links__extra url']") + for each in zip(elements, ["setup", "call", "teardown"]): + element, when = each + assert_that(element.string).is_equal_to("URL") + assert_that(element["href"]).is_equal_to(when) @pytest.mark.parametrize( "mime_type, extension",