RusMES Load Testing Tool
Comprehensive load testing tool for RusMES mail server, supporting multiple protocols and workload patterns.
Features
- Multi-Protocol Support: SMTP, IMAP, JMAP, POP3, and mixed workloads
- Flexible Workload Patterns: Steady load, spike tests, ramp-up, stress tests, wave patterns
- Detailed Metrics: HDR Histogram-based latency tracking (p50, p95, p99, p99.9)
- Multiple Report Formats: JSON, HTML, CSV, and Prometheus metrics export
- Realistic Message Generation: Configurable message sizes and content types
- Concurrent Testing: Support for high concurrency scenarios
Installation
Quick Start
Basic SMTP Load Test
High-Throughput Test
Mixed Protocol Test
Command-Line Options
Core Options
-H, --host <HOST>: Target host (default: localhost)-p, --port <PORT>: Target port (default: 25)--protocol <PROTOCOL>: Protocol to test (smtp, imap, jmap, pop3, mixed)-s, --scenario <SCENARIO>: Test scenario (smtp-throughput, concurrent-connections, mixed-protocol, sustained-load)-d, --duration <SECONDS>: Test duration in seconds (default: 60)-c, --concurrency <NUM>: Number of concurrent workers (default: 10)-r, --rate <RATE>: Target message rate in msg/s (default: 100)
Advanced Options
--ramp-up <SECONDS>: Gradual ramp-up duration (default: 0)--min-size <BYTES>: Minimum message size (default: 1024)--max-size <BYTES>: Maximum message size (default: 102400)--content <TYPE>: Message content type (random, template, real-world)
Report Options
--output-json <PATH>: Generate JSON report--output-html <PATH>: Generate HTML report--output-csv <PATH>: Generate CSV report--prometheus: Output Prometheus metrics format--prometheus-port <PORT>: Prometheus export port (default: 9090)
Mixed Protocol Weights
--smtp-weight <0-100>: SMTP percentage (default: 70)--imap-weight <0-100>: IMAP percentage (default: 20)--jmap-weight <0-100>: JMAP percentage (default: 10)--pop3-weight <0-100>: POP3 percentage (default: 0)
Test Scenarios
1. Throughput Test
Tests maximum message processing rate:
2. Concurrent Connections
Tests server connection handling:
3. Sustained Load
Long-running test for stability:
4. Spike Test
Sudden traffic increase:
Report Formats
JSON Report
Machine-readable format for automation:
HTML Report
Human-readable visual report with charts and tables.
CSV Report
Spreadsheet-compatible format:
metric,value
total_requests,6000
successful_requests,5980
latency_p99_ms,78.9
Prometheus Metrics
Compatible with Prometheus monitoring:
loadtest_total_requests 6000
loadtest_successful_requests 5980
loadtest_latency_seconds{quantile="0.99"} 0.0789
Performance Metrics
The tool tracks:
- Throughput: Requests per second
- Latency: Min, max, mean, p50, p95, p99, p99.9
- Success Rate: Percentage of successful requests
- Data Transfer: Bytes sent and received
- Error Details: First 100 unique errors
Example Test Plans
Development Testing
# Quick smoke test
# Standard dev test
Staging Environment
# Capacity test
# Stress test
Production Validation
# Peak traffic simulation
# Soak test (24 hours)
Integration with CI/CD
GitHub Actions
- name: Load Test
run: |
rusmes-loadtest \
--host ${{ secrets.TEST_HOST }} \
--rate 1000 \
--duration 60 \
--output-json loadtest-results.json
- name: Upload Results
uses: actions/upload-artifact@v3
with:
name: loadtest-results
path: loadtest-results.json
GitLab CI
load_test:
script:
- rusmes-loadtest --rate 1000 --duration 60 --output-json results.json
artifacts:
reports:
junit: results.json
Advanced Usage
Custom Workload Patterns
The tool supports various workload patterns in code:
use WorkloadPattern;
// Steady load
let pattern = Steady ;
// Spike test
let pattern = Spike ;
// Ramp-up
let pattern = RampUp ;
// Wave pattern
let pattern = Wave ;
Troubleshooting
High Connection Failures
If you see many connection failures:
- Check system file descriptor limits:
ulimit -n - Increase limits:
ulimit -n 65536 - Check server connection limits
- Reduce concurrency or rate
Memory Issues
For very high concurrency:
- Monitor memory usage with
toporhtop - Reduce concurrency
- Reduce message size
- Use shorter test duration
Network Saturation
If network becomes saturated:
- Check bandwidth with
iperf3 - Reduce message size
- Reduce rate
- Use multiple test clients
Architecture
rusmes-loadtest/
├── src/
│ ├── main.rs # CLI entry point
│ ├── lib.rs # Library root
│ ├── config.rs # Configuration
│ ├── metrics.rs # Metrics collection (HDR Histogram)
│ ├── reporter.rs # Report generation
│ ├── workload.rs # Workload patterns
│ ├── generators.rs # Message generation
│ ├── scenarios.rs # Test scenarios
│ └── protocols/ # Protocol clients
│ ├── smtp.rs
│ ├── imap.rs
│ ├── jmap.rs
│ └── pop3.rs
└── tests/ # Integration tests
License
Same as RusMES project.
Contributing
See main RusMES CONTRIBUTING.md for guidelines.