Appearance
REST API Testing Framework
A scalable Java Maven project for REST API testing using RestAssured, TestNG, and Allure Reporting with Docker support, CI/CD integration, and comprehensive test reporting.
Features
- Scalable Architecture: Organized package structure for easy maintenance and extension
- RestAssured 5.4.0: Powerful API testing library with fluent interface
- TestNG 7.8.0: Advanced testing framework with parallel execution support
- Allure Reporting 2.24.0: Beautiful and detailed test reports with automatic generation
- Docker Support: Multi-stage Dockerfile with built-in Allure report server
- Model Classes: POJOs for request/response handling using Jackson 2.16.0
- Configuration Management: Centralized configuration via properties file
- Base Test Class: Common setup and configuration for all tests
- Response Validation Utilities: Reusable validation methods
- Parallel Execution: Tests run in parallel (3 threads) for faster execution
- Family Tree API Tests: Comprehensive test suite for Family Tree API based on CSV test cases
- CI/CD Integration: GitHub Actions workflows with automated test execution
- Testomat.io Integration: Test management platform integration with java-reporter-testng 0.8.17
- Railway Deployment: Configured for Railway platform deployment (unverified — confirm with team)
- Health Monitoring: Built-in health check and entrypoint scripts
Project Structure
rest-api-tests/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/qa/automation/
│ │ │ ├── base/
│ │ │ │ └── BaseTest.java # Base test class (shared)
│ │ │ ├── config/
│ │ │ │ └── Config.java # Configuration management
│ │ │ ├── models/
│ │ │ │ ├── FamilyTreeRequest.java # Family Tree API request model
│ │ │ │ └── FamilyTreeResponse.java # Family Tree API response model
│ │ │ └── utils/
│ │ │ └── ResponseValidator.java # Validation utilities
│ │ └── resources/
│ │ ├── config.properties # API configuration
│ │ └── testomat.properties # Testomat.io configuration
│ └── test/
│ └── java/
│ └── com/qa/automation/
│ ├── base/
│ │ └── BaseTest.java # Base test class (test)
│ ├── listeners/
│ │ ├── AllureFailureAttachmentListener.java
│ │ ├── LastResponseFilter.java
│ │ └── TestNgResultContext.java
│ └── tests/
│ └── FamilyTreeApiTest.java # Family Tree API tests
├── .github/
│ └── workflows/
│ ├── maven-tests.yml # GitHub Actions test workflow
│ └── testomat.yml # Testomat.io integration workflow
├── pom.xml # Maven configuration
├── testng.xml # TestNG suite configuration
├── Dockerfile # Multi-stage Docker build
├── docker-compose.yml # Docker Compose configuration
├── entrypoint.sh # Docker entrypoint script
├── health-check.sh # Health check script
├── run-tests-docker.sh # Docker test execution script
├── railway.json # Railway deployment config
├── railway.toml # Railway deployment config
├── HAL_GURU_INTEGRATION.md # HAL Guru integration docs
├── RAILWAY.md # Railway deployment docs
├── allure-results/ # Allure test results (generated)
├── allure-report/ # Allure HTML report (generated)
└── README.mdPrerequisites
- Java 21 (LTS) - eclipse-temurin-21 recommended
- Maven 3.6+ (3.9+ recommended)
- Docker (optional, for containerized execution)
- Docker Compose (optional, for simplified container orchestration)
Setup
Clone or navigate to the project directory:
bashcd rest-api-testsBuild the project:
bashmvn clean installConfigure API endpoint: Edit
src/main/resources/config.propertiesto set your target API base URI.
Running Tests
Local Execution
Run all tests:
bash
mvn testRun specific test class:
bash
mvn test -Dtest=FamilyTreeApiTestRun tests with TestNG suite:
bash
mvn test(Configured in testng.xml to run with 3 parallel threads)
Docker Execution
Build and run tests in Docker:
bash
# Using Docker Compose (recommended)
docker-compose up --build
# Using shell script
./run-tests-docker.sh
# Manual Docker build
docker build -t rest-api-tests .
docker run -p 8080:8080 rest-api-testsAccess Allure report server:
http://localhost:8080The Docker image uses a multi-stage build that:
- Runs tests with Maven 3.9 + Java 21
- Generates Allure report
- Serves the report on port 8080 using a lightweight Alpine-based image with Allure CLI 2.27.0
Configuration
API Configuration (config.properties)
base.uri: Base URL for API endpoints- Current:
https://us-central1-orap-dev.cloudfunctions.net/convertSurveyToGenogram(update with your endpoint)
- Current:
timeout: Request timeout in millisecondslog.all: Enable/disable detailed loggingmax.response.time: Maximum acceptable response time
Testomat.io Integration (testomat.properties)
Configure Testomat.io test management platform integration (unverified — confirm with team):
- Project API key and endpoint configuration
- Test run synchronization settings
Generating Reports
Allure Report (Local)
bash
# Run tests and generate results
mvn clean test
# Generate Allure HTML report
mvn allure:report
# Report location: target/allure-report/index.html
# Generate and serve report (auto-opens browser)
mvn allure:serveAllure Report (Docker)
The Docker container automatically generates and serves the Allure report on port 8080. No additional commands needed.
Docker Support
Dockerfile Features
- Multi-stage build: Separates build environment from runtime
- Maven cache optimization: Dependencies cached in separate layer
- Allure CLI included: Version 2.27.0 pre-installed
- Lightweight runtime: Alpine-based final image (~200MB vs ~1GB)
- Health check support:
/app/health-check.shincluded - Persistent volumes: Results and reports mountable via Docker Compose
Environment Variables
JAVA_OPTS: JVM options (default:-Xmx512m)
Railway Deployment
The project includes Railway platform deployment configuration via railway.json and railway.toml. (unverified — confirm with team)
Refer to RAILWAY.md for deployment instructions and RAILWAY_NIGHTLY.md for scheduled test execution details.
Adding New Tests
1. Create a new test class:
java
package com.qa.automation.tests;
import com.qa.automation.base.BaseTest;
import org.testng.annotations.Test;
import io.qameta.allure.Epic;
import io.qameta.allure.Feature;
import io.qameta.allure.Severity;
import io.qameta.allure.SeverityLevel;
@Epic("API Testing")
@Feature("My Feature")
public class MyNewApiTest extends BaseTest {
@Test(description = "Test my endpoint")
@Severity(SeverityLevel.CRITICAL)
public void testMyEndpoint() {
// Your test code here
}
}2. Create model classes (if needed):
java
package com.qa.automation.models;
import lombok.Data;
import lombok.Builder;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class MyModel {
private String field1;
private Integer field2;
}3. Add validation utilities (if needed):
Extend ResponseValidator class with new validation methods.
Best Practices
- Extend BaseTest: All test classes should extend
BaseTestfor common configuration - Use Models: Create POJO classes for request/response objects using Lombok annotations
- Reusable Utilities: Add common validation logic to
ResponseValidator - Descriptive Test Names: Use clear test method names with
@Test(description = "...") - Allure Annotations: Use
@Epic,@Feature,@Story,@Severityfor better reporting - Assertions: Use both TestNG assertions and Hamcrest matchers from RestAssured
- Configuration: Keep environment-specific values in
config.properties - Listeners: Utilize custom listeners in
src/test/java/.../listeners/for enhanced reporting
Dependencies
Core dependencies (from pom.xml):
- RestAssured 5.4.0: API testing library
- TestNG 7.8.0: Testing framework with parallel execution
- Allure TestNG 2.24.0: Test reporting integration
- Allure RestAssured 2.24.0: RestAssured integration for Allure
- Jackson 2.16.0: JSON serialization/deserialization
- Lombok 1.18.30: Reduces boilerplate code (provided scope)
- SLF4J 2.0.9: Logging facade with slf4j-simple implementation
- Testomat.io Reporter 0.8.17: Test management platform integration
- AspectJ Weaver 1.9.20.1: Required for Allure reporting (surefire dependency)
Family Tree API Tests
The project includes comprehensive test cases for the Family Tree API (FamilyTreeApiTest.java) based on CSV test case specifications.
Test Coverage
15 test scenarios covering:
- TC-01: Smoking status (Yes/No)
- TC-02: User without cancer
- TC-03: User with cancer (cured)
- TC-04: User with cancer (treatment ongoing)
- TC-05: User with breast cancer (with receptor statuses)
- TC-06: User with thyroid cancer (with histological types)
- TC-07: User with prostate cancer (with PSA)
- TC-08: Parent with cancer
- TC-09: Grandparent with cancer
- TC-10: Uncle/Aunt (parent's sibling) with cancer
- TC-11: Sibling with cancer
- TC-12: Child without cancer
- TC-13: Grandchild without cancer
- TC-14: User with multiple cancers
- TC-15: Multiple siblings (with and without cancer)
Test Structure
Each test includes:
- Allure annotations:
@Epic,@Feature,@Story,@Severity,@Description - Request building: Using builder pattern with
FamilyTreeRequestmodel - Response validation: Comprehensive assertions based on CSV requirements
- Error handling: Proper null checks and validations
- Logging: Integrated with LastResponseFilter listener
Model Classes
- FamilyTreeRequest: Request model with nested structures for person responses, receptor statuses, PSA levels, and cancer details
- FamilyTreeResponse: Response model with members, created members, and complex nested genogram structures
Example Test
java
@Epic("Family Tree API")
@Feature("Basic User Scenarios")
public class FamilyTreeApiTest extends BaseTest {
@Test(description = "TC-02: User without cancer")
@Severity(SeverityLevel.CRITICAL)
public void testUserWithoutCancer() {
FamilyTreeRequest request = FamilyTreeRequest.builder()
.personId("user123")
.hasCancer(false)
.build();
Response response = given()
.contentType("application/json")
.body(request)
.when()
.post("")
.then()
.extract()
.response();
ResponseValidator.validateStatusCode(response, 200);
FamilyTreeResponse result = response.as(FamilyTreeResponse.class);
assertNotNull(result);
}
}Scalability Features
- Modular Structure: Separate packages for config, models, utils, listeners, and tests
- Base Test Class: Centralized setup reduces code duplication
- Configuration Management: Easy to switch between environments via properties
- Parallel Execution: 3-thread parallel execution configured in
testng.xml - Reusable Components: Utilities and models can be shared across test suites
- Easy Extension: Simple to add new test classes and endpoints
- Docker Isolation: Tests can run in isolated containers
- Custom Listeners: Extensible listener architecture for enhanced reporting
GitHub Actions CI/CD
The project includes automated CI/CD using GitHub Actions with two workflows:
Workflows
- maven-tests.yml: Main test execution workflow
- testomat.yml: Testomat.io integration workflow
Triggers:
- Push to
main,master, ordevelopbranches - Pull requests to these branches
- Manual trigger via
workflow_dispatch
Report Publishing
(Unverified — confirm with team)
After workflow runs:
- Allure reports may be published to GitHub Pages or workflow artifacts
- Test results synchronized with Testomat.io platform
- PR comments with test summary (if configured)
Enabling GitHub Pages (if configured):
- Go to repository Settings → Pages
- Under Source, select "GitHub Actions"
- Save
Allure Configuration
Allure directories (configured in pom.xml):
- Results Directory:
${project.basedir}/allure-results - Report Directory:
${project.basedir}/allure-report(local) or${project.build.directory}/allure-report(CI) - Allure Version: 2.24.0 (TestNG integration), 2.27.0 (CLI in Docker)
Integrations
Testomat.io
Test management platform integration via java-reporter-testng dependency. Configure in src/main/resources/testomat.properties. (unverified — confirm with team)
HAL Guru
Integration details available in HAL_GURU_INTEGRATION.md. (unverified — confirm with team)
Railway Platform
Deployment configuration for Railway platform via railway.json and railway.toml. See RAILWAY.md for details. (unverified — confirm with team)
Troubleshooting
- Build failures: Ensure Java 21 (eclipse-temurin-21) and Maven 3.6+ are installed
- Test failures: Check network connectivity and
base.uriinconfig.properties - Lombok errors: Ensure your IDE has Lombok plugin installed and annotation processing enabled
- Docker build issues: Verify Docker 20.10+ is installed, check network for Maven dependency downloads
- Allure report not generated: Check if
allure-resultsdirectory contains XML files after test run - Port 8080 already in use: Stop conflicting services or change port mapping in
docker-compose.yml - GitHub Pages not updating: Verify GitHub Pages is enabled with "GitHub Actions" as source (if applicable)
- Testomat sync failures: Verify API key and endpoint in
testomat.properties(if applicable)
License
MIT