Professional API Testing with Cypress using Page Object Model (POM) + HTML Test Reporting
This project demonstrates enterprise-grade API automation testing for the Automation Exercise website using Cypress with modern best practices including Page Object Model design pattern, comprehensive test reporting, and CI/CD integration.
This repository contains production-ready API automation tests that validate the Automation Exercise APIs using Cypress. The implementation follows industry standards with clean architecture, reusable components, comprehensive test coverage, and professional HTML test reporting.
API | Endpoint | Method | Description |
---|---|---|---|
API 1 | /api/productsList |
GET | Get All Products List |
API 3 | /api/brandsList |
GET | Get All Brands List |
- ποΈ Page Object Model (POM) - Clean separation of test logic and API interactions
- οΏ½ HTML Test Reports - Interactive Mochawesome reports with charts and metrics
- οΏ½π οΈ Utility Functions - Reusable validation and helper methods
- π¨ Custom Commands - Enhanced Cypress functionality for API testing
- οΏ½ Comprehensive Testing - Response validation, performance testing, error handling
- π Integration Testing - Cross-API data consistency validation
- π Test Data Management - Centralized test data generation and management
- π Performance Testing - Response time validation and optimization
- π‘οΈ Error Handling - Comprehensive error scenario testing
- π CI/CD Ready - GitHub Actions workflow included
- π― 100% Pass Rate - All 8 tests consistently passing
cypress/
βββ e2e/
β βββ API-AutomationExerice/
β βββ simple-api-tests.cy.js β
Main working tests (8/8 passing)
β βββ products-api.cy.js π¦ Products API tests with POM
β βββ brands-api.cy.js π·οΈ Brands API tests with POM
β βββ complete-api-suite.cy.js π Integration tests
βββ support/
β βββ commands.js π οΈ Custom Cypress commands
β βββ e2e.js βοΈ Global test configuration
β βββ pages/
β β βββ AutomationExerciseAPI.js π Page Object Model
β βββ utils/
β βββ APIUtils.js π§ API utility functions
β βββ TestDataFactory.js π Test data generator
βββ reports/ π Test reports (auto-generated)
β βββ html/
β β βββ merged-report.html π― Interactive HTML report
β βββ *.json π Raw test data
docs/
βββ REPORTING.md π Reporting guide
βββ TEST_REPORT.md π Latest test results
β βββ *.html π Individual reports βββ support/ βββ pages/ β βββ AutomationExerciseAPI.js ποΈ Page Object Model βββ utils/ β βββ APIUtils.js π οΈ Utility functions β βββ TestDataFactory.js π Test data management βββ commands.js π― Custom commands βββ e2e.js βοΈ Support configuration
## π Quick Start
### Prerequisites
- [Node.js](https://nodejs.org/) (v14 or higher)
- [npm](https://www.npmjs.com/) or [yarn](https://yarnpkg.com/)
### Installation
1. **Clone the repository:**
```bash
git clone https://github.com/adityadwic/Cypress-API-Automation.git
cd Cypress-API-Automation
- Install dependencies:
npm install
# π― Generate tests with HTML reports (RECOMMENDED)
npm run test:report
# Run all tests
npm test
# Run main working tests
npm run test:simple
# Run specific API tests
npm run test:products # Products API only
npm run test:brands # Brands API only
npm run test:complete # Complete test suite
npm run test:all # All API tests
# Run tests in different modes
npm run test:headed # Headed mode
npm run test:chrome # Chrome browser
npm run test:firefox # Firefox browser

# Generate and view HTML reports
npm run test:report # Run tests + generate report
npm run generate:report # Generate report from existing data
npm run report:open # Open HTML report in browser
npm run clean:reports # Clean old reports
# Open Cypress Test Runner
npm run test:open
β 8/8 Tests Passing (100% Success Rate)
Test Suite | Status | Duration | Coverage |
---|---|---|---|
Products API | β 3/3 | ~1.2s | GET, Error Handling |
Brands API | β 3/3 | ~1.1s | GET, Validation, Error Handling |
Performance | β 1/1 | ~0.7s | Response Time < 5s |
Integration | β 1/1 | ~0.8s | Cross-API Consistency |
The project generates interactive HTML reports using Mochawesome:
Features:
- π Visual charts and graphs
- π― Pass/Fail statistics
- β±οΈ Performance metrics
- π Detailed test results
- π» Browser-friendly viewing
Report Location: cypress/reports/html/merged-report.html
Quick Access:
npm run test:report # Generate new report
npm run report:open # View latest report
β Successful Tests:
- Products API - GET request validation
- Products API - POST method error handling
- Brands API - GET request validation
- Brands API - Expected brands verification
- Brands API - POST method error handling
- Performance testing for both APIs
- Data consistency between APIs
- Error handling for invalid endpoints
import AutomationExerciseAPI from '../../support/pages/AutomationExerciseAPI.js';
const apiPage = new AutomationExerciseAPI();
// Get all products
apiPage.getAllProducts().then((response) => {
// Test logic here
});
// Get all brands
apiPage.getAllBrands().then((response) => {
// Test logic here
});
import APIUtils from '../../support/utils/APIUtils.js';
// Validate status code
APIUtils.validateStatusCode(response, 200);
// Validate response structure
APIUtils.validateProductsListStructure(response);
// Log response details
APIUtils.logResponseDetails(response, 'Test Name');
// Enhanced API request with logging
cy.apiRequest('GET', 'https://automationexercise.com/api/productsList');
// Validate API response
cy.validateApiResponse(response, 200);
// Automation Exercise specific API calls
cy.automationExerciseApi('/productsList');
- β Successful HTTP requests (GET)
- β HTTP method validation (POST, PUT, DELETE not allowed)
- β Response structure validation
- β Data type validation
- β Response code validation
- β Response time validation (< 5 seconds)
- β Concurrent request handling
- β Load testing capabilities
- β Invalid HTTP methods
- β Invalid endpoints
- β Malformed requests
- β Network error scenarios
- β Cross-API data consistency
- β Brand-Product relationship validation
- β Data integrity checks
{
"scripts": {
"test": "cypress run",
"test:open": "cypress open",
"test:simple": "cypress run --spec 'cypress/e2e/API-AutomationExerice/simple-api-tests.cy.js'",
"test:products": "cypress run --spec 'cypress/e2e/API-AutomationExerice/products-api.cy.js'",
"test:brands": "cypress run --spec 'cypress/e2e/API-AutomationExerice/brands-api.cy.js'",
"test:complete": "cypress run --spec 'cypress/e2e/API-AutomationExerice/complete-api-suite.cy.js'",
"test:all": "cypress run --spec 'cypress/e2e/API-AutomationExerice/*.cy.js'",
"test:headed": "cypress run --headed",
"test:chrome": "cypress run --browser chrome",
"test:firefox": "cypress run --browser firefox",
"test:report": "npm run test:simple && npm run generate:report",
"generate:report": "mochawesome-merge cypress/reports/*.json > cypress/reports/merged-report.json && marge cypress/reports/merged-report.json --reportDir cypress/reports/html",
"clean:reports": "rm -rf cypress/reports",
"report:open": "open cypress/reports/html/merged-report.html"
}
}
module.exports = defineConfig({
e2e: {
baseUrl: 'https://automationexercise.com',
requestTimeout: 10000,
responseTimeout: 10000,
retries: { runMode: 2, openMode: 1 },
env: { apiBaseUrl: 'https://automationexercise.com/api' }
},
reporter: 'mochawesome',
reporterOptions: {
reportDir: 'cypress/reports',
overwrite: false,
html: true,
json: true,
timestamp: 'mmddyyyy_HHMMss'
}
});
This project is production-ready for CI/CD integration with automated test reporting.
name: π API Automation Tests
on:
push:
branches: [ master, main ]
pull_request:
branches: [ master, main ]
schedule:
- cron: '0 6 * * *' # Daily at 6 AM
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [18.x, 20.x]
steps:
- name: π₯ Checkout Repository
uses: actions/checkout@v4
- name: π§ Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- name: π¦ Install Dependencies
run: npm ci
- name: π§ͺ Run API Tests
run: npm run test:report
- name: π Upload Test Reports
uses: actions/upload-artifact@v3
if: always()
with:
name: test-reports-node-${{ matrix.node-version }}
path: cypress/reports/html/
retention-days: 30
- name: π Publish Test Summary
if: always()
run: |
echo "## π§ͺ Test Results Summary" >> $GITHUB_STEP_SUMMARY
echo "- **Node Version:** ${{ matrix.node-version }}" >> $GITHUB_STEP_SUMMARY
echo "- **Tests Status:** $(if [ $? -eq 0 ]; then echo 'β
PASSED'; else echo 'β FAILED'; fi)" >> $GITHUB_STEP_SUMMARY
# Simulate CI environment
npm ci # Clean install
npm run clean:reports # Clean previous reports
npm run test:report # Generate fresh reports
npm run report:open # View results
- π TEST_REPORT.md - Comprehensive test results and analysis
- π REPORTING.md - Complete guide to test reporting features
- ποΈ cypress/support/ - Page Object Model and utility documentation
- π cypress/reports/html/ - Interactive HTML test reports
Component | Technology | Version |
---|---|---|
Testing Framework | Cypress | 13.3.1 |
Runtime | Node.js | 18.20.5+ |
Reporting | Mochawesome | 7.1.3 |
Architecture | Page Object Model | Custom |
CI/CD | GitHub Actions | Latest |
- Fork the repository
- Create a feature branch
git checkout -b feature/amazing-feature
- Make your changes
- Run tests and generate reports
npm run test:report
- Commit your changes
git commit -m 'Add some amazing feature'
- Push to the branch
git push origin feature/amazing-feature
- Open a Pull Request
- β Follow Page Object Model pattern
- β Add comprehensive test coverage
- β Include proper error handling
- β Update documentation
- β Ensure all tests pass
Aditya Dwi Cahyono
- π GitHub: @adityadwic
- π Repository: Cypress-API-Automation
- π Website: automationexercise.com
- π Cypress Documentation
- π― Automation Exercise Website
- π Cypress API Testing Guide
- π Mochawesome Documentation
- ποΈ Page Object Model Best Practices
Metric | Status |
---|---|
Tests | β 8/8 Passing (100%) |
Coverage | β Both APIs Covered |
Performance | β < 5s Response Time |
Reporting | β HTML + Markdown |
CI/CD | β GitHub Actions Ready |
Documentation | β Complete |
# Clone and setup
git clone https://github.com/adityadwic/Cypress-API-Automation.git
cd Cypress-API-Automation
npm install
# Run tests with reports
npm run test:report
# Open HTML report
npm run report:open
# View in Cypress UI
npm run test:open
β Star this repository if you find it helpful!
π Found an issue? Create an issue
π‘ Have suggestions? Start a discussion