Skip to content

SATHIZ015/hybrid-automation

Repository files navigation

🧪 Hybrid UI & API Automation Suite

Java · Selenium · RestAssured · Cucumber · TestNG · JUnit · ExtentReports · Docker · Jenkins


🏗️ Architecture

hybrid-automation-suite/
├── src/
│   ├── main/java/com/automation/
│   │   ├── config/          ConfigReader.java          — central config (supports -D overrides)
│   │   ├── driver/          DriverManager.java         — thread-safe WebDriver factory (Local + Grid)
│   │   ├── pages/           BasePage.java              — POM base with dynamic locators
│   │   │                    LoginPage.java             — SauceDemo login
│   │   │                    InventoryPage.java         — product listing
│   │   │                    CartPage.java              — cart + checkout
│   │   ├── utils/           APIClient.java             — RestAssured wrapper with auto-logging
│   │   │                    ExtentReportManager.java   — thread-safe extent reports
│   │   │                    ScreenshotUtil.java        — auto screenshot capture
│   │   │                    JsonUtil.java              — Jackson serialization
│   │   └── listeners/       ExtentReportListener.java  — TestNG hooks
│   │
│   └── test/
│       ├── java/com/automation/
│       │   ├── ui/           LoginTest.java, ShoppingCartTest.java
│       │   ├── api/          UserAPITest.java
│       │   ├── stepDefs/     LoginSteps.java, APISteps.java, Hooks.java
│       │   └── runners/      FullSuiteRunner, UIRunner, APIRunner, SmokeRunner
│       └── resources/
│           ├── features/ui/  login.feature
│           ├── features/api/ user_api.feature
│           ├── config.properties
│           └── log4j2.xml
│
├── Dockerfile              — headless Chrome + Maven container
├── docker-compose.yml      — Selenium Grid 4 + Chrome nodes + test runner
├── Jenkinsfile             — declarative pipeline with parallel stages
├── jenkins/jobs.groovy     — Job DSL for programmatic job creation
├── testng-full.xml
├── testng-ui.xml
├── testng-api.xml
└── run-tests.sh            — local execution helper

🎯 Testing Sites

Layer Site URL
UI SauceDemo https://www.saucedemo.com
API ReqRes.in https://reqres.in/api

🚀 Quick Start

Prerequisites

  • Java 11+
  • Maven 3.6+
  • Chrome (or Firefox/Edge)
  • Docker + Docker Compose (for containerized runs)

Run locally

chmod +x run-tests.sh

./run-tests.sh -s api              # API tests only
./run-tests.sh -s ui -H            # UI tests, headless
./run-tests.sh -s smoke            # Smoke suite
./run-tests.sh -s full -b firefox  # All tests in Firefox

Run with Maven directly

# API tests
mvn clean test -Papi-tests

# UI tests (headless chrome)
mvn clean test -Pui-tests -Dbrowser=chrome -Dheadless=true

# Full suite parallel
mvn clean test -Pfull-suite -Dheadless=true

# Specific TestNG suite
mvn clean test -DsuiteFile=testng-ui.xml -Dbrowser=chrome

🐳 Docker

Run API tests (no browser needed)

docker-compose --profile api-only up --build api-test-runner

Run full suite with Selenium Grid

# Start Grid + Chrome nodes + run tests
docker-compose up --build

# Watch tests live via VNC
open http://localhost:7900   # noVNC browser UI

# View Selenium Grid status
open http://localhost:4444

Build Docker image only

docker build -t hybrid-automation:latest .
docker run -e SUITE=testng-api.xml hybrid-automation:latest

🔧 Jenkins Setup

1. Pipeline job (recommended)

  1. New Item → Pipeline
  2. Pipeline Definition → Pipeline script from SCM
  3. SCM: Git → your repo URL
  4. Script Path: Jenkinsfile

2. Create all jobs via Job DSL

  1. New Item → Freestyle Project
  2. Build → Process Job DSLs
  3. Paste contents of jenkins/jobs.groovy

Pipeline Parameters

Parameter Options Default
SUITE full-suite, ui-tests, api-tests, smoke full-suite
BROWSER chrome, firefox, edge chrome
ENV qa, staging, prod qa
HEADLESS true/false true
PARALLEL true/false false

Maven -D flags (Jenkins → System properties)

-Dbrowser=chrome
-Dheadless=true
-Denv=qa
-Dgrid.url=http://selenium-hub:4444/wd/hub

📊 Reports

After execution, reports are in:

  • reports/*.html — Extent HTML report (dark theme)
  • reports/cucumber/ — Cucumber HTML/JSON/XML
  • reports/screenshots/ — Auto-captured on failure
  • logs/automation.log — Full execution log
  • logs/errors.log — Errors only

🧩 Key Features

Dynamic Locator Strategies (BasePage)

byDataTestId("login-button")   // [data-test="login-button"]
byAriaLabel("submit")          // [aria-label="submit"]
byPartialText("Welcome")       // //*[contains(text(),'Welcome')]
byPlaceholder("Enter email")   // //*[@placeholder='Enter email']

Thread-safe WebDriver

// Each thread gets its own driver — safe for parallel execution
DriverManager.initDriver();
DriverManager.getDriver();   // returns ThreadLocal driver
DriverManager.quitDriver();

API + ExtentReport Integration

// Automatically logs request/response to Extent report
Response response = APIClient.post("/users", body);
APIClient.assertStatusCode(response, 201);

Cucumber Tag Filtering

mvn test -Dcucumber.filter.tags="@smoke and @ui"
mvn test -Dcucumber.filter.tags="@api and not @skip"

🏷️ Test Tags

Tag Description
@smoke Critical path - run on every build
@ui Selenium UI tests
@api RestAssured API tests
@positive Happy path scenarios
@negative Error/failure scenarios
@e2e End-to-end workflows
@login Login functionality
@reqres ReqRes.in API tests
@skip Tests excluded from CI

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors