Bird
Raised Fist0
PyTesttesting~5 mins

Test independence 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 does test independence mean in software testing?
Test independence means each test runs on its own without relying on other tests. This helps find bugs clearly and makes tests easier to fix.
Click to reveal answer
beginner
Why should tests not share state or data?
Sharing state can cause tests to pass or fail depending on the order they run. Independent tests avoid this problem by keeping data separate.
Click to reveal answer
intermediate
How does pytest help keep tests independent?
Pytest runs each test function separately and can use fixtures to set up fresh data for each test, ensuring no leftover data affects others.
Click to reveal answer
beginner
What is a common problem if tests are not independent?
Tests might pass or fail randomly depending on the order they run, making it hard to trust test results and fix bugs.
Click to reveal answer
intermediate
Show a simple pytest example that ensures test independence using fixtures.
import pytest

@pytest.fixture
def fresh_list():
    return []

def test_add_item(fresh_list):
    fresh_list.append(1)
    assert fresh_list == [1]

def test_empty_list(fresh_list):
    assert fresh_list == []

Each test gets a new empty list, so they don't affect each other.
Click to reveal answer
What is the main benefit of test independence?
ATests share data to save memory
BTests run faster together
CTests run without affecting each other
DTests depend on previous tests
In pytest, what feature helps create fresh data for each test?
AFixtures
BClasses
CDecorators
DAssertions
What can happen if tests share state?
ATests may pass or fail unpredictably
BTests always run faster
CTests become shorter
DTests never fail
Which is a good practice to keep tests independent?
ASkip tests randomly
BRun tests in a fixed order
CShare global variables
DReset data before each test
If test A fails only when test B runs before it, what is the problem?
ATests have too many assertions
BTests are not independent
CTests are too fast
DTests use fixtures
Explain why test independence is important and how pytest fixtures help achieve it.
Think about tests running alone and not affecting each other.
You got /4 concepts.
    Describe a simple pytest example that shows two independent tests using fixtures.
    Remember the example with a fresh list for each test.
    You got /4 concepts.

      Practice

      (1/5)
      1. Why is test independence important in pytest?
      easy
      A. It groups tests to run in a specific order.
      B. It allows tests to share variables for faster execution.
      C. It ensures tests do not affect each other and run reliably alone.
      D. It makes tests run only when previous tests pass.

      Solution

      1. Step 1: Understand test independence concept

        Test independence means each test runs alone without relying on others.
      2. Step 2: Identify why independence matters

        This prevents tests from failing due to side effects or order, making results reliable.
      3. Final Answer:

        It ensures tests do not affect each other and run reliably alone. -> Option C
      4. Quick Check:

        Test independence = tests run alone [OK]
      Hint: Tests should run alone without relying on others [OK]
      Common Mistakes:
      • Thinking tests must share data to be efficient
      • Believing tests run only if previous tests pass
      • Assuming test order controls correctness
      2. Which pytest feature helps keep tests independent by running setup code before each test?
      easy
      A. Using setup_method or setup_function
      B. Using yield_fixture to share data
      C. Using @pytest.mark.parametrize
      D. Using pytest.skip() to skip tests

      Solution

      1. Step 1: Identify setup features in pytest

        Pytest runs setup code before each test using setup_method or setup_function.
      2. Step 2: Understand their role in test independence

        Setup prepares fresh state for each test, avoiding shared state and keeping tests independent.
      3. Final Answer:

        Using setup_method or setup_function -> Option A
      4. Quick Check:

        Setup before each test = setup_method/setup_function [OK]
      Hint: Setup code before each test keeps tests independent [OK]
      Common Mistakes:
      • Confusing parameterize with setup
      • Using yield_fixture to share state incorrectly
      • Skipping tests does not setup state
      3. Given the code below, what will be the output when running both tests?
      counter = 0
      
      def test_first():
          global counter
          counter += 1
          assert counter == 1
      
      def test_second():
          global counter
          counter += 1
          assert counter == 1
      medium
      A. First test passes, second test fails
      B. Both tests pass
      C. First test fails, second test passes
      D. Both tests fail

      Solution

      1. Step 1: Analyze test_first behavior

        Initially, counter=0. test_first increments to 1 and asserts counter == 1, so it passes.
      2. Step 2: Analyze test_second behavior

        counter is now 1 from previous test. test_second increments to 2 and asserts counter == 1, which fails.
      3. Final Answer:

        First test passes, second test fails -> Option A
      4. Quick Check:

        Shared state causes second test failure [OK]
      Hint: Shared global state breaks test independence [OK]
      Common Mistakes:
      • Assuming counter resets automatically
      • Thinking both tests run with fresh state
      • Ignoring global variable effects
      4. Identify the problem in this pytest code that breaks test independence:
      shared_list = []
      
      def test_add_one():
          shared_list.append(1)
          assert len(shared_list) == 1
      
      def test_add_two():
          shared_list.append(2)
          assert len(shared_list) == 1
      medium
      A. shared_list should be a global variable inside tests
      B. Assertions are incorrect; they should check for length 2
      C. Tests run in parallel causing race conditions
      D. shared_list is not cleared between tests causing length to grow

      Solution

      1. Step 1: Understand shared_list usage

        shared_list is defined outside tests and not reset, so it keeps growing with each test.
      2. Step 2: Identify why independence breaks

        Because shared_list is not cleared, test_add_two sees length 2, but asserts length 1, causing failure.
      3. Final Answer:

        shared_list is not cleared between tests causing length to grow -> Option D
      4. Quick Check:

        Shared mutable state without reset breaks independence [OK]
      Hint: Reset shared data between tests to keep independence [OK]
      Common Mistakes:
      • Assuming pytest resets global variables automatically
      • Changing assertions instead of fixing state
      • Confusing parallel runs with shared state issues
      5. You want to ensure two pytest tests that modify a database table run independently. Which approach best maintains test independence?
      hard
      A. Run tests in a fixed order so changes apply sequentially
      B. Use a fixture to create and rollback a transaction for each test
      C. Share a global database connection and commit changes after all tests
      D. Skip tests that depend on database state

      Solution

      1. Step 1: Understand database state isolation

        To keep tests independent, each test should not affect others' database state.
      2. Step 2: Choose best isolation method

        Using a fixture that creates a transaction and rolls back after each test resets database state, ensuring independence.
      3. Final Answer:

        Use a fixture to create and rollback a transaction for each test -> Option B
      4. Quick Check:

        Transaction rollback per test = independence [OK]
      Hint: Rollback DB changes after each test to isolate state [OK]
      Common Mistakes:
      • Relying on test order for correctness
      • Sharing global DB connection without isolation
      • Skipping tests instead of fixing independence