Integration testing in Rest API - Time & Space Complexity
When we run integration tests on REST APIs, we want to know how the time it takes grows as we add more tests or more API calls.
We ask: How does the total test time change when the number of API calls increases?
Analyze the time complexity of the following integration test code snippet.
for (let endpoint of endpoints) {
const response = await fetch(endpoint);
console.assert(response.status === 200);
}
This code tests multiple API endpoints one by one, checking if each returns a successful response.
Look at what repeats in the code:
- Primary operation: Sending a request to each API endpoint and checking the response.
- How many times: Once for each endpoint in the list.
As the number of endpoints grows, the total test time grows roughly the same way.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 API calls and checks |
| 100 | 100 API calls and checks |
| 1000 | 1000 API calls and checks |
Pattern observation: Doubling the number of endpoints roughly doubles the total test time.
Time Complexity: O(n)
This means the total time grows in direct proportion to the number of API endpoints tested.
[X] Wrong: "Running more tests won't affect total time much because each test is fast."
[OK] Correct: Even if each test is quick, running many tests adds up, so total time grows with the number of tests.
Understanding how test time grows helps you design efficient test suites and shows you think about real-world software quality.
"What if we ran all API calls in parallel instead of one by one? How would the time complexity change?"
Practice
integration testing in REST API development?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 CQuick Check:
Integration testing = check parts work together [OK]
- Confusing integration testing with UI testing
- Thinking integration tests measure performance
- Believing integration tests are for documentation
requests library?Solution
Step 1: Recall correct method for GET request in requests library
The method to send a GET request isrequests.get().Step 2: Check options for correct syntax
Only response = requests.get('http://api.example.com/data') usesrequests.get()correctly with a URL string.Final Answer:
response = requests.get('http://api.example.com/data') -> Option AQuick Check:
GET request method = requests.get() [OK]
- Using requests.post() instead of get() for GET requests
- Using non-existent methods like fetch() or send()
- Missing quotes around the URL string
requests:
response = requests.post('http://api.example.com/login', json={'user':'admin', 'pass':'1234'})
print(response.status_code)
What will be the printed output if the login is successful and the server returns HTTP 200?Solution
Step 1: Understand HTTP status codes
HTTP 200 means success, 404 means not found, 500 means server error, 403 means forbidden.Step 2: Analyze the code output
The code printsresponse.status_code. If login is successful, server returns 200, so output is 200.Final Answer:
200 -> Option AQuick Check:
Success status code = 200 [OK]
- Confusing 404 (not found) with success
- Assuming 500 means success
- Mixing 403 (forbidden) with success
response = requests.get('http://api.example.com/items')
assert response.status_code == 200
assert response.json()['items']
But the test fails with a KeyError on 'items'. What is the likely cause?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 DQuick Check:
KeyError means missing key in JSON [OK]
- Assuming URL is wrong without checking status code
- Ignoring that status code 200 means request succeeded
- Forgetting to import requests library
/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?Solution
Step 1: Understand requirement to check all users are active
The test must confirm every user in the list hasactiveset 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) usesall()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 variableuseroutside 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 BQuick Check:
Use all() to verify all users active [OK]
- Using any() instead of all() to check all users
- Referencing undefined variables in assertions
- Checking wrong HTTP status code
Ready to prove it?
Pass the test and this pattern moves unknown
