From 12085cd76d1c0ec78ef90a4981a31e7f8b4546b4 Mon Sep 17 00:00:00 2001 From: Maxim <17935127+delatrie@users.noreply.github.com> Date: Tue, 14 Mar 2023 15:57:02 +0300 Subject: [PATCH] Fix squashed results when using rerunfailures (fixes #735) (#736) --- allure-pytest/src/listener.py | 7 +++++ .../pytest_rerunfailures_test.py | 27 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/allure-pytest/src/listener.py b/allure-pytest/src/listener.py index 270a8ca5..e066d71d 100644 --- a/allure-pytest/src/listener.py +++ b/allure-pytest/src/listener.py @@ -224,6 +224,13 @@ def pytest_runtest_makereport(self, item, call): if report.capstderr: self.attach_data(report.capstderr, "stderr", AttachmentType.TEXT, None) + @pytest.hookimpl(hookwrapper=True) + def pytest_runtest_logfinish(self, nodeid, location): + yield + uuid = self._cache.pop(nodeid) + if uuid: + self.allure_logger.close_test(uuid) + @allure_commons.hookimpl def attach_data(self, body, name, attachment_type, extension): self.allure_logger.attach_data(uuid4(), body, name=name, attachment_type=attachment_type, extension=extension) diff --git a/tests/allure_pytest/externals/pytest_rerunfailures/pytest_rerunfailures_test.py b/tests/allure_pytest/externals/pytest_rerunfailures/pytest_rerunfailures_test.py index f2611788..b242b488 100644 --- a/tests/allure_pytest/externals/pytest_rerunfailures/pytest_rerunfailures_test.py +++ b/tests/allure_pytest/externals/pytest_rerunfailures/pytest_rerunfailures_test.py @@ -41,3 +41,30 @@ def test_pytest_rerunfailures_example(request): with_status(status) ) ) + + +@allure.issue("735") +@allure.feature("Integration") +def test_separate_result_for_each_rerun(rerunfailures_runner: AllurePytestRunner): + testfile_content = ( + """ + import pytest + + @pytest.mark.flaky(reruns=1) + def test_pytest_rerunfailures_example(request): + assert False + """ + ) + + def __count_labels(tc, name): + return len( + [label["value"] for label in tc["labels"] if label["name"] == name] + ) + + output = rerunfailures_runner.run_pytest(testfile_content) + + assert len(output.test_cases) == 2 + assert __count_labels(output.test_cases[0], "suite") == 1 + assert __count_labels(output.test_cases[0], "tag") == 1 + assert __count_labels(output.test_cases[1], "suite") == 1 + assert __count_labels(output.test_cases[1], "tag") == 1