Challenge - 5 Problems
Shared Resource Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate2:00remaining
Output of pytest fixture with module scope
What will be the output when running this pytest code with two test functions using a module-scoped fixture?
PyTest
import pytest @pytest.fixture(scope="module") def resource(): print("Setup resource") yield "data" print("Teardown resource") def test_one(resource): print(f"Test one got {resource}") assert resource == "data" def test_two(resource): print(f"Test two got {resource}") assert resource == "data"
Attempts:
2 left
💡 Hint
Module scope means the fixture runs once per module, not per test.
✗ Incorrect
The fixture with scope='module' runs setup once before any tests in the module and teardown after all tests finish. So 'Setup resource' prints once, then both tests run, then 'Teardown resource' prints once.
❓ assertion
intermediate2:00remaining
Correct assertion for shared resource usage count
Given a shared resource fixture that counts how many times it was used, which assertion correctly verifies it was used exactly twice after two tests?
PyTest
import pytest usage_count = 0 @pytest.fixture(scope="module") def shared_resource(): global usage_count usage_count += 1 yield def test_a(shared_resource): pass def test_b(shared_resource): pass # After tests run, which assertion is correct?
Attempts:
2 left
💡 Hint
Remember the fixture scope affects how many times setup code runs.
✗ Incorrect
With scope='module', the fixture setup runs once per module, so usage_count increments once even if two tests use it.
🔧 Debug
advanced2:00remaining
Identify the problem with fixture teardown order
This pytest code uses two fixtures: one expensive resource and one dependent on it. The teardown prints are not in expected order. What causes this?
PyTest
import pytest @pytest.fixture(scope="module") def expensive_resource(): print("Setup expensive") yield print("Teardown expensive") @pytest.fixture(scope="module") def dependent_resource(expensive_resource): print("Setup dependent") yield print("Teardown dependent") def test_example(dependent_resource): assert True
Attempts:
2 left
💡 Hint
Think about fixture dependency and teardown sequence.
✗ Incorrect
Pytest tears down fixtures in reverse order of setup. Since dependent_resource uses expensive_resource, dependent_resource is torn down first, then expensive_resource.
❓ framework
advanced2:00remaining
Best way to share a database connection across tests
You want to share a single expensive database connection across multiple test files in pytest. Which fixture scope and method is best?
Attempts:
2 left
💡 Hint
Think about how often you want the expensive setup to run.
✗ Incorrect
Scope='session' runs once per test session, ideal for expensive resources shared across all tests and files.
🧠 Conceptual
expert2:00remaining
Why use autouse fixtures for shared expensive resources?
What is the main advantage of using an autouse fixture with an expensive resource in pytest?
Attempts:
2 left
💡 Hint
Think about convenience and test code simplicity.
✗ Incorrect
Autouse fixtures run automatically for all tests in scope, so tests get the resource without needing to mention it explicitly.