Essential Data Structures for API Testing in Python
Effective API testing in Python relies heavily on selecting the appropriate data structures to manage inputs, outputs, and test configurations. The primary structures—lists, dictionaries, and tuples—serve distinct purposes.
Lists
A list is a mutable, ordered collection that can store elements of varying data types. It is ideal for grouping related items that require iteration.
customer_names = ['alice', 'bob', 'charlie']
endpoint_list = [
'https://api.server.com/users/101',
'https://api.server.com/users/102',
'https://api.server.com/users/103'
]
In test automatino, lists are frequently used to hold multiple data points for sequential execution, such as a series of user IDs for wich GET requests must be made.
import requests
product_codes = ['PRD001', 'PRD002', 'PRD003']
for code in product_codes:
result = requests.get(f'https://api.store.com/products/{code}')
assert result.status_code == 200
product_details = result.json()
assert 'price' in product_details and 'in_stock' in product_details
Dictionaries
Dictionaries are unordered, mutable collections of key-value pairs. Keys must be immutable and unique, while values can be any object. This structure is fundamental for representing JSON-like data.
login_payload = {
'user_login': 'tester',
'user_pass': 'Pass1234',
'remember_me': True
}
api_response = {
'account_id': 555,
'full_name': 'Jane Smith',
'account_status': 'verified'
}
Dictionaries are commonly used to construct request bodies and parse JSON responses, allowing easy access to specific fields via keys.
import json
import requests
registration_info = {
'login': 'new_user',
'contact_email': 'user@domain.net',
'passphrase': 'MySecret!2024'
}
request_headers = {'Content-Type': 'application/json'}
reply = requests.post('https://api.service.com/register',
headers=request_headers,
data=json.dumps(registration_info))
assert reply.status_code == 200
Tuples
A tuple is an immutable, ordered sequence. Once defined, its contents cannot be altered, making it suitable for storing constant values.
system_roles = ('guest', 'member', 'moderator')
gps_location = (34.0522, -118.2437)
In testing, tuples can secure configuration data, such as authentication tokens or environment settings, preventing accidental modification.
import requests
from requests.auth import HTTPBasicAuth
static_auth = ('api_admin', 'AdminKey789')
secure_reply = requests.get('https://api.secure.com/config',
auth=HTTPBasicAuth(*static_auth))
assert secure_reply.status_code == 200
Processing JSON Responses
API responses in JSON format are naturally converted to dictionaries for inspection and validation.
import json
sample_response = '{"order_id": 789, "items": ["book", "pen"], "shipped": false}'
parsed_data = json.loads(sample_response)
assert parsed_data['order_id'] == 789
assert 'pen' in parsed_data['items']
assert parsed_data['shipped'] is False