Complete End-to-End Documentation - API Test Automation ( https://decentroqa.vercel.app/)
- Project Overview
- Test Results Verification
- API Endpoints Covered
- Environment Setup
- Test Execution Procedures
- Testing Methodology
- Project Architecture
- Troubleshooting Guide
- Submission Guidelines
Develop automation tests using Robot Framework to validate REST API endpoints from reqres.in covering:
- ✅ GET API - Data retrieval operations
- ✅ POST API - Data creation and authentication operations
- ✅ PUT API - Data update operations
- ✅ 43 comprehensive test cases across all HTTP methods
- ✅ 100% pass rate - All tests working perfectly
- ✅ Professional framework with reusable components
- ✅ Complete documentation and setup instructions
- ✅ Bonus coverage - DELETE and PATCH operations
| Technology | Version | Purpose |
|---|---|---|
| Robot Framework | 7.0.1 | Test automation framework |
| RequestsLibrary | 0.9.7 | HTTP/REST API testing |
| Python | 3.9.11 | Runtime environment |
| reqres.in API | v1 | Target API for testing |
EXECUTION SUMMARY (October 27, 2025)
══════════════════════════════════════════
Total Tests: 43
Passed: 43 (100%)
Failed: 0 (0%)
Execution Time: ~30 seconds
API Calls Used: 43/100 daily quota
══════════════════════════════════════════
| Test Suite | Total | Passed | Failed | Pass Rate | Coverage |
|---|---|---|---|---|---|
| DELETE API Tests | 9 | 9 | 0 | 100% ✅ | Full CRUD delete operations |
| GET API Tests | 10 | 10 | 0 | 100% ✅ | Data retrieval & pagination |
| POST API Tests | 13 | 13 | 0 | 100% ✅ | Data creation & authentication |
| PUT API Tests | 11 | 11 | 0 | 100% ✅ | Data updates (full & partial) |
- ✅ GET Single User - Valid ID
- ✅ GET List Users - Default Page
- ✅ GET List Users - Page 1
- ✅ GET List Users - Page 2
- ✅ GET List Users - Custom Per Page
- ✅ GET Single Resource
- ✅ GET Users - With Delay
- ✅ GET Single User - Not Found (404 test)
- ✅ GET Single Resource - Not Found (404 test)
- ✅ GET List Users - Empty Page
Creation Tests:
- ✅ POST Create User - Valid Data
- ✅ POST Create User - Only Name Field
- ✅ POST Create User - Only Job Field
- ✅ POST Create User - Extra Fields
- ✅ POST Create User - Special Characters
- ✅ POST Create User - Empty Data
- ✅ POST Create User - Null Values
Authentication Tests: 8. ✅ POST Register - Successful Registration 9. ✅ POST Login - Successful Login 10. ✅ POST Register - Missing Password 11. ✅ POST Register - Missing Email 12. ✅ POST Login - Missing Password 13. ✅ POST Login - Missing Email
Full Update Tests:
- ✅ PUT Update User - Valid Data with All Fields
- ✅ PUT Update User - Only Name Field
- ✅ PUT Update User - Only Job Field
- ✅ PUT Update User - Different User IDs
- ✅ PUT Update User - Special Characters
- ✅ PUT Update User - Timestamp Validation
- ✅ PUT Update User - Empty Body
- ✅ PUT Update User - Very Large User ID
- ✅ PUT Update User - Null Values
Partial Update Tests: 10. ✅ PATCH Update User - Single Field 11. ✅ PATCH Update User - Multiple Fields
- ✅ DELETE User - Valid User ID
- ✅ DELETE User - Different User IDs
- ✅ DELETE User - Multiple Sequential Deletes
- ✅ DELETE User - Verify Response Headers
- ✅ DELETE User - Non-Existent User ID
- ✅ DELETE User - Very Large User ID
- ✅ DELETE User - Zero User ID
- ✅ DELETE User - String User ID
- ✅ DELETE User - Repeated Delete Same User
- Base URL:
https://reqres.in/api - Authentication: API Key (
x-api-key: reqres-free-v1) - Content-Type:
application/json - Rate Limit: 100 requests/day (free tier)
Purpose: Retrieve single user by ID
Test Coverage: 4 test cases
Scenarios Tested:
- ✅ Valid user ID (returns 200 with user data)
- ✅ Invalid user ID (returns 404 not found)
- ✅ Zero user ID (returns 404)
- ✅ Response structure validation
Sample Request:
GET /api/users/2
x-api-key: reqres-free-v1Sample Response:
{
"data": {
"id": 2,
"email": "janet.weaver@reqres.in",
"first_name": "Janet",
"last_name": "Weaver",
"avatar": "https://reqres.in/img/faces/2-image.jpg"
},
"support": {
"url": "https://reqres.in/#support-heading",
"text": "To keep ReqRes free, contributions towards server costs are appreciated!"
}
}Purpose: List users with pagination
Test Coverage: 5 test cases
Scenarios Tested:
- ✅ Default pagination (page 1, 6 per page)
- ✅ Custom page numbers (page 1, page 2)
- ✅ Custom per_page parameter
- ✅ Empty page (beyond available data)
- ✅ Response structure validation
Sample Request:
GET /api/users?page=2&per_page=3
x-api-key: reqres-free-v1Purpose: Create new user
Test Coverage: 7 test cases
Scenarios Tested:
- ✅ Valid user data (name + job)
- ✅ Only name field provided
- ✅ Only job field provided
- ✅ Additional custom fields
- ✅ Special characters in data
- ✅ Empty request body
- ✅ Null values handling
Sample Request:
POST /api/users
x-api-key: reqres-free-v1
Content-Type: application/json
{
"name": "John Doe",
"job": "Software Engineer"
}Sample Response:
{
"name": "John Doe",
"job": "Software Engineer",
"id": "123",
"createdAt": "2025-10-27T20:30:45.123Z"
}Purpose: Update existing user (full update)
Test Coverage: 9 test cases
Scenarios Tested:
- ✅ Complete user update (name + job)
- ✅ Single field updates
- ✅ Different user IDs
- ✅ Special characters
- ✅ Timestamp validation
- ✅ Empty request body
- ✅ Large user IDs
- ✅ Null values
Purpose: Partially update user
Test Coverage: 2 test cases
Scenarios Tested:
- ✅ Single field partial update
- ✅ Multiple fields partial update
Purpose: Delete user by ID
Test Coverage: 9 test cases
Scenarios Tested:
- ✅ Valid user deletion
- ✅ Multiple user deletions
- ✅ Sequential delete operations
- ✅ Response headers validation
- ✅ Non-existent user IDs
- ✅ Edge cases (zero, large, string IDs)
- ✅ Repeated deletions
Purpose: Retrieve single resource (color data)
Test Coverage: 2 test cases
Scenarios Tested:
- ✅ Valid resource ID
- ✅ Invalid resource ID (404)
Purpose: Register new user
Test Coverage: 3 test cases
Scenarios Tested:
- ✅ Successful registration with valid credentials
- ✅ Missing password field (400 error)
- ✅ Missing email field (400 error)
Valid Registration Request:
POST /api/register
x-api-key: reqres-free-v1
Content-Type: application/json
{
"email": "eve.holt@reqres.in",
"password": "pistol"
}Purpose: Authenticate existing user
Test Coverage: 2 test cases
Scenarios Tested:
- ✅ Successful login with valid credentials
- ✅ Missing required fields (400 error)
Check Python Installation:
python --version
# Expected: Python 3.9.11 or higherCheck pip Installation:
pip --version
# Expected: pip 22.0.4 or higher Verify Internet Access:
# Test API accessibility
curl -H "x-api-key: reqres-free-v1" https://reqres.in/api/users/1mkdir decentroqa
cd decentroqa# Windows
python -m venv myvenv
myvenv\Scripts\activate
# Linux/macOS
python3 -m venv myvenv
source myvenv/bin/activateVerification: Command prompt should show (myvenv)
pip install --upgrade pip
pip install -r requirements.txtExpected Output:
Successfully installed:
- robotframework-7.0.1
- robotframework-requests-0.9.7
- requests-2.31.0
- ... (other dependencies)
robot --versionExpected Output:
Robot Framework 7.0.1 (Python 3.9.11 on win32)
File: resources/variables.robot
${API_KEY} reqres-free-v1Verification Test:
# Test API with key
curl -H "x-api-key: reqres-free-v1" https://reqres.in/api/users
# Should return 200 OK with user dataRun smoke tests first to verify setup:
myvenv\Scripts\activate
robot --outputdir results --include smoke tests/Expected Output:
6 tests, 6 passed, 0 failed
If smoke tests pass → Setup is correct!
robot --outputdir results tests/# GET API tests (10 tests)
robot tests/get_api_tests.robot
# POST API tests (13 tests)
robot tests/post_api_tests.robot
# PUT API tests (11 tests)
robot tests/put_api_tests.robot
# DELETE API tests (9 tests)
robot tests/delete_api_tests.robot# Only positive tests
robot --include positive tests/
# Only negative tests
robot --include negative tests/
# Only creation tests
robot --include create tests/# Double-click or run:
run_all_tests.batchmod +x run_all_tests.sh
./run_all_tests.shrobot --outputdir results --timestampoutputs tests/robot --output my_output.xml --log my_log.html --report my_report.html tests/pip install robotframework-pabot
pabot --processes 2 tests/Purpose: Verify API works correctly under normal conditions
Examples:
- Valid user creation with proper data
- Successful user retrieval by ID
- Correct update operations
- Successful authentication
Success Criteria:
- Correct HTTP status codes (200, 201, 204)
- Valid response structure
- Correct data in response
- Acceptable response times
Purpose: Verify API handles invalid input gracefully
Examples:
- Non-existent user IDs (should return 404)
- Missing required fields (should return 400)
- Invalid data types
- Empty request bodies
Success Criteria:
- Appropriate error status codes (400, 404)
- Error messages in response
- No system crashes or 500 errors
${VALID_USER_ID} 2
${VALID_USER_EMAIL} janet.weaver@reqres.in
${VALID_USER_FIRST_NAME} Janet
${VALID_USER_LAST_NAME} Weaver
${NEW_USER_NAME} John Doe
${NEW_USER_JOB} Software Engineer${INVALID_USER_ID} 999
${ZERO_USER_ID} 0
${NEGATIVE_USER_ID} -1
${STRING_USER_ID} abc${VALID_EMAIL} eve.holt@reqres.in
${VALID_PASSWORD} pistol
${INVALID_EMAIL} test@test.com-
Status Code Verification
Should Be Equal As Integers ${response.status_code} 200
-
Response Structure Validation
Should Contain ${response.json()} data Should Contain ${response.json()} support
-
Data Integrity Checks
Should Be Equal As Strings ${json}[name] John Doe Should Not Be Empty ${json}[id]
-
Response Time Validation
Verify Response Time ${response} 5
decentroqa/
├── tests/ # Test suites (43 tests)
│ ├── get_api_tests.robot # GET operations (10 tests)
│ ├── post_api_tests.robot # POST operations (13 tests)
│ ├── put_api_tests.robot # PUT/PATCH operations (11 tests)
│ ├── delete_api_tests.robot # DELETE operations (9 tests)
│ └── __init__.robot # Test suite initialization
│
├── resources/ # Reusable components
│ ├── keywords.robot # Custom keywords (27 functions)
│ └── variables.robot # Configuration & test data
│
├── results/ # Test execution outputs
│ ├── report.html # Main test report (visual)
│ ├── log.html # Detailed execution log
│ └── output.xml # Machine-readable results
│
├── README.md # Main project documentation
├── API_DOCUMENTATION.md # API reference guide
├── TEST_RESULTS_SUMMARY.md # Detailed test analysis
├── QUICK_START.md # 5-minute setup guide
├── COMPLETE_DOCUMENTATION.md # This comprehensive guide
│
├── requirements.txt # Python dependencies
├── .gitignore # Version control rules
│
├── run_all_tests.bat # Windows test runner
└── run_all_tests.sh # Linux/macOS test runner
- Individual test files for each HTTP method
- Descriptive test names and documentation
- Proper tagging for test organization
- Suite setup/teardown for session management
-
keywords.robot: Reusable test functions
- Session management (setup/teardown)
- HTTP request wrappers
- Response validation functions
- Data creation utilities
-
variables.robot: Centralized configuration
- API configuration (URL, key)
- Status code constants
- Test data sets
- User credentials
- report.html: Executive summary with statistics
- log.html: Technical details for debugging
- output.xml: Machine-readable for CI/CD integration
# Centralized API interaction
Send GET Request
Send POST Request
Send PUT Request
Send DELETE Request# Parameterized test data
FOR ${user_id} IN RANGE 20 23
${response}= Send DELETE Request /users/${user_id} ${STATUS_NO_CONTENT}
END# Reusable validation functions
Verify User Data In Response
Verify Created User Response
Verify Updated User Response'python' is not recognized as an internal or external command
Solution:
- Install Python from https://python.org
- Add Python to PATH during installation
- Restart terminal
- Verify:
python --version
ERROR: Could not install packages due to an EnvironmentError
Solution:
# Try with administrator privileges
pip install --user robotframework
# or
python -m pip install --upgrade pip
pip install -r requirements.txtmyvenv\Scripts\activate : execution of scripts is disabled on this system
Solution (Windows PowerShell):
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
myvenv\Scripts\activate401 != 200: API returned 401 - Missing API key
Solution:
- Verify API key in
resources/variables.robot - Check internet connection
- Test manually:
curl -H "x-api-key: reqres-free-v1" https://reqres.in/api/users/1
429 != 201: Rate limiting - too many requests
Solution:
- Wait 24 hours for quota reset
- Run fewer tests:
robot --include smoke tests/ - Get premium API key from reqres.in
ConnectionError: Failed to establish a new connection
Solution:
- Check internet connection
- Verify firewall/proxy settings
- Test API accessibility in browser: https://reqres.in/api/users
No report.html found after test execution
Solution:
- Check --outputdir parameter:
robot --outputdir results tests/ - Verify write permissions in directory
- Check disk space availability
File not found when clicking report.html
Solution:
- Use full path:
file:///D:/NoSQL/decentroqa/results/report.html - Right-click → Open with → Browser
- Copy file to web server if security restrictions apply
Before running tests, verify:
- ✅ Virtual environment activated (
(myvenv)in prompt) - ✅ Dependencies installed (
robot --versionworks) - ✅ API accessibility (
curltest passes) - ✅ Sufficient API quota (check reqres.in dashboard)
- ✅ Results directory exists or will be created
myvenv\Scripts\activaterobot --outputdir results --include smoke tests/Expected: 6 tests, 6 passed, 0 failed
robot --outputdir results tests/Expected: 43 tests, 43 passed, 0 failed
- Open
results/report.htmlin browser - Review test statistics
- Check individual test results
- Verify all critical paths tested
If any tests fail:
- Check
results/log.htmlfor detailed error info - Identify root cause (API quota, connectivity, etc.)
- Apply appropriate troubleshooting steps
- Re-run affected tests
# Example GitHub Actions workflow
name: API Tests
on:
schedule:
- cron: '0 9 * * *' # Run daily at 9 AM
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
python-version: 3.9
- run: pip install -r requirements.txt
- run: robot --outputdir results tests/
- uses: actions/upload-artifact@v2
with:
name: test-reports
path: results/- HTTP Methods: 4/4 covered (GET, POST, PUT, DELETE)
- Response Codes: 5/7 tested (200, 201, 204, 400, 404)
- Data Scenarios: 15+ different data validation scenarios
- Error Handling: 18 negative test cases
- Average Response Time: < 1 second per request
- Total Execution Time: ~30 seconds for full suite
- API Quota Usage: 43/100 requests (43%)
- Test Stability: 100% pass rate achieved
- Repeatability: Consistent results across runs
- Error Recovery: Graceful handling of API issues
- ✅ Clear naming conventions: Descriptive test and keyword names
- ✅ Proper documentation: Every test case documented
- ✅ Consistent formatting: Standard indentation and structure
- ✅ Resource separation: Keywords and variables in separate files
- ✅ Tagging strategy: Logical test categorization
- ✅ Session management: Proper setup and teardown
- ✅ Response validation: Status codes, structure, data integrity
- ✅ Error handling: Expected status codes for failure scenarios
- ✅ Data isolation: Each test independent of others
- ✅ Performance monitoring: Response time validation
Purpose: High-level overview for stakeholders Contents:
- Overall pass/fail statistics
- Test execution timeline
- Suite-level results
- Tag-based filtering
- Interactive navigation
Best For: Project managers, QA leads, stakeholders
Purpose: Detailed technical information for developers Contents:
- Step-by-step execution logs
- Request/response data
- Error messages and stack traces
- Variable values at each step
- Timing information
Best For: Test developers, debugging, technical analysis
Purpose: Integration with CI/CD tools Contents:
- Structured XML format
- Test metadata
- Results suitable for parsing
- Integration with Jenkins, Azure DevOps, etc.
Best For: Automated reporting, CI/CD pipelines, test metrics
Statistics Section:
✅ 43 tests passed (100%)
❌ 0 tests failed (0%)
⏱️ Execution time: 30 seconds
Test Suite Results:
- Each suite shows individual test results
- Click test names to see detailed logs
- Filter by tags (positive, negative, smoke, etc.)
- Sort by status, execution time, etc.
Tag Statistics:
positive: 26 passed, 0 failed
negative: 17 passed, 0 failed
smoke: 6 passed, 0 failed
get: 10 passed, 0 failed
post: 13 passed, 0 failed
For each failed test (none in our case):
- Exact error message
- Request details (URL, headers, body)
- Response details (status, headers, body)
- Stack trace for debugging
For performance analysis:
- Individual request timing
- Slowest operations identification
- Response time trends
| Requirement | Status | Evidence |
|---|---|---|
| ✅ GET API Tests | DONE | 10 test cases, 100% pass rate |
| ✅ POST API Tests | DONE | 13 test cases, 100% pass rate |
| ✅ PUT API Tests | DONE | 11 test cases, 100% pass rate |
| ✅ Robot Framework | DONE | Version 7.0.1, professional implementation |
| ✅ reqres.in APIs | DONE | All endpoints from reqres.in used |
| ✅ Positive Scenarios | DONE | 26 positive test cases |
| ✅ Negative Scenarios | DONE | 17 negative test cases |
| ✅ GitHub Repository | READY | Clean code, proper .gitignore |
| ✅ README Documentation | DONE | Complete setup & execution guide |
| ✅ Source Code Quality | DONE | Clean, documented, maintainable |
tests/- 4 test suite files (43 tests total)resources/- Keywords and variables for reusabilityrequirements.txt- Dependency management.gitignore- Proper version control setup
README.md- Complete project documentation (470 lines)API_DOCUMENTATION.md- API reference guide (681 lines)QUICK_START.md- 5-minute setup guideTEST_RESULTS_SUMMARY.md- Detailed test analysisCOMPLETE_DOCUMENTATION.md- This comprehensive guide
run_all_tests.bat- Windows automationrun_all_tests.sh- Linux/macOS automation
results/report.html- Visual test reportresults/log.html- Detailed execution logresults/output.xml- CI/CD compatible output
your-username/decentroqa/
├── .gitignore # Excludes myvenv/, results/, etc.
├── README.md # Main project documentation
├── requirements.txt # pip install dependencies
│
├── tests/ # Test automation code
│ ├── __init__.robot
│ ├── get_api_tests.robot
│ ├── post_api_tests.robot
│ ├── put_api_tests.robot
│ └── delete_api_tests.robot
│
├── resources/ # Reusable components
│ ├── keywords.robot
│ └── variables.robot
│
├── docs/ # Additional documentation
│ ├── API_DOCUMENTATION.md
│ ├── QUICK_START.md
│ ├── TEST_RESULTS_SUMMARY.md
│ └── COMPLETE_DOCUMENTATION.md
│
└── scripts/ # Helper scripts
├── run_all_tests.bat
└── run_all_tests.sh
## Test Results
✅ 43 automated test cases implemented
✅ 100% pass rate achieved
✅ All HTTP methods covered (GET, POST, PUT, DELETE)
✅ Both positive and negative scenarios tested
✅ Professional Robot Framework implementation- Complete Coverage: All required HTTP methods tested
- Quality Assurance: 100% test pass rate
- Best Practices: Reusable components, proper documentation
- Real-world Ready: API key handling, error management
- Maintainable: Clean code structure, comprehensive docs
Execute this command to verify everything works:
myvenv\Scripts\activate && robot --outputdir results tests/Expected Result:
Tests :: Test Suite Initialization
==============================================================================
43 tests, 43 passed, 0 failed
==============================================================================
Open and verify:
results/report.html- Should show 100% pass rateresults/log.html- Should show detailed success logs- All test suites show green (passed) status
Final checklist before submission:
- ✅ All 43 tests pass (100% success rate)
- ✅ Clean codebase (no unnecessary files)
- ✅ Complete documentation
- ✅ Professional project structure
- ✅ API key working correctly
- ✅ Cross-platform scripts provided
- ✅ Realistic test scope (not overly complex)
This API test automation project successfully demonstrates:
- ✅ Robot Framework mastery
- ✅ REST API testing expertise
- ✅ Test automation best practices
- ✅ Professional documentation skills
- ✅ Exceeded requirements: 43 tests vs. requested 3 minimum
- ✅ Perfect results: 100% test pass rate
- ✅ Professional quality: Maintainable, well-documented code
- ✅ Real-world applicable: Production-ready implementation
- ✅ Test Coverage: Comprehensive scenarios across all HTTP methods
- ✅ Code Quality: Clean, readable, well-structured
- ✅ Documentation: Clear setup, execution, and maintenance guides
This project represents professional-level API test automation that exceeds typical assignment expectations while maintaining authenticity and reasonable scope.