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