An FPGA-inspired enterprise-grade parallel mobile test automation framework
Website β’ Documentation β’ Examples β’ Report Bug β’ Request Feature
- Overview
- Why Orchestrix?
- Key Features
- Quick Start
- Installation
- Getting Started
- Project Structure
- Examples
- Documentation
- Contributing
- Support
- License
Orchestrix is a production-ready, enterprise-grade parallel mobile test automation framework built on Appium. It solves the most common pain points in parallel mobile testing by providing automatic port management, device pooling, thread-safe execution, and beautiful reporting.
- ποΈ FPGA-Inspired Architecture: Applies hardware parallelism concepts to software testing
- β‘ 3-10x Faster Execution: True parallel test execution across multiple devices
- π 100% Thread-Safe: Production-ready concurrent execution with zero conflicts
- π Beautiful Reports: Feature-grouped HTML reports with device-wise analytics
- π― Zero Configuration: Automatic port allocation and device management
- βοΈ Cloud Ready: Built-in support for LambdaTest, BrowserStack, and more
Traditional Appium parallel testing faces several challenges:
- β Port conflicts when running multiple tests
- β Manual device management and allocation
- β Thread safety issues causing test failures
- β Complex setup and configuration
- β Limited reporting capabilities
Orchestrix provides:
- β Automatic port allocation (no conflicts)
- β Intelligent device pooling with tier-based allocation
- β Thread-safe execution using proven design patterns
- β Simple JSON-based configuration
- β Comprehensive reporting with feature grouping
| Feature | Description |
|---|---|
| π Parallel Execution | Run tests simultaneously across multiple devices with automatic resource management |
| π Zero Port Conflicts | Automatic port allocation prevents conflicts in parallel execution |
| π Perfect Isolation | ThreadLocal pattern ensures complete test isolation |
| π Smart Retry Logic | Auto-retry transient failures with exponential backoff |
| πΎ Result Caching | Skip unchanged tests to save 30-70% execution time |
| π Device-Wise Reports | Beautiful HTML reports with feature grouping and device breakdown |
| π± Page Object Model | Maintainable, reusable test code structure |
| π CI/CD Ready | Jenkins & GitHub Actions integration included |
| βοΈ Cloud Support | LambdaTest, BrowserStack, and custom cloud providers |
- Tier-Based Device Allocation: Premium, Standard, Basic device tiers with automatic fallback
- Feature Grouping: Organize tests by feature files in reports
- Screenshot Management: Automatic screenshots on failure, stored with reports
- BDD Support: Full Cucumber integration for behavior-driven testing
- Extensible Architecture: Easy to add custom cloud providers and extensions
- Java 17 or higher
- Maven 3.6 or higher
- Node.js 18+ and npm
- Appium 2.x
- Android SDK (for Android testing)
- Xcode (for iOS testing - macOS only)
# 1. Clone the repository
git clone https://github.com/your-username/orchestrix.git
cd orchestrix
# 2. Build the project
mvn clean install
# 3. Configure devices
cp config/devices.json.example config/devices.json
# Edit config/devices.json with your device configurations
# 4. Start Appium servers
./scripts/start-appium-nodes.sh
# 5. Run your first test
mvn clean test
# 6. View reports
open reports/extent/TestReport-*/Report.htmlThat's it! You're ready to start testing. π
macOS (Homebrew):
brew install openjdk@17Windows: Download from Oracle JDK or OpenJDK
Linux (Ubuntu/Debian):
sudo apt update
sudo apt install openjdk-17-jdkmacOS (Homebrew):
brew install mavenWindows/Linux: Download from Maven Download
npm install -g appium@latest
appium driver install uiautomator2 # For Android
appium driver install xcuitest # For iOS (macOS only)git clone https://github.com/your-username/orchestrix.git
cd orchestrix
mvn clean installEdit config/devices.json:
[
{
"deviceName": "Pixel_7_Emulator",
"udid": "emulator-5554",
"platformName": "Android",
"platformVersion": "13",
"tier": "premium",
"appiumPort": 4723,
"systemPort": 8200,
"chromedriverPort": 9515,
"app": "/path/to/your/app.apk"
}
]For detailed configuration, see Device Configuration Guide
# Check Java
java -version
# Check Maven
mvn -version
# Check Appium
appium --version
# Verify project builds
mvn clean compileCreate a test class:
package com.parallel.appium.tests.login;
import com.parallel.appium.tests.base.BaseTest;
import com.parallel.appium.pages.login.LoginPage;
import com.parallel.appium.pages.home.HomePage;
import org.testng.Assert;
import org.testng.annotations.Test;
public class LoginTests extends BaseTest {
@Test(description = "TC001: Verify successful login")
public void testValidLogin() {
// Navigate to login page
LoginPage loginPage = new LoginPage();
// Perform login
HomePage homePage = loginPage.login("user@example.com", "password123");
// Verify success
Assert.assertTrue(homePage.isPageLoaded(),
"Home page should be loaded after login");
}
}# Run all tests
mvn clean test
# Run specific test class
mvn clean test -Dtest=LoginTests
# Run with custom thread count
mvn clean test -Dparallel.threads=4
# Run specific device tier
mvn clean test -Ddevice.tier=premium
# Run Cucumber BDD tests
mvn clean test -PcucumberAfter test execution, reports are generated in:
reports/
βββ consolidated/
β βββ Device_summary<timestamp>.html
βββ extent/
βββ TestReport-<timestamp>/
βββ Report.html
βββ screenshots/
Open reports:
# macOS
open reports/extent/TestReport-*/Report.html
# Windows
start reports\extent\TestReport-*\Report.html
# Linux
xdg-open reports/extent/TestReport-*/Report.htmlorchestrix/
βββ config/ # Configuration files
β βββ devices.json # Device configurations
β βββ devices.json.example # Example device config
β βββ retry-config.json # Retry policy configuration
β βββ README.md # Device configuration guide
β
βββ scripts/ # Utility scripts
β βββ start-appium-nodes.sh # Start Appium servers
β βββ stop-appium-nodes.sh # Stop Appium servers
β βββ run-tests.sh # Test runner script
β βββ setup-environment.sh # Environment setup
β
βββ src/
β βββ main/java/com/parallel/appium/
β β βββ core/ # Core framework components
β β β βββ DevicePool.java # Device allocation manager
β β β βββ DriverFactory.java # ThreadLocal driver management
β β β βββ PortManager.java # Port allocation
β β β βββ TestContext.java # Test context management
β β β
β β βββ config/ # Configuration classes
β β β βββ DeviceConfig.java # Device configuration model
β β β βββ ConfigReader.java # Configuration reader
β β β
β β βββ pages/ # Page Object Model
β β β βββ base/BasePage.java # Base page class
β β β βββ login/LoginPage.java
β β β βββ home/HomePage.java
β β β
β β βββ reporting/ # Reporting components
β β β βββ ExtentReportManager.java
β β β βββ ConsolidatedReportBuilder.java
β β β βββ DeviceStatsManager.java
β β β
β β βββ cloud/ # Cloud provider support
β β β βββ CloudProvider.java
β β β βββ LambdaTestProvider.java
β β β βββ BrowserStackProvider.java
β β β
β β βββ retry/ # Retry logic
β β β βββ RetryAnalyzer.java
β β β
β β βββ cache/ # Result caching
β β β βββ TestResultCache.java
β β β
β β βββ utils/ # Utility classes
β β βββ WaitHelper.java
β β βββ ScreenshotUtils.java
β β βββ GestureHelper.java
β β
β βββ test/java/com/parallel/appium/
β βββ tests/ # Test classes
β β βββ base/BaseTest.java # Base test class
β β βββ login/LoginTests.java
β β βββ product/ProductTests.java
β β
β βββ runners/ # Test runners
β β βββ CucumberTestRunner.java
β β
β βββ stepdefinitions/ # Cucumber step definitions
β β βββ LoginStepDefinitions.java
β β βββ ProductStepDefinitions.java
β β
β βββ resources/
β βββ features/ # Cucumber feature files
β β βββ login.feature
β β βββ product.feature
β βββ cucumber.properties
β
βββ reports/ # Generated reports (gitignored)
βββ logs/ # Execution logs (gitignored)
β
βββ .github/workflows/ # GitHub Actions workflows
β βββ appium-tests.yml
β
βββ Jenkinsfile # Jenkins pipeline
βββ pom.xml # Maven configuration
βββ testng.xml # TestNG configuration
βββ testng-cucumber.xml # Cucumber TestNG config
β
βββ Documentation/
βββ README.md # This file
βββ SETUP_GUIDE.md # Complete setup instructions
βββ USAGE_GUIDE.md # How to write tests
βββ TECHNICAL_GUIDE.md # Architecture deep dive
βββ REAL_WORLD_USE_CASES.md # Practical examples
βββ DOCUMENTATION_INDEX.md # Documentation navigation
public class LoginTests extends BaseTest {
@Test(description = "TC001: Verify successful login")
public void testValidLogin() {
LoginPage loginPage = new LoginPage();
HomePage homePage = loginPage.login("user@example.com", "password");
Assert.assertTrue(homePage.isPageLoaded());
}
}Feature File (login.feature):
@login @smoke @TC001
Feature: User Login
As a user
I want to login to the application
So that I can access my account
Scenario: Successful login with valid credentials
Given I am on the login page
When I login with username "user@example.com" and password "password"
Then I should be logged in successfully
And I should see the welcome messageStep Definitions:
@Given("I am on the login page")
public void iAmOnTheLoginPage() {
loginPage = new LoginPage();
Assert.assertTrue(loginPage.isPageLoaded());
}
@When("I login with username {string} and password {string}")
public void iLoginWithUsernameAndPassword(String username, String password) {
homePage = loginPage.login(username, password);
}
@Then("I should be logged in successfully")
public void iShouldBeLoggedInSuccessfully() {
Assert.assertTrue(homePage.isPageLoaded());
}@Test(description = "Complete shopping journey")
public void testCompleteShoppingJourney() {
// Login
LoginPage loginPage = new LoginPage();
HomePage homePage = loginPage.login("customer@shop.com", "password");
// Browse products
ProductPage productPage = homePage.navigateToProducts();
productPage.searchProduct("laptop");
// Add to cart
productPage.selectProduct("MacBook Pro");
productPage.addToCart();
// Checkout
CartPage cartPage = productPage.viewCart();
CheckoutPage checkout = cartPage.proceedToCheckout();
checkout.enterShippingAddress("123 Main St", "City", "12345");
checkout.placeOrder();
// Verify order
OrderConfirmationPage confirmation = checkout.getConfirmation();
Assert.assertTrue(confirmation.isOrderConfirmed());
}For more examples, see Real-World Use Cases
Orchestrix comes with comprehensive documentation for all skill levels:
- π Setup Guide - Complete step-by-step installation and configuration
- π Usage Guide - Learn how to write tests with detailed examples
- π Real-World Use Cases - 15+ practical examples for different app types
- ποΈ Technical Guide - Architecture, design patterns, and component deep dive
- π Framework Summary - Complete feature overview
- π₯ Cucumber BDD Guide - BDD testing with Cucumber
- βοΈ Cloud Integration Guide - LambdaTest, BrowserStack setup
- β‘ Quick Start Guide - Get running in 5 minutes
- π± Local Device Setup - Setup emulators and physical devices
- π§ Environment Setup - Environment variables configuration
- π± Device Configuration - Device setup guide
- π Documentation Index - Navigate all documentation
New to the framework? Start here:
- Read Setup Guide for installation
- Follow Usage Guide for writing tests
- Explore Real-World Use Cases for examples
Want to understand the architecture?
- Read Technical Guide
- Review Framework Summary
Need help? Check Documentation Index for quick navigation.
We welcome contributions! Here's how you can help:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Add tests for new functionality
- Ensure all tests pass (
mvn clean test) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow Java coding conventions
- Write meaningful commit messages
- Add documentation for new features
- Include tests for new functionality
- Update CHANGELOG.md for significant changes
- π Bug fixes
- β¨ New features
- π Documentation improvements
- π§ͺ Test coverage
- π Cloud provider integrations
- π¨ UI/UX improvements for reports
See CONTRIBUTING.md for detailed guidelines.
- π Documentation: Check Documentation Index
- π¬ Discussions: GitHub Discussions
- π Bug Reports: GitHub Issues
- π§ Email: convergentthinker22@gmail.com
- π Website: Visit our website
| Issue | Solution |
|---|---|
| Port conflicts | Use ./scripts/stop-appium-nodes.sh to clean up |
| Device not found | Verify device UDID in config/devices.json |
| Tests hang | Check thread count matches available devices |
| Screenshots not loading | Ensure screenshots are in same folder as HTML |
| Build fails | Run mvn clean install -U to update dependencies |
For more troubleshooting, see Setup Guide - Troubleshooting
Run tests simultaneously across multiple devices:
# Run 4 tests in parallel
mvn clean test -Dparallel.threads=4Organize devices by tier with automatic fallback:
{
"tier": "premium", // premium β standard β basic (automatic fallback)
"deviceName": "iPhone 15 Pro"
}Tests are automatically grouped by feature files:
Feature: Login
βββ Scenario 1 [Device 1]
βββ Scenario 2 [Device 2]
Feature: Product
βββ Scenario 1 [Device 1]
Test on cloud devices with minimal configuration:
{
"executionType": "lambdatest",
"cloudProvider": "lambdatest",
"tunnelId": "your-tunnel-id"
}- Feature-grouped test results
- Device-wise breakdown
- Screenshots on failure
- Thread-safe parallel execution
- Beautiful HTML reports
- Device utilization statistics
- Pass/fail rates per device
- Performance metrics
- Historical trends
Report Structure:
reports/
βββ consolidated/
β βββ Device_summary<timestamp>.html
βββ extent/
βββ TestReport-<timestamp>/
βββ Report.html
βββ screenshots/
Use the included Jenkinsfile:
pipeline {
agent any
stages {
stage('Run Tests') {
steps {
sh 'mvn clean test'
}
}
}
}Use .github/workflows/appium-tests.yml:
name: Appium Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run tests
run: mvn clean test- Sequential: ~10 minutes for 20 tests
- Parallel (4 devices): ~3 minutes for 20 tests
- Speed Improvement: 3-10x faster
- Automatic port management
- Device pooling with tier-based allocation
- Result caching saves 30-70% execution time
- Thread-safe execution with zero conflicts
- Java 17+ - Modern Java features
- Maven - Dependency management
- Appium 2.x - Mobile automation
- TestNG - Test framework
- Cucumber - BDD support
- ExtentReports - HTML reporting
- Gson - JSON processing
This project is licensed under the MIT License - see the LICENSE file for details.
- Appium Community - For the amazing mobile automation framework
- ExtentReports - For beautiful reporting capabilities
- FPGA Hardware Design - Inspiration for parallel architecture patterns
If you find Orchestrix useful, please consider giving it a star β
- π Website: orchestrix
- π¬ Discussions: GitHub Discussions
- π Issues: GitHub Issues
- π Documentation: Full Documentation
Built with β€οΈ for enterprise mobile test automation