Bird
Raised Fist0
PyTesttesting~10 mins

pytest-django for Django testing - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to import the pytest module for Django testing.

PyTest
import [1]
Drag options to blanks, or click blank then click option'
Aunittest
Bpytest
Cdjango
Drequests
Attempts:
3 left
💡 Hint
Common Mistakes
Importing 'django' instead of 'pytest'.
Using 'unittest' which is a different testing framework.
2fill in blank
medium

Complete the code to mark a test function to use the Django database.

PyTest
@pytest.mark.[1]
def test_create_user(db):
    from django.contrib.auth.models import User
    user = User.objects.create(username='testuser')
    assert user.username == 'testuser'
Drag options to blanks, or click blank then click option'
Askip
Bslow
Cdjango_db
Dxfail
Attempts:
3 left
💡 Hint
Common Mistakes
Using '@pytest.mark.skip' which skips the test.
Using '@pytest.mark.slow' which is unrelated.
3fill in blank
hard

Fix the error in the test function to correctly use the Django test client fixture.

PyTest
def test_homepage([1]):
    response = client.get('/')
    assert response.status_code == 200
Drag options to blanks, or click blank then click option'
Aclient
Bdb
Crequest
Dsettings
Attempts:
3 left
💡 Hint
Common Mistakes
Forgetting to add 'client' as a parameter.
Using 'db' which is for database access, not client.
4fill in blank
hard

Fill both blanks to create a test that checks if a Django model instance is saved correctly.

PyTest
from myapp.models import Item

@pytest.mark.[1]
def test_item_creation([2]):
    item = Item(name='Test Item')
    item.save()
    assert Item.objects.count() == 1
Drag options to blanks, or click blank then click option'
Adjango_db
Bclient
Cdb
Drequest
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'client' instead of 'db' as a fixture.
Missing the django_db mark.
5fill in blank
hard

Fill all three blanks to write a test that uses the Django test client to check the homepage response and content.

PyTest
def test_homepage_content([1]):
    response = [2].get('/')
    assert response.status_code == 200
    assert '[3]' in response.content.decode()
Drag options to blanks, or click blank then click option'
Aclient
CWelcome
Ddb
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'db' instead of 'client' for the fixture.
Checking for wrong content string.

Practice

(1/5)
1. What is the main purpose of using @pytest.mark.django_db in pytest-django tests?
easy
A. To skip the test when the database is not available
B. To disable database migrations during the test
C. To mark the test as a slow test
D. To allow the test to access and modify the Django database

Solution

  1. Step 1: Understand the role of @pytest.mark.django_db

    This marker tells pytest that the test needs database access, so pytest sets up the test database properly.
  2. Step 2: Identify what happens without the marker

    Without this marker, tests cannot access or modify the database and will fail if they try.
  3. Final Answer:

    To allow the test to access and modify the Django database -> Option D
  4. Quick Check:

    Database access marker = B [OK]
Hint: Use @pytest.mark.django_db to enable DB access in tests [OK]
Common Mistakes:
  • Thinking it skips tests instead of enabling DB access
  • Confusing it with marking tests as slow
  • Assuming it disables migrations
2. Which of the following is the correct way to use the Django test client fixture in pytest-django?
easy
A. def test_view(client): response = client.get('/'); assert response.status_code == 200
B. def test_view(): response = client.get('/'); assert response.status_code == 200
C. def test_view(client): response = client.post('/'); assert response.status_code = 200
D. def test_view(client): response = client.get('/'); assert response.status == 200

Solution

  1. Step 1: Check the function signature and usage

    The test function must accept the client fixture as a parameter to use it.
  2. Step 2: Verify the assertion syntax

    The assertion must use == to compare response.status_code to 200.
  3. Final Answer:

    def test_view(client): response = client.get('/'); assert response.status_code == 200 -> Option A
  4. Quick Check:

    Correct fixture use and assertion = C [OK]
Hint: Pass client as parameter and use response.status_code == 200 [OK]
Common Mistakes:
  • Not passing client as a parameter
  • Using single = instead of == in assertion
  • Checking response.status instead of response.status_code
3. Given the following test code using pytest-django, what will be the output when running the test?
import pytest
from django.contrib.auth.models import User

@pytest.mark.django_db
def test_user_count():
    User.objects.create(username='alice')
    User.objects.create(username='bob')
    count = User.objects.count()
    assert count == 2
    print(count)
medium
A. Test fails because count is 0
B. Test passes and prints 2
C. Test raises a database error
D. Test passes but prints 0

Solution

  1. Step 1: Analyze database access and object creation

    The test uses @pytest.mark.django_db, so it can create User objects in the test database.
  2. Step 2: Count the User objects and assert

    Two users are created, so User.objects.count() returns 2, matching the assertion.
  3. Final Answer:

    Test passes and prints 2 -> Option B
  4. Quick Check:

    User count = 2 [OK]
Hint: Mark test with django_db to create and count users correctly [OK]
Common Mistakes:
  • Forgetting @pytest.mark.django_db causes DB errors
  • Assuming count is zero without creation
  • Confusing print output with test result
4. Identify the error in this pytest-django test code and how to fix it:
def test_create_user():
    User.objects.create(username='charlie')
    assert User.objects.count() == 1
medium
A. Test function name should start with 'test_'
B. User model is not imported
C. Missing @pytest.mark.django_db decorator to allow DB access
D. Assertion should check for 0 instead of 1

Solution

  1. Step 1: Check database access requirement

    The test tries to create a User in the database but lacks @pytest.mark.django_db, so DB access is not allowed.
  2. Step 2: Fix by adding the missing decorator

    Adding @pytest.mark.django_db above the test function enables database access and fixes the error.
  3. Final Answer:

    Missing @pytest.mark.django_db decorator to allow DB access -> Option C
  4. Quick Check:

    DB access decorator missing = D [OK]
Hint: Add @pytest.mark.django_db to tests using the database [OK]
Common Mistakes:
  • Not adding the django_db marker
  • Assuming import errors without checking imports
  • Misunderstanding assertion values
5. You want to test a Django view that requires a logged-in user using pytest-django. Which is the best way to simulate a logged-in user in your test?
hard
A. Use the client.force_login(user) method after creating a user in the test database
B. Set a session variable manually without creating a user
C. Call the view function directly without using the client fixture
D. Use @pytest.mark.django_db without logging in the user

Solution

  1. Step 1: Understand how to simulate login in pytest-django

    The client.force_login(user) method logs in the user for the test client session.
  2. Step 2: Create a user in the test database first

    You must create a user in the test database (with @pytest.mark.django_db) before calling force_login.
  3. Final Answer:

    Use the client.force_login(user) method after creating a user in the test database -> Option A
  4. Quick Check:

    Use force_login with created user = A [OK]
Hint: Create user and call client.force_login(user) to simulate login [OK]
Common Mistakes:
  • Trying to set session manually without user
  • Calling views directly without client
  • Forgetting to create user before login
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