Bird
Raised Fist0
PyTesttesting~20 mins

Test independence in PyTest - Practice Problems & Coding Challenges

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
Challenge - 5 Problems
🎖️
Test Independence Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
1:30remaining
Why is test independence important?

Imagine you have multiple tests for a calculator app. Why should each test be independent from others?

ABecause tests should share data to reduce code duplication.
BSo that one test's failure doesn't cause others to fail, making debugging easier.
CTo make tests run slower and use more resources.
DTo ensure tests always run in a fixed order.
Attempts:
2 left
💡 Hint

Think about how one broken test might affect others if they depend on each other.

Predict Output
intermediate
2:00remaining
What is the output of these pytest tests?

Consider these two pytest tests that share a global variable. What will be the test results?

PyTest
counter = 0

def test_increment():
    global counter
    counter += 1
    assert counter == 1

def test_increment_again():
    global counter
    counter += 1
    assert counter == 1
ABoth tests fail
BBoth tests pass
Ctest_increment fails, test_increment_again passes
Dtest_increment passes, test_increment_again fails
Attempts:
2 left
💡 Hint

Think about the value of counter when each test runs.

🔧 Debug
advanced
2:30remaining
Identify the cause of flaky tests due to shared state

These pytest tests sometimes fail randomly. What is the main cause?

PyTest
shared_list = []

def test_add_item():
    shared_list.append(1)
    assert 1 in shared_list

def test_clear_list():
    shared_list.clear()
    assert shared_list == []
ATests share mutable global state causing interference between tests.
BTests use different assert statements causing confusion.
CTests do not import pytest properly.
DTests run in parallel causing race conditions.
Attempts:
2 left
💡 Hint

Look at the variable shared_list and how it is used.

framework
advanced
1:30remaining
How to ensure test independence in pytest?

Which pytest feature helps to create independent tests by providing fresh data for each test?

AUsing global variables to share data between tests.
BRunning tests in a fixed order using <code>pytest-order</code> plugin.
CUsing fixtures with <code>scope='function'</code> to provide fresh setup for each test.
DDisabling assertions to speed up tests.
Attempts:
2 left
💡 Hint

Think about how pytest can prepare data or state before each test runs.

assertion
expert
2:00remaining
Which assertion best checks test independence in pytest?

You want to verify that a test does not affect global state. Which assertion is best?

PyTest
global_state = {'count': 0}

def test_modify_state():
    global_state['count'] += 1
    # Which assertion below best ensures test independence?
Aassert global_state['count'] == 0
Bassert global_state['count'] > 0
Cassert isinstance(global_state, dict)
Dassert global_state != {}
Attempts:
2 left
💡 Hint

Think about what value count should have if tests are independent.

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