Skip to main content

Prerequisites

  • Docker running (for test job containers)
  • Go 1.26+
  • 8GB+ RAM free
  • The Strait source code

Quick Start (15 minutes)

Build the test job images and run a quick validation:

Test Job Images

The framework includes real workloads in Python, TypeScript, and Go: Build all images:

Full Test Suite

Tier 1: Throughput Ceiling

Finds the maximum sustained jobs/sec. Starts at 10 jobs/sec, increases by 10 every 60 seconds until the system breaks.
Stop conditions: queue depth > 10K, P99 latency > 5s, or error rate > 1%.

Tier 2: Concurrency Ceiling

Finds the maximum concurrent connections. Starts at 50 concurrent, increases by 50 every 2 minutes.

Tier 3: Multi-Tenant Simulation

Simulates real production with hundreds of tenants, mixed plans, and varied traffic patterns.

Tier 3: Breaking Point

Adds 100 tenants every 30 minutes until performance degrades.

Tier 4: Endurance (24 hours)

Runs at 70% of throughput ceiling for 24 hours. Detects memory leaks, goroutine leaks, and performance drift.

Tier 5: Chaos Engineering

Breaks things on purpose during production load. 8 scenarios: worker kill, database failover, Redis failure, Docker restart, connection pool exhaustion, disk pressure, clock skew, cascading failure.

Error Scenarios

Tests all 12 failure modes: clean exit, exit codes, OOM, segfault, infinite loop, slow death, checkpoint recovery, SDK timeout, fork bomb, disk fill, network abuse.

Generating Reports

After running tests, generate HTML and JSON reports:
The HTML report includes:
  • Executive summary with key metrics
  • Throughput and concurrency ramp tables
  • Multi-tenant simulation results
  • Chaos engineering verdicts
  • Error scenario pass/fail matrix

Grafana Dashboard

The load test environment includes a pre-configured Grafana dashboard for real-time monitoring.

Setup

The dashboard shows:
  • Queue depth and active workers
  • Throughput and dispatch latency (P50/P95/P99)
  • Error rates and worker pool utilization
  • Database connection pool breakdown
  • Webhook delivery metrics
  • Go runtime (goroutines, heap memory, GC pauses)
Prometheus scrapes Strait’s /metrics endpoint every 5 seconds, so panels update in near real-time during load tests.

Understanding Your Results

What each metric means

Environment variables

Tuning Based on Results

The load test harness uses HTTP keep-alives with connection pooling for realistic measurements that match production client behavior. | Redis memory | Used memory > maxmemory | Increase maxmemory, review eviction policy |