From cac97d6018eda2386c6cc105c151a999549b4d73 Mon Sep 17 00:00:00 2001 From: hfycium <2115763167@qq.com> Date: Mon, 5 Oct 2026 15:38:31 +0800 Subject: [PATCH] test: cover timeout setup outside the main thread --- test_pytest_timeout.py | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/test_pytest_timeout.py b/test_pytest_timeout.py index ff36c40..2034b62 100644 --- a/test_pytest_timeout.py +++ b/test_pytest_timeout.py @@ -621,25 +621,39 @@ def custom_trace(*args): def test_not_main_thread(pytester): - pytest.skip("The 'pytest_timeout.timeout_setup' function no longer exists") - pytester.makepyfile( + pytester.makeconftest( """ import threading + + import pytest import pytest_timeout - current_timeout_setup = pytest_timeout.timeout_setup - def new_timeout_setup(item): - threading.Thread( - target=current_timeout_setup, args=(item), - ).join() + @pytest.hookimpl(tryfirst=True) + def pytest_timeout_set_timer(item, settings): + errors = [] - pytest_timeout.timeout_setup = new_timeout_setup + def set_timer(): + try: + pytest_timeout.pytest_timeout_set_timer(item, settings) + except BaseException as exc: + errors.append(exc) + thread = threading.Thread(target=set_timer) + thread.start() + thread.join() + if errors: + raise errors[0] + return True + """ + ) + pytester.makepyfile( + """ def test_x(): pass """ ) result = pytester.runpytest_subprocess("--timeout=1") + result.assert_outcomes(passed=1) result.stdout.fnmatch_lines( ["timeout: 1.0s", "timeout method:*", "timeout func_only:*"] )