Sometimes tests take too long and slow down your work. pytest-timeout helps stop tests that run longer than you want.
pytest-timeout for time limits
import pytest @pytest.mark.timeout(seconds) def test_function(): # test code here
Use @pytest.mark.timeout(seconds) above your test function to set a time limit.
The seconds value is how many seconds the test can run before stopping.
import pytest @pytest.mark.timeout(3) def test_fast(): assert 1 + 1 == 2
import pytest @pytest.mark.timeout(1) def test_slow(): import time time.sleep(2) assert True
The first test sleeps 1 second and passes because it is under the 2-second limit.
The second test sleeps 3 seconds but has a 1-second limit, so pytest stops it and marks it as failed due to timeout.
import pytest import time @pytest.mark.timeout(2) def test_quick(): time.sleep(1) assert True @pytest.mark.timeout(1) def test_too_slow(): time.sleep(3) assert True
Make sure to install pytest-timeout plugin with pip install pytest-timeout before using it.
You can set timeout globally in pytest config or per test with the decorator.
Timeout helps catch infinite loops or very slow tests early.
pytest-timeout stops tests that run longer than a set time.
Use @pytest.mark.timeout(seconds) to add a time limit to tests.
This keeps your test runs fast and avoids waiting on stuck tests.
Practice
pytest-timeout in test cases?Solution
Step 1: Understand pytest-timeout functionality
pytest-timeout is designed to stop tests that exceed a time limit to prevent long waits.Step 2: Compare options with pytest-timeout purpose
Only To stop tests that run longer than a specified time limit matches this purpose; others describe different pytest features.Final Answer:
To stop tests that run longer than a specified time limit -> Option AQuick Check:
pytest-timeout stops long tests = C [OK]
- Confusing timeout with test retries
- Thinking it speeds up tests by skipping
- Mixing it with coverage reporting
Solution
Step 1: Recall correct pytest-timeout decorator syntax
The correct decorator is@pytest.mark.timeout(5)using a positional argument.Step 2: Check each option's syntax
@pytest.mark.timeout(5) def test_example(): pass uses correct syntax with positional argument 5. @pytest.mark.timeout(seconds=5) def test_example(): pass incorrectly uses keyword argument 'seconds=5'. The options using @pytest.timeout use wrong decorator names.Final Answer:
@pytest.mark.timeout(5) def test_example(): pass -> Option CQuick Check:
Use @pytest.mark.timeout(5) = A [OK]
- Using @pytest.timeout instead of @pytest.mark.timeout
- Passing seconds as a keyword argument
- Missing the @pytest.mark prefix
@pytest.mark.timeout(2)
def test_sleep():
import time
time.sleep(3)
Solution
Step 1: Analyze the timeout and sleep duration
The test has a 2-second timeout but sleeps for 3 seconds, exceeding the limit.Step 2: Understand pytest-timeout behavior on timeout
pytest-timeout stops the test and marks it as failed if it runs longer than the timeout.Final Answer:
The test will fail due to exceeding the 2-second timeout -> Option DQuick Check:
Sleep 3s > timeout 2s = fail [OK]
- Assuming test passes despite timeout
- Thinking test is skipped automatically
- Confusing timeout with syntax errors
@pytest.mark.timeout(3)
def test_loop():
for i in range(5):
time.sleep(1)
Solution
Step 1: Check for missing imports
The test usestime.sleep(1)but does not import thetimemodule.Step 2: Verify other aspects
The timeout and decorator syntax are correct. The missing import will cause a NameError.Final Answer:
Missing import of the time module -> Option BQuick Check:
Using time.sleep without import = error [OK]
- Ignoring missing imports
- Assuming timeout causes error instead
- Thinking decorator syntax is wrong
@pytest.mark.timeout to each test. Which is the best way to do this?Solution
Step 1: Understand pytestmark usage
Settingpytestmark = pytest.mark.timeout(10)applies the timeout decorator to all tests in the file automatically.Step 2: Evaluate other options
Adding timeout as a command line argument requires specifying --timeout=10 every time pytest is run; setting timeout in pytest.ini applies it globally to all tests in the project; using a dummy test for inheritance is not a valid pytest feature. pytestmark is best for this specific file.Final Answer:
Add pytestmark = pytest.mark.timeout(10) at the top of the test file -> Option AQuick Check:
pytestmark applies decorator to all tests [OK]
- Trying to set timeout in pytest.ini (global, not file-specific)
- Using dummy test inheritance (not valid)
- Relying on command line timeout argument (inconvenient)
Ready to prove it?
Pass the test and this pattern moves unknown
