Bird
Raised Fist0
Testing Fundamentalstesting~8 mins

API test automation concepts in Testing Fundamentals - Framework Patterns

Choose your learning style10 modes available
Framework Mode - API test automation concepts
Folder Structure
api-test-project/
├── tests/
│   ├── test_user_api.py
│   ├── test_product_api.py
│   └── __init__.py
├── api_clients/
│   ├── user_client.py
│   ├── product_client.py
│   └── __init__.py
├── utils/
│   ├── helpers.py
│   ├── validators.py
│   └── __init__.py
├── config/
│   ├── config.yaml
│   └── __init__.py
├── reports/
│   └── (generated test reports)
├── conftest.py
└── requirements.txt
  
Test Framework Layers
  • API Clients Layer: Contains classes or functions to send HTTP requests to API endpoints. Encapsulates request details like URLs, headers, and payloads.
  • Test Layer: Contains test cases that use API clients to call APIs and assert responses.
  • Utilities Layer: Helper functions for common tasks like data validation, response parsing, or token generation.
  • Configuration Layer: Holds environment settings, base URLs, credentials, and other config data.
  • Reporting Layer: Generates readable test reports after test runs.
Configuration Patterns
  • Environment Files: Use YAML or JSON files (e.g., config.yaml) to store base URLs, API keys, and environment-specific data.
  • Parameterization: Use fixtures or setup methods to load config data dynamically based on environment variables.
  • Secrets Management: Store sensitive data like tokens or passwords outside code, e.g., environment variables or secure vaults.
  • Browser/Client Settings: For API tests, configure HTTP client settings like timeouts or retries in config files.
Test Reporting and CI/CD Integration
  • Test Reports: Use tools like Allure or built-in pytest reports to generate clear pass/fail summaries with details.
  • Logs: Capture request and response logs for debugging failed tests.
  • CI/CD Integration: Integrate tests into pipelines (e.g., GitHub Actions, Jenkins) to run tests automatically on code changes.
  • Notifications: Configure alerts (email, Slack) for test failures to inform the team quickly.
Best Practices
  1. Use API Clients: Encapsulate API calls in reusable client classes to avoid duplication and ease maintenance.
  2. Isolate Tests: Make tests independent so one test's failure does not affect others.
  3. Validate Responses: Check status codes, response schema, and data correctness, not just success/fail.
  4. Use Data-Driven Testing: Run tests with multiple input sets to cover more scenarios efficiently.
  5. Handle Environment Configurations: Support multiple environments (dev, staging, prod) with easy config switching.
Self Check

Where in this folder structure would you add a new API client for the "Order" endpoint?

Key Result
Organize API tests with clear layers: API clients, tests, utilities, config, and reporting for maintainability and clarity.

Practice

(1/5)
1. What is the main purpose of API test automation?
easy
A. To design the user interface of an application
B. To check if different software parts communicate correctly
C. To write code for the backend server
D. To create database schemas

Solution

  1. Step 1: Understand API test automation goal

    API test automation focuses on verifying communication between software parts via APIs.
  2. Step 2: Eliminate unrelated options

    Designing UI, writing backend code, and creating database schemas are not related to API test automation.
  3. Final Answer:

    To check if different software parts communicate correctly -> Option B
  4. Quick Check:

    API test automation = communication check [OK]
Hint: API tests check communication, not UI or database [OK]
Common Mistakes:
  • Confusing API testing with UI testing
  • Thinking API tests create backend code
  • Mixing API testing with database design
2. Which of the following is the correct way to check the HTTP status code in an automated API test using Python's requests library?
easy
A. response.code == 200
B. response.status == 200
C. response.status_code == 200
D. response.statusCode == 200

Solution

  1. Step 1: Recall Python requests response attribute

    The correct attribute to get HTTP status code is status_code.
  2. Step 2: Match options with correct attribute

    Only response.status_code == 200 uses the correct attribute and syntax.
  3. Final Answer:

    response.status_code == 200 -> Option C
  4. Quick Check:

    requests status code = status_code [OK]
Hint: Use response.status_code to check HTTP status in Python [OK]
Common Mistakes:
  • Using incorrect attribute names like status or code
  • Confusing camelCase with snake_case
  • Forgetting double equals for comparison
3. Given this Python code snippet for an API test:
import requests
response = requests.get('https://api.example.com/data')
print(response.json()['status'])

What will be the output if the API response JSON is {"status": "success", "data": []}?
medium
A. "success"
B. KeyError
C. {'status': 'success'}
D. success

Solution

  1. Step 1: Understand response.json() output

    response.json() returns a Python dictionary parsed from JSON.
  2. Step 2: Access the 'status' key value

    Accessing ['status'] returns the string "success" without quotes in print output.
  3. Final Answer:

    success -> Option D
  4. Quick Check:

    Print dict value = string without quotes [OK]
Hint: Print of string value shows without quotes in Python [OK]
Common Mistakes:
  • Expecting quotes around printed string
  • Confusing JSON string with Python print output
  • Assuming KeyError without checking keys
4. You wrote this API test code snippet:
response = requests.post('https://api.example.com/login', data={'user': 'admin', 'pass': '1234'})
assert response.status_code = 200

What is the error and how to fix it?
medium
A. Use '==' for comparison in assert, not '='
B. Change 'data' to 'json' in requests.post() call
C. Use 'response.status' instead of 'response.status_code'
D. Add parentheses around assert condition

Solution

  1. Step 1: Identify syntax error in assert statement

    The assert statement uses '=' which is assignment, not comparison.
  2. Step 2: Correct assert syntax

    Replace '=' with '==' to compare response.status_code to 200.
  3. Final Answer:

    Use '==' for comparison in assert, not '=' -> Option A
  4. Quick Check:

    Assert needs '==' for comparison [OK]
Hint: Assert uses '==' to compare, '=' assigns [OK]
Common Mistakes:
  • Using '=' instead of '==' in assert
  • Confusing 'data' and 'json' parameters (not error here)
  • Using wrong attribute like response.status
5. You want to automate testing an API that returns a list of users with their ages. You need to verify the API only returns users aged 18 or older. Which approach best fits this requirement?
hard
A. Send a GET request, parse JSON response, then assert all ages >= 18
B. Send a POST request with age filter, then check status code 200
C. Check only the first user's age in the response
D. Verify the response content type is 'text/html'

Solution

  1. Step 1: Understand requirement to verify all users' ages

    We must check every user's age is 18 or older in the response data.
  2. Step 2: Choose approach that parses response and asserts condition on all users

    Sending GET, parsing JSON, and asserting all ages >= 18 matches the need.
  3. Final Answer:

    Send a GET request, parse JSON response, then assert all ages >= 18 -> Option A
  4. Quick Check:

    Check all data items for condition [OK]
Hint: Check all items, not just one, for correct data [OK]
Common Mistakes:
  • Checking only first user age
  • Using wrong HTTP method for retrieval
  • Verifying wrong response content type
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