Performance Benchmark
Real-world performance metrics measured on Apple Silicon
Units Reference
Requests Per Second
Milliseconds (1/1,000 second)
Microseconds (1/1,000,000 second)
Megabytes Per Second
Single Instance Performance
Mocklantis is a desktop application running as a single instance on your local machine. All benchmark results below are achieved without any clustering, load balancing, or horizontal scaling. Just one app, one process, 166,000+ requests per second.
Test Environment
- Application: Mocklantis Desktop (single instance)
- Platform: macOS (Darwin 25.1.0)
- CPU: Apple Silicon
- Tool: wrk (HTTP benchmarking tool)
- Duration: 10-15 seconds per test
- Version: Mocklantis 1.0.0
Simple Endpoint
Basic GET request returning a 35-byte JSON response. No template processing, no path variables.
Request / Response
Request
GET /test HTTP/1.1 Host: localhost:8087
Response (35 bytes)
HTTP/1.1 200 OK
Content-Type: application/json
{"message":"Hello from Mocklantis"}| Connections | Threads | Requests/sec | Avg Latency | Max Latency | Transfer/sec |
|---|---|---|---|---|---|
| 10 | 2 | 117,736 | 73 µs (0.073 ms) | 2.86 ms | 16.06 MB/s |
| 50 | 4 | 166,394 | 246 µs (0.246 ms) | 1.22 ms | 22.69 MB/s |
| 100 | 4 | 137,655 | 699 µs (0.699 ms) | 13.41 ms | 18.77 MB/s |
| 200 | 8 | 130,185 | 1.60 ms | 43.55 ms | 17.75 MB/s |
Peak Performance (Simple)
166,394
Requests per second
- Optimal Configuration: 50 connections, 4 threads
- Average Latency: 246 µs (0.246 ms)
- Max Latency: 1.22 ms
- Total Requests: 2,512,582 in 15 seconds
- Zero Errors
Complex Endpoint
POST request with path variables, query parameter validation, request body matching, and 30+ random variable processing.
Endpoint Configuration
Full Path
POST /api/v1/users/{userId}/orders/{orderId}?status={PENDING,ACCEPTED,CANCELED}&limit={number}&sort=date- Path Variables: userId, orderId
- Query Parameters: status (enum), limit (number), sort (string)
- Request Body: ~400 bytes JSON with random variables
- Response Body: ~900 bytes JSON with 30+ random variables
Request / Response in Mocklantis
Templates with random variables that get processed on each request
Request in Mocklantis
{
"customer": {
"id": "{{random.number(1000,9999)}}",
"email": "{{random.email}}",
"name": "{{random.name}}"
},
"items": [
{
"productId": "{{random.alphanumeric(8)}}",
"name": "{{random.string(10)}}",
"quantity": "{{random.number(1,5)}}",
"price": "{{random.double(10.00,999.99)}}"
},
{
"productId": "{{random.alphanumeric(8)}}",
"name": "{{random.string(10)}}",
"quantity": "{{random.number(1,5)}}",
"price": "{{random.double(10.00,999.99)}}"
}
],
"shipping": {
"method": "{{random.string(8)}}",
"address": "{{random.string(20)}}"
},
"payment": {
"method": "{{random.string(6)}}",
"currency": "{{random.string(3)}}"
}
}Response in Mocklantis
{
"orderId": "{{random.uuid}}",
"customerId": "{{random.number(1000,9999)}}",
"status": "created",
"customer": {
"name": "{{random.name}}",
"email": "{{random.email}}",
"phone": "{{random.phone}}",
"ip": "{{random.ip}}"
},
"order": {
"total": "{{random.double(50.00,999.99)}}",
"tax": "{{random.double(5.00,99.99)}}",
"discount": "{{random.double(0.00,50.00)}}",
"itemCount": "{{random.number(1,10)}}",
"trackingCode": "{{random.alphanumeric(12)}}"
},
"shipping": {
"estimatedDays": "{{random.number(1,14)}}",
"carrier": "{{random.string(8)}}",
"cost": "{{random.double(5.00,30.00)}}"
},
"items": [
{
"sku": "{{random.alphanumeric(8)}}",
"name": "{{random.string(12)}}",
"price": "{{random.double(10.00,199.99)}}",
"qty": "{{random.number(1,5)}}"
}
],
"createdAt": "{{random.date}}",
"expiresAt": "{{random.date}}"
}Request / Response Example
Actual generated values from a real request.
Note: Due to random variable templating, every request generates unique values. Request and response bodies are never static - each of the 142,000+ requests per second receives dynamically generated data.
Request Example
POST /api/v1/users/ZKjg/orders/a0DS
?status=ACCEPTED&limit=20&sort=date
Content-Type: application/json
{
"customer": {
"id": 4797,
"email": "[email protected]",
"name": "David Moore"
},
"items": [
{
"productId": "dpuvzt2s",
"name": "w9czgirbz9",
"quantity": 4,
"price": 683.95
},
{
"productId": "ewiracb1",
"name": "hc7f4xo507",
"quantity": 2,
"price": 815.13
}
],
"shipping": {
"method": "mc97fm6l",
"address": "wqvc2sr28eiqkht0ogiy"
},
"payment": {
"method": "jmacte",
"currency": "22l"
}
}Response Example
HTTP/1.1 200 OK
Content-Type: application/json
{
"orderId": "a17f6553-c695-4188-85bd-7cc9871f7bbf",
"customerId": 4279,
"status": "created",
"customer": {
"name": "Mary Johnson",
"email": "[email protected]",
"phone": "+33-7-31-98-24-43",
"ip": "172.16.111.26"
},
"order": {
"total": 153.15,
"tax": 66.99,
"discount": 47.26,
"itemCount": 8,
"trackingCode": "a0gqdb2nox74"
},
"shipping": {
"estimatedDays": 13,
"carrier": "rhm3663f",
"cost": 25.02
},
"items": [
{ "sku": "cnrzym3d", "price": 148.06, "qty": 1 },
{ "sku": "t4ihqrcv", "price": 178.07, "qty": 4 }
],
"createdAt": "2029-01-22",
"expiresAt": "2027-03-01"
}Processing Per Request
- Path variable extraction (2 variables: userId, orderId)
- Query parameter validation (3 params: status, limit, sort)
- Request body matching (~400 bytes JSON)
- Response template processing (30+ random variables)
- Response generation (~900 bytes JSON with dynamic data)
| Connections | Threads | Requests/sec | Avg Latency | Max Latency | Transfer/sec |
|---|---|---|---|---|---|
| 10 | 2 | 86,382 | 105 µs (0.105 ms) | 4.47 ms | 72.98 MB/s |
| 50 | 4 | 142,391 | 298 µs (0.298 ms) | 3.60 ms | 120.30 MB/s |
| 100 | 4 | 111,089 | 1.05 ms | 130.71 ms | 93.86 MB/s |
| 200 | 8 | 55,300 | 3.86 ms | 123.16 ms | 46.72 MB/s |
Peak Performance (Complex)
142,391
Requests per second
- Optimal Configuration: 50 connections, 4 threads
- Average Latency: 298 µs (0.298 ms)
- Max Latency: 3.60 ms
- Total Requests: 1,438,089 in 10 seconds
- Zero Errors
Feature Overhead
Even with all features enabled (path variables, query validation, body matching, 30+ random variables), Mocklantis delivers 142K requests per second - only 15% slower than the simple endpoint.
| Feature | Simple | Complex |
|---|---|---|
| Path Variables | 0 | 2 |
| Query Params | 0 | 3 (validated) |
| Request Body | None | ~400 bytes |
| Response Body | 35 bytes | ~900 bytes |
| Random Variables | 0 | 30+ |
| Requests/sec | 166,394 | 142,391 |
Performance Comparison
How Mocklantis compares to other mock server solutions (simple endpoint benchmark).
| Tool | Requests/sec | Runtime |
|---|---|---|
| Mocklantis | 166,000+ | Rust (Native) |
| Other Provider A | ~95,000 | Java |
| Other Provider B | ~10-15K | Java |
| Other Provider C | ~3-5K | Node.js |
| Other Provider D | ~2-3K | Node.js |
* Competitor numbers are approximate based on community benchmarks. Results may vary based on hardware and configuration.
Why So Fast?
Rust + Hyper
Built with Rust and Hyper - the same async HTTP stack powering Cloudflare's edge network. Zero-cost abstractions, no garbage collection pauses.
Sub-millisecond Latency
Average response time of 246 µs (0.246 ms) means your tests complete faster. No more waiting for slow mock servers.
No-Restart Architecture
Configuration changes take effect immediately without restarting the server or dropping connections. Dynamic routing with catch-all handlers.
Rock Solid Stability
2.5 million requests served with zero errors. Low standard deviation means predictable, consistent performance.
Methodology
All tests were performed using wrk, a modern HTTP benchmarking tool:
wrk -t4 -c50 -d15s http://localhost:8087/test -t4 : 4 threads -c50 : 50 concurrent connections -d15s : 15 second duration
Each configuration was tested multiple times to ensure consistency. Benchmarks performed on local machine. Production results may vary based on network conditions and hardware.