Skip to main content

E2E Testing Framework for Microservices

Project description

Testing Engine Core

A reusable E2E testing framework for microservices architectures.

Features

  • 🎯 Universal: Works with any REST API microservices
  • 🔧 Flexible: Dynamic service registration - no hardcoded dependencies
  • 🧪 Complete: HTTP requests, database assertions, message queue monitoring
  • 📝 Declarative: Clean DSL for defining test scenarios
  • 🔌 Extensible: Custom clients and step handlers
  • Backward Compatible: Works with existing POC services

Installation

From Source (Development)

pip install -e .

From Wheel

pip install testing-engine-0.1.0-py3-none-any.whl

Quick Start

Basic Usage (POC Services)

from engine.orchestrator import TestOrchestrator
from engine.scenario import TestScenario

# Initialize with default POC services
orchestrator = TestOrchestrator()

# Create test scenario
scenario = TestScenario("User Registration")
scenario.http_request(
    service="user",
    method="POST",
    endpoint="/api/users",
    json_data={
        "username": "testuser",
        "email": "test@example.com",
        "password": "SecurePass123!"
    },
    expected_status=201
)

# Execute
result = orchestrator.execute_scenario(scenario)
print(f"Test status: {result['status']}")

orchestrator.close()

Custom Services (Any Architecture)

from engine.config import EngineConfig, ServiceConfig

# Configure for your services
config = EngineConfig()
config.services = ServiceConfig.from_dict({
    "order": "http://order-api:8001",
    "payment": "http://payment-api:8002",
    "inventory": "http://inventory-api:8003"
})

orchestrator = TestOrchestrator(config)

# Use your service names
scenario = TestScenario("Order Flow")
scenario.http_request("order", "POST", "/api/orders", json_data=order_data)
scenario.http_request("payment", "POST", "/api/charge", json_data=payment_data)

orchestrator.execute_scenario(scenario)

Custom Authentication

from engine.clients import GenericServiceClient

class AuthClient(GenericServiceClient):
    def __init__(self, base_url, api_key):
        super().__init__(
            base_url,
            default_headers={"Authorization": f"Bearer {api_key}"}
        )

# Register custom client
orchestrator.register_service("secure_api", AuthClient(url, "your-api-key"))

Core Components

TestOrchestrator

Coordinates test execution across multiple services:

  • HTTP client management
  • Database inspection
  • Message queue monitoring
  • Test scenario execution

TestScenario

Declarative test definition:

  • http_request() - Make HTTP calls
  • wait_for_message() - Wait for RabbitMQ messages
  • assert_database() - Verify database state
  • custom_step() - Add custom logic

GenericServiceClient

Universal HTTP client for any REST API:

  • Automatic retries
  • Timeout handling
  • Convenience methods (get_json, post_json, etc.)
  • Custom headers support

Configuration

Environment Variables

# Services
export USER_SERVICE_URL=http://localhost:8001
export NOTIFICATION_SERVICE_URL=http://localhost:8002
export ADMIN_SERVICE_URL=http://localhost:8003

# Database
export DB_HOST=localhost
export DB_PORT=5432
export DB_NAME=testdb
export DB_USER=testuser
export DB_PASSWORD=testpass

# RabbitMQ
export RABBITMQ_HOST=localhost
export RABBITMQ_PORT=5672
export RABBITMQ_USER=testuser
export RABBITMQ_PASSWORD=testpass

Programmatic Configuration

config = EngineConfig()
config.services = ServiceConfig.from_dict({"api": "http://api:8080"})
config.database = DatabaseConfig(host="db.example.com", port=5432)
config.rabbitmq = RabbitMQConfig(host="mq.example.com", port=5672)

Advanced Features

Custom Step Handlers

def kafka_handler(step):
    kafka.publish(step.params['topic'], step.params['message'])

orchestrator.register_step_handler("kafka_publish", kafka_handler)

# Use in scenarios
scenario.custom_step(
    custom_type="kafka_publish",
    params={"topic": "events", "message": {...}}
)

Context Manager

with TestOrchestrator(config) as orchestrator:
    # Test code
    orchestrator.execute_scenario(scenario)
# Automatically cleaned up

Architecture Support

Works with any microservices architecture:

  • ✅ E-Commerce (order, payment, inventory, shipping)
  • ✅ IoT (device, telemetry, alerts)
  • ✅ Banking (account, transaction, fraud detection)
  • ✅ SaaS (user, subscription, billing)
  • ✅ And more...

Documentation

Requirements

  • Python 3.8+
  • PostgreSQL (for database assertions)
  • RabbitMQ (for message queue monitoring)
  • Your microservices

Testing

Run API tests (no infrastructure needed):

python test_api_only.py

Run full integration tests (requires running services):

python test_refactored_engine.py

License

MIT License

Contributing

Contributions welcome! This engine is designed to be universal and extensible.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

testing_engine_core-0.1.0.tar.gz (26.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

testing_engine_core-0.1.0-py3-none-any.whl (26.8 kB view details)

Uploaded Python 3

File details

Details for the file testing_engine_core-0.1.0.tar.gz.

File metadata

  • Download URL: testing_engine_core-0.1.0.tar.gz
  • Upload date:
  • Size: 26.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.11

File hashes

Hashes for testing_engine_core-0.1.0.tar.gz
Algorithm Hash digest
SHA256 e9fb0828ede1b7acbb5e8e63c0664e9847698aa62b534082a39d6d10f93703ac
MD5 e913ecc3f0cc62e3b1eff6e981eb678e
BLAKE2b-256 0e10fb8709e99a11b72d111b549d90ffb020794adfe0e235efbbe1ffa5525999

See more details on using hashes here.

File details

Details for the file testing_engine_core-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for testing_engine_core-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d600ef884de3e3d5600679e618febf29528f813ab535901b4fc8f5c03b3bf827
MD5 e8c7e48043d3efc75903c476dd34fc34
BLAKE2b-256 574037e387f39ef732713d4973d68fd81c92281520ee54548c482226cd907d6d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page