Bird
Raised Fist0
Flaskframework~5 mins

Test fixtures with pytest in Flask - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a test fixture in pytest?
A test fixture is a setup function that prepares the environment for tests. It can create objects, set states, or provide resources needed by tests.
Click to reveal answer
beginner
How do you define a fixture in pytest?
You define a fixture by creating a function and decorating it with @pytest.fixture. This function can then be used by tests by adding its name as a parameter.
Click to reveal answer
intermediate
Why use fixtures in Flask testing with pytest?
Fixtures help create a clean and reusable setup for Flask app, test client, and database. This keeps tests simple and avoids repeating setup code.
Click to reveal answer
intermediate
What does the scope parameter in a pytest fixture control?
The scope controls how often the fixture is invoked. For example, function runs before each test, module runs once per file, and session runs once per test session.
Click to reveal answer
intermediate
How can you use a Flask test client fixture in pytest?
Create a fixture that initializes the Flask app and returns app.test_client(). Tests can then use this client to simulate HTTP requests to the app.
Click to reveal answer
What decorator is used to create a fixture in pytest?
A@pytest.fixture
B@pytest.test
C@pytest.setup
D@pytest.run
In Flask testing, what does the test client fixture provide?
AA database connection
BA logging tool
CA user authentication token
DA way to send HTTP requests to the Flask app
What does setting scope='module' in a fixture do?
ARuns the fixture once per test function
BRuns the fixture once per test module (file)
CRuns the fixture once per test session
DRuns the fixture before every test class
How do tests access a fixture's return value?
ABy calling the fixture function directly
BBy importing the fixture
CBy adding the fixture name as a test function parameter
DBy using a global variable
Why are fixtures preferred over setup code inside tests?
AFixtures allow reuse and cleaner test code
BFixtures run faster than setup code
CFixtures automatically generate test data
DFixtures replace the need for assertions
Explain how to create and use a pytest fixture for a Flask test client.
Think about how to prepare the Flask app and provide a client for tests.
You got /4 concepts.
    Describe the benefits of using test fixtures in pytest when testing Flask applications.
    Consider how fixtures help organize and simplify test preparation.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of a fixture in pytest when testing a Flask app?
      easy
      A. To write the main application logic
      B. To handle user input in the Flask app
      C. To set up and tear down resources needed for tests automatically
      D. To deploy the Flask app to a server

      Solution

      1. Step 1: Understand what fixtures do in pytest

        Fixtures prepare the environment for tests by setting up resources before tests run and cleaning them after.
      2. Step 2: Identify the role of fixtures in Flask testing

        Fixtures help create test clients, databases, or other resources needed for Flask tests automatically.
      3. Final Answer:

        To set up and tear down resources needed for tests automatically -> Option C
      4. Quick Check:

        Fixtures = setup and cleanup [OK]
      Hint: Fixtures prepare test resources automatically [OK]
      Common Mistakes:
      • Confusing fixtures with application code
      • Thinking fixtures handle user input
      • Assuming fixtures deploy the app
      2. Which of the following is the correct way to define a pytest fixture for a Flask test client?
      easy
      A. @pytest.fixture def client(): app = Flask(__name__) yield app.test_client()
      B. @pytest.fixture def client(): app = Flask(__name__) app.test_client()
      C. def client(): app = Flask(__name__) yield app.test_client()
      D. @pytest.fixture def client(): app = Flask(__name__) return app

      Solution

      1. Step 1: Check the use of @pytest.fixture decorator

        The @pytest.fixture decorator is required to mark a fixture. One option lacks it.
      2. Step 2: Identify correct use of yield for setup and teardown

        @pytest.fixture def client(): app = Flask(__name__) yield app.test_client() uses yield to provide the test client and allows cleanup after tests, which is best practice.
      3. Final Answer:

        @pytest.fixture\ndef client():\n app = Flask(__name__)\n yield app.test_client() -> Option A
      4. Quick Check:

        Use @pytest.fixture and yield for fixtures [OK]
      Hint: Use @pytest.fixture and yield to define fixtures [OK]
      Common Mistakes:
      • Omitting @pytest.fixture decorator
      • Returning instead of yielding
      • Not yielding or returning the test client
      3. Given this fixture and test code, what will be printed when running the test?
      @pytest.fixture
      def sample():
          print('Setup')
          yield 'data'
          print('Teardown')
      
      def test_example(sample):
          print(f'Test received: {sample}')
      medium
      A. Setup\nTest received: data\nTeardown
      B. Test received: data\nSetup\nTeardown
      C. Setup\nTeardown\nTest received: data
      D. Test received: data

      Solution

      1. Step 1: Understand fixture execution order

        Before the test runs, the fixture prints 'Setup', then yields 'data' to the test.
      2. Step 2: Analyze test function output and fixture teardown

        The test prints 'Test received: data'. After test finishes, fixture resumes and prints 'Teardown'.
      3. Final Answer:

        Setup\nTest received: data\nTeardown -> Option A
      4. Quick Check:

        Fixture setup -> test -> fixture teardown [OK]
      Hint: Fixture prints before yield, teardown prints after [OK]
      Common Mistakes:
      • Assuming teardown runs before test
      • Ignoring yield pauses fixture
      • Thinking test runs before setup
      4. Identify the error in this pytest fixture code for a Flask app:
      @pytest.fixture
      def client():
          app = Flask(__name__)
          client = app.test_client()
          return client
          print('Cleanup done')
      medium
      A. Fixture must use 'yield' instead of 'return' always
      B. Missing '@pytest.fixture' decorator
      C. 'app.test_client()' is not a valid method
      D. The 'print' statement after 'return' will never execute

      Solution

      1. Step 1: Check code after return statement

        Code after 'return' is unreachable, so 'print' will never run.
      2. Step 2: Confirm other parts are correct

        The decorator is present, 'app.test_client()' is valid, and 'return' is allowed but limits cleanup.
      3. Final Answer:

        The 'print' statement after 'return' will never execute -> Option D
      4. Quick Check:

        Code after return is unreachable [OK]
      Hint: Code after return is ignored; use yield for cleanup [OK]
      Common Mistakes:
      • Thinking print runs after return
      • Assuming return disallows fixture
      • Confusing method names
      5. You want to create a fixture that sets up a temporary database for Flask tests and ensures it is cleaned up after all tests in the module run. Which fixture scope and structure is best?
      hard
      A. @pytest.fixture(scope='function') def temp_db(): db = setup_temp_db() yield db teardown_temp_db(db)
      B. @pytest.fixture(scope='module') def temp_db(): db = setup_temp_db() yield db teardown_temp_db(db)
      C. @pytest.fixture(scope='session') def temp_db(): db = setup_temp_db() return db
      D. @pytest.fixture(scope='module') def temp_db(): db = setup_temp_db() return db teardown_temp_db(db)

      Solution

      1. Step 1: Choose fixture scope for module-wide setup

        Scope 'module' runs once per module, ideal for shared DB setup across tests.
      2. Step 2: Use yield to allow teardown after all tests

        Yield pauses fixture to run tests, then runs teardown after all tests complete.
      3. Final Answer:

        @pytest.fixture(scope='module')\ndef temp_db():\n db = setup_temp_db()\n yield db\n teardown_temp_db(db) -> Option B
      4. Quick Check:

        Module scope + yield for setup and cleanup [OK]
      Hint: Use scope='module' and yield for setup/cleanup [OK]
      Common Mistakes:
      • Using function scope causes repeated setup
      • Returning without yield skips cleanup
      • Placing cleanup code after return
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard