Bird
Raised Fist0
PyTesttesting~5 mins

Flaky test detection and retry in PyTest - Cheat Sheet & Quick Revision

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What is a flaky test?
A flaky test is a test that sometimes passes and sometimes fails without any changes in the code. It behaves unpredictably.
Click to reveal answer
beginner
Why is flaky test detection important?
Detecting flaky tests helps keep the test suite reliable. It prevents false failures that waste time and hide real problems.
Click to reveal answer
intermediate
How can pytest help retry flaky tests?
Pytest can use the 'pytest-rerunfailures' plugin to automatically rerun failed tests a set number of times before marking them as failed.
Click to reveal answer
intermediate
Show a simple pytest example to retry a flaky test up to 3 times.
Use the decorator @pytest.mark.flaky(reruns=3) on the test function. This reruns the test up to 3 times if it fails.
Click to reveal answer
advanced
What is a good practice to reduce flaky tests besides retrying?
Fix the root cause of flakiness by improving test isolation, avoiding timing issues, and using mocks or stubs for unstable dependencies.
Click to reveal answer
What does a flaky test do?
AAlways fails
BSometimes passes and sometimes fails without code changes
CAlways passes
DRuns faster than other tests
Which pytest plugin helps retry failed tests?
Apytest-html
Bpytest-cov
Cpytest-mock
Dpytest-rerunfailures
How do you specify retry count for flaky tests in pytest?
A@pytest.mark.flaky(reruns=3)
Bpytest.retry(3)
Cpytest.flaky(3)
Dpytest.rerun(3)
What is NOT a good way to reduce flaky tests?
AFix timing issues
BUse mocks for unstable parts
CIgnore flaky tests forever
DImprove test isolation
If a test fails once but passes on retry, what does it indicate?
APossible flakiness
BTest is perfect
CCode is broken
DTest is slow
Explain what a flaky test is and why it is a problem in software testing.
Think about tests that don't behave the same every time.
You got /4 concepts.
    Describe how you can use pytest to detect and retry flaky tests.
    Focus on the tools and settings in pytest.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of marking a test as flaky in pytest using @pytest.mark.flaky(reruns=N)?
      easy
      A. To skip the test permanently
      B. To automatically retry the test N times if it fails
      C. To mark the test as slow and run it last
      D. To run the test only once without retries

      Solution

      1. Step 1: Understand the flaky test concept

        Flaky tests fail randomly due to timing or environment issues, so retries help reduce false failures.
      2. Step 2: Analyze the effect of @pytest.mark.flaky(reruns=N)

        This decorator tells pytest to rerun the test up to N times if it fails, increasing chances of passing despite flakiness.
      3. Final Answer:

        To automatically retry the test N times if it fails -> Option B
      4. Quick Check:

        Flaky test retry = reruns N times [OK]
      Hint: Retries mean automatic rerun on failure [OK]
      Common Mistakes:
      • Confusing flaky with skipped tests
      • Thinking flaky marks slow tests
      • Assuming flaky disables retries
      2. Which of the following is the correct syntax to retry a flaky test 3 times in pytest?
      easy
      A. @pytest.flaky(tries=3)
      B. @pytest.retry(3)
      C. @pytest.mark.retry(3)
      D. @pytest.mark.flaky(reruns=3)

      Solution

      1. Step 1: Recall the correct decorator name and parameter

        The correct decorator is @pytest.mark.flaky with parameter reruns to specify retry count.
      2. Step 2: Match syntax with options

        @pytest.mark.flaky(reruns=3) uses @pytest.mark.flaky(reruns=3), which is the correct syntax for retrying 3 times.
      3. Final Answer:

        @pytest.mark.flaky(reruns=3) -> Option D
      4. Quick Check:

        Decorator name + reruns param = correct syntax [OK]
      Hint: Use @pytest.mark.flaky with reruns param [OK]
      Common Mistakes:
      • Using @pytest.retry instead of @pytest.mark.flaky
      • Using wrong parameter names like tries
      • Missing the mark prefix
      3. Given this pytest test code snippet, what will be the output if the test randomly fails once and passes on retry?
      import pytest
      
      @pytest.mark.flaky(reruns=2)
      def test_random():
          import random
          assert random.choice([True, False])
      medium
      A. Test may pass after 1 or 2 retries if random returns True
      B. Test always fails because random.choice is unpredictable
      C. Test runs only once and fails if random returns False
      D. Test is skipped due to flaky mark

      Solution

      1. Step 1: Understand the flaky decorator effect

        The test will rerun up to 2 times if it fails, allowing multiple chances to pass.
      2. Step 2: Analyze the random assertion

        The assertion randomly passes or fails. If it fails once, retry can pass if random returns True on retry.
      3. Final Answer:

        Test may pass after 1 or 2 retries if random returns True -> Option A
      4. Quick Check:

        Retries allow passing despite random failure [OK]
      Hint: Retries give multiple chances to pass random failures [OK]
      Common Mistakes:
      • Assuming flaky skips tests
      • Thinking test always fails on first try
      • Ignoring retry count effect
      4. You wrote this flaky test with retry but it never retries on failure. What is the error?
      import pytest
      
      @pytest.mark.flaky(rerun=3)
      def test_example():
          assert False
      medium
      A. The test must return True to retry
      B. The decorator should be @pytest.retry, not @pytest.mark.flaky
      C. The parameter name should be 'reruns', not 'rerun'
      D. The test cannot retry if it always fails

      Solution

      1. Step 1: Check the decorator parameter spelling

        The correct parameter for retry count is reruns, not rerun.
      2. Step 2: Understand impact of wrong parameter

        Using rerun is ignored by pytest, so no retries happen despite failures.
      3. Final Answer:

        The parameter name should be 'reruns', not 'rerun' -> Option C
      4. Quick Check:

        Correct param spelling = reruns [OK]
      Hint: Check exact parameter spelling: reruns, not rerun [OK]
      Common Mistakes:
      • Misspelling reruns parameter
      • Using wrong decorator name
      • Expecting retries on always failing test
      5. You want to reduce false failures from a flaky test that sometimes fails due to timing issues. Which approach best combines flaky test detection and retry in pytest?
      hard
      A. Use @pytest.mark.flaky(reruns=3) and add explicit wait in test code
      B. Use @pytest.mark.skip to ignore the flaky test
      C. Remove retries and fix test to always pass
      D. Use @pytest.mark.flaky(reruns=0) to disable retries

      Solution

      1. Step 1: Understand flaky test retry purpose

        Retries help reduce false failures by rerunning tests that fail randomly.
      2. Step 2: Combine retry with test stabilization

        Adding explicit waits addresses timing issues, improving test stability alongside retries.
      3. Step 3: Evaluate other options

        Skipping ignores tests, removing retries loses retry benefit, and reruns=0 disables retries.
      4. Final Answer:

        Use @pytest.mark.flaky(reruns=3) and add explicit wait in test code -> Option A
      5. Quick Check:

        Retries + waits = best flaky test handling [OK]
      Hint: Combine retries with waits to fix flaky timing issues [OK]
      Common Mistakes:
      • Skipping flaky tests instead of fixing
      • Disabling retries by setting reruns=0
      • Ignoring timing issues causing flakiness