📖 Scenario: You are working on a simple REST API that manages a list of books. Each book has a title and an author. You want to make sure that the API works correctly when you add a book and then retrieve the list of books.
🎯 Goal: Build a small integration test that sends a POST request to add a book and then sends a GET request to retrieve the list of books. You will check that the book you added appears in the list.
📋 What You'll Learn
Create a test client to interact with the REST API
Send a POST request to add a book with exact title and author
Send a GET request to retrieve the list of books
Check that the response contains the book you added
💡 Why This Matters
🌍 Real World
Integration testing is used to make sure that different parts of a web API work together correctly before releasing it to users.
💼 Career
Many software development jobs require writing integration tests to ensure APIs behave as expected and to catch bugs early.
Progress0 / 4 steps
1
Setup test client and initial data
Create a variable called test_client that represents the API client. Also create a dictionary called new_book with these exact entries: 'title': 'The Great Gatsby' and 'author': 'F. Scott Fitzgerald'.
Rest API
Hint
Use APIClient() to create the test client. Define new_book as a dictionary with the exact keys and values.
2
Send POST request to add the book
Use test_client.post to send a POST request to the URL '/books/' with the JSON data new_book. Store the response in a variable called post_response.
Rest API
Hint
Use test_client.post with the URL '/books/' and pass data=new_book and format='json' to send the book data.
3
Send GET request to retrieve books
Use test_client.get to send a GET request to the URL '/books/'. Store the response in a variable called get_response.
Rest API
Hint
Use test_client.get with the URL '/books/' to get the list of books.
4
Check that the added book is in the response
Print the JSON content of get_response and check that it contains the dictionary new_book. Use print(get_response.json()).
Rest API
Hint
Use print(get_response.json()) to see the list of books returned by the API.
Practice
(1/5)
1. What is the main goal of integration testing in REST API development?
easy
A. To measure the speed of the server hardware
B. To test the user interface design
C. To check if different parts of the application work together correctly
D. To write documentation for the API
Solution
Step 1: Understand integration testing purpose
Integration testing focuses on verifying that multiple components or services interact correctly.
Step 2: Compare options with integration testing goal
Only To check if different parts of the application work together correctly describes checking the cooperation of different parts, which matches integration testing.
Final Answer:
To check if different parts of the application work together correctly -> Option C
Quick Check:
Integration testing = check parts work together [OK]
Hint: Integration tests check connections between parts, not UI or speed [OK]
Common Mistakes:
Confusing integration testing with UI testing
Thinking integration tests measure performance
Believing integration tests are for documentation
2. Which of the following is the correct way to send a GET request in a Python integration test using the requests library?
easy
A. response = requests.get('http://api.example.com/data')
B. response = requests.post('http://api.example.com/data')
C. response = requests.fetch('http://api.example.com/data')
D. response = requests.send('http://api.example.com/data')
Solution
Step 1: Recall correct method for GET request in requests library
The method to send a GET request is requests.get().
Step 2: Check options for correct syntax
Only response = requests.get('http://api.example.com/data') uses requests.get() correctly with a URL string.
Final Answer:
response = requests.get('http://api.example.com/data') -> Option A
Quick Check:
GET request method = requests.get() [OK]
Hint: Use requests.get() for GET requests, not post, fetch, or send [OK]
Common Mistakes:
Using requests.post() instead of get() for GET requests
Using non-existent methods like fetch() or send()
Missing quotes around the URL string
3. Consider this Python integration test snippet using requests:
But the test fails with a KeyError on 'items'. What is the likely cause?
medium
A. The URL is incorrect and returns 404
B. The requests library is not imported
C. The status code is not 200
D. The response JSON does not contain the key 'items'
Solution
Step 1: Understand KeyError cause
A KeyError means the key 'items' is missing in the JSON response.
Step 2: Analyze test failure reason
Since status code is asserted as 200, the URL is likely correct and requests imported. The error is missing 'items' key in JSON.
Final Answer:
The response JSON does not contain the key 'items' -> Option D
Quick Check:
KeyError means missing key in JSON [OK]
Hint: KeyError means JSON key missing, not URL or import error [OK]
Common Mistakes:
Assuming URL is wrong without checking status code
Ignoring that status code 200 means request succeeded
Forgetting to import requests library
5. You want to write an integration test that verifies your REST API endpoint /users returns only active users. The API returns JSON like {"users": [{"id":1,"active":true}, {"id":2,"active":false}]}. Which test code snippet correctly checks this condition?
hard
A. response = requests.get('http://api.example.com/users')
users = response.json()['users']
assert any(user['active'] for user in users)
B. response = requests.get('http://api.example.com/users')
users = response.json()['users']
assert all(user['active'] for user in users)
D. response = requests.get('http://api.example.com/users')
assert response.status_code == 404
Solution
Step 1: Understand requirement to check all users are active
The test must confirm every user in the list has active set to true.
Step 2: Analyze code snippets for correctness
response = requests.get('http://api.example.com/users')
users = response.json()['users']
assert all(user['active'] for user in users) uses all() to check all users are active, which matches requirement. response = requests.get('http://api.example.com/users')
users = response.json()['users']
assert any(user['active'] for user in users) checks if any user is active (not enough). response = requests.get('http://api.example.com/users')
users = response.json()['users']
assert user['active'] == True references undefined variable user outside loop. response = requests.get('http://api.example.com/users')
assert response.status_code == 404 checks for 404 status, which is wrong.
Final Answer:
response = requests.get('http://api.example.com/users')
users = response.json()['users']
assert all(user['active'] for user in users) -> Option B
Quick Check:
Use all() to verify all users active [OK]
Hint: Use all() to confirm every user is active [OK]
Common Mistakes:
Using any() instead of all() to check all users
Referencing undefined variables in assertions
Checking wrong HTTP status code
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.