Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

only_rerun with exception raised from fixture teardown reruns test but report previous runs as failure

Đang mở
#261 0 bình luận 1 reaction 0 người được giao Xem trên GitHub

@hfycium đang làm issue này rồi.

Từ ngày 6/10/2026.

  • #262 của @shlompy — đã đóng, không merge
  • #385 của @hfycium — đang mở

Đánh giá

Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức phù hợp với người mới
48/100
Loại issue
Lỗi
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Đình trệ
Công nghệ
python
Lĩnh vực
testing

Hướng nghiên cứu

Bắt đầu từ đường dẫn xử lý báo cáo cho setup, call và teardown, sau đó theo dõi cách bộ lọc ngoại lệ rerun_only quyết định liệu một test có được chạy lại hay không. Tái hiện ví dụ MyCustomError trong fixture-teardown và xác minh rằng các lần chạy lại do teardown kích hoạt được đưa vào kết quả cuối cùng, thay vì được báo cáo là các lỗi từ những lần chạy trước.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

Hi.
I have a need to do some checks in a fixture teardown to determine whether a test should rerun or not.
Because rerunfailures only allows filtering based on exception, what I had in mind is that to check whatever I want in the fixture and raise the custom exception so the test will rerun.
However, while this package detects a rerun is needed when processing the teardown report, the call (test) report was already processed and it was not marked to be rerun, because the rerun_only condition didn't match the test exception, as the custom exception was raised from the fixture.

Eventually, the test does re-run until it pass, but pytest still report the test failure outcomes.

Note that the reruns works just fine when not using only_rerun condition.

Example code:

import random

import pytest

class MyCustomError(Exception):
    pass

@pytest.fixture
def rerun_custom_checker(request):
    yield

    if request.node.rep_call.outcome == "passed":
        return

    raise MyCustomError()


@pytest.mark.flaky(reruns=10, reruns_delay=1, only_rerun=["MyCustomError"])
def test_example(rerun_custom_checker):

    i = random.randint(2, 4)
    if i != 3:
        assert False
image

What I had in mind, is to pre-process the reports and set a flag whether rerun is needed, if it was found to be needed for setup/call/teardown.
Then, when processing the reports as usual, and just check for this flag.

Something like:
image

I can raise a PR with that change, assuming this solution is acceptable (It works fine when testing this change)

Ngôn ngữ chính
Python
Star
480
Fork
110
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của pytest-dev/pytest-rerunfailures

Tất cả issue của pytest-dev/pytest-rerunfailures

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.