Skip to main content

Load Tests Deep Dive (20+ min)

Quickstart

⚠️ Make sure to visit the Load Tests Quickstart to get started quickly.

Overview

Goal of this document: Load testing to verify PATH works and scales under load.

The load tests verify:

  • Service responses under load (data + latency)
  • System reliability and performance
  • Success metrics for Shannon protocol
  • Scalability characteristics

We use the Vegeta library for HTTP load testing:

  • Can generate thousands of requests/sec
  • Collects detailed metrics including latency percentiles (p50, p95, p99)
  • Supports custom configurations and attack parameters
  • Validates JSON-RPC responses and success rates

Vegeta

Load Test Modes

PATH load tests support multiple modes of operation:

ModePurposeHow it WorksUse Cases
Local PATHHTTP performance testing against local PATH instances1. Requires completed Getting Started and Pocket Cheat Sheet setup
2. Tests against local PATH instance
- Local development testing
- Feature validation
- Development iteration
Grove PortalHTTP performance testing against Grove Portal1. Sends HTTP requests to Grove Portal gateway URL
2. Requires Grove Portal credentials or pre-configured files
- Testing production gateway
- Production performance validation
- Benchmarking
Websocket OnlyWebsocket-specific performance testing1. Tests only Websocket connections, skipping HTTP tests entirely
2. Available for Websocket-compatible services (e.g., XRPLEVM)
- Websocket-specific performance validation
- Real-time connection testing
- Websocket scaling analysis

Local PATH Mode

For local PATH load testing, you need:

  1. Completed Setup: Follow the Getting Started and Pocket Cheat Sheet guides
  2. Local PATH Instance: Your local PATH instance should be running and configured
  3. Default Configuration: The system automatically targets your local PATH instance

Grove Portal Mode

You will need one of the following:

  1. Grove Employee Pre-configured Files

    • Download from 1Password links above
    • Copy to e2e/config/.grove.e2e_load_test.config.yaml
  2. Custom Portal Access

    • gateway_url_override: https://rpc.grove.city/v1
    • Get credentials from the Grove Portal
    • Use make config_copy_e2e_load_test to set up

Websocket Mode

For Websocket load testing, you can run tests exclusively on Websocket-compatible services:

  1. Prerequisites: Same as Local PATH or Grove Portal mode
  2. Supported Services: Currently XRPLEVM and XRPLEVM-testnet services
  3. Test Transport: Uses Websocket connections instead of HTTP
  4. Commands:
    • make load_test_websocket xrplevm - Test specific Websocket services
    • make load_test_websocket_all - Test all Websocket-compatible services

Load Test Configuration

Configuration files used:

Configuration FileLocal PATHGrove PortalDefault Available?
./e2e/config/.grove.e2e_load_test.config.yaml
./e2e/config/.e2e_load_test.config.yamle2e/config/e2e_load_test.config.tmpl.yaml
Populate Configs

You can use the following command to copy example configs and follow the instructions in your CLI:

  • make config_copy_e2e_load_test

Schema and Validation

The configuration uses a formal YAML schema with validation:

Schema Location: ./e2e/config/e2e_load_test.config.schema.yaml

VSCode Validation

If you are using VSCode, we recommend using the YAML Language Support extension for in-editor validation of the .config.yaml file.

Enable it by ensuring the following annotation is present at the top of your config file:

# yaml-language-server: $schema=https://raw.githubusercontent.com/buildwithgrove/path/refs/heads/main/e2e/config/e2e_load_test.config.schema.yaml

Supported Services in Load Tests

All currently supported Grove Portal services are supported in the load tests.

tip

To see the list of supported services for the tests, see the test_cases array in the Load Test Config file.

Test Metrics and Validation

The load tests collect and validate comprehensive metrics across multiple dimensions:

CategoryMetrics Collected
HTTP Metrics- Success rates (HTTP 200)
- Status code distribution
- HTTP error categorization
Latency Metrics- P50, P95, P99 latency percentiles
- Average latency
- Per-method latency analysis
JSON-RPC Validation- Response unmarshaling success
- JSON-RPC error field validation
- Result field validation
- Protocol-specific validation
Service-Level Metrics- Per-service success aggregation
- Cross-method performance comparison
- Service reliability scoring
- Error categorization and reporting
Threshold Validation

Tests will fail if any configured thresholds are exceeded, ensuring consistent service quality and performance.

Reviewing PATH Logs

When running against local PATH instances, logs may be written to ./path_log_load_test_{timestamp}.txt.

In order to enable this, set the log_to_file field:

yq eval '.e2e_load_test_config.load_test_config.log_to_file = true' -i ./e2e/config/.e2e_load_test.config.yaml

You should see the following log line at the bottom of the test summary:

===== 👀 LOGS 👀 =====

✍️ PATH container output logged to /tmp/path_log_load_test_1745527319.txt ✍️

===== 👀 LOGS 👀 =====