Skip to main content
Use load testing to ensure that your Blnk deployment can handle expected traffic and maintain performance under various conditions. This is a critical step in setting up your Blnk server. Blnk includes a comprehensive load testing suite built with k6, a modern load testing tool. This guide walks you through finding, configuring, and running load tests to validate your Blnk server’s performance across different scenarios.

Before you start

Make sure you have:
  1. Cloned the Blnk repository to your local machine
  2. Docker and Docker Compose installed, for running the Blnk server
  3. k6 installed on your machine. Visit k6.io for installation instructions
  4. Your Blnk server running and accessible
If you haven’t deployed Blnk yet, follow the installation guide first.

Getting started

You can find the load test files in the tests/loadtest directory of the Blnk repository. Navigate to this directory to access all available test scripts:
cd tests/loadtest

Main test script

The primary load test script (script.js) supports five configurable load-testing scenarios, each controlled via environment variables. Each scenario targets a specific aspect of your Blnk server’s transaction performance, allowing you to test different load patterns and system behaviors.
  • Baseline: Steady, constant load to measure normal performance.
  • Ramp: Gradually increasing load to find when your server struggles.
  • Contention: Tests when one balance gets most of the traffic.
  • Soak: Long-duration test (2 hours) to find memory leaks and stability issues.
  • Spike: Sudden traffic surge to test recovery behavior.
By default, tests target http://localhost:5001. Ensure your Blnk server is running and accessible at this address, or configure the URL using the URL environment variable.
Use the SCENARIO environment variable to select which scenario to run. Each scenario has specific configuration options:
Runs a steady, constant load to measure your server’s normal performance. Use this to see how fast your server responds under normal conditions.
tests/loadtest
k6 run --env URL=http://localhost:5001/transactions --env SCENARIO=baseline --env VUS=100 --env DURATION=5m script.js
VUS
integer
default:"100"
Number of virtual users to run concurrently
DURATION
string
default:"5m"
Test duration (e.g., “5m”, ”30s”, “1h”)

Feature-specific tests

Run targeted tests to verify specific Blnk features. Each test focuses on one capability to confirm it works correctly and performs as expected under load.
Tests atomic bulk transaction processing with 1000 virtual users creating batches of 4 transactions each.
tests/loadtest
k6 run bulk.js
Tests the inflight transaction workflow: creating an inflight transaction and committing it.
tests/loadtest
k6 run inflight.js
Tests race conditions by having 100 virtual users attempt to commit the same inflight transaction simultaneously.
tests/loadtest
k6 run inflight-concurrent-commit.js
Tests transactions that split amounts across multiple destination accounts using percentage, fixed amount, and “left” distribution methods.
tests/loadtest
k6 run multi-destinations.js
Tests transactions that aggregate amounts from multiple source accounts.
tests/loadtest
k6 run multi-sources.js
Tests the refund workflow by creating transactions and immediately refunding them.
tests/loadtest
k6 run refund.js
Tests scheduled transaction creation with future execution times.
tests/loadtest
k6 run scheduled.js

Understanding test results

k6 provides comprehensive metrics for each test run. Key metrics to monitor include:
  • http_req_duration: Request latency (p50, p95, p99 percentiles)
  • http_req_failed: Error rate (should be < 0.1%)
  • http_reqs: Total requests processed
  • vus: Virtual users active during the test
1

Performance thresholds

The main test script (script.js) includes built-in performance thresholds that automatically fail tests if exceeded:
  • Error rate: Less than 0.1% (http_req_failed < 0.001)
  • P95 latency: Less than 300ms
  • P99 latency: Less than 600ms
2

Exporting results

The main test script automatically exports results to summary.json. Run any scenario:
k6 run --env SCENARIO=baseline script.js
Results are automatically saved to summary.json in the current directory.
3

Analyze results with TPM tool

The test suite includes a utility script to convert k6 JSON output into transactions per minute (TPM) CSV format.First, export k6 results as JSON:
k6 run --out json=results.json --env SCENARIO=baseline script.js
Then convert to CSV:
python3 tools/k6_json_to_tpm.py results.json tpm_results.csv
input.json
string
required
Path to k6 JSON output file (use --out json=output.json when running k6)
output.csv
string
required
Path to output CSV file
The generated CSV includes: minute timestamp, requests, transactions per minute (tpm), success ratio, p50/p95/p99 latency, and apdex score.

Troubleshooting

Connection refused errors

If you see connection errors, verify:
  1. Your Blnk server is running and accessible.
  2. The URL matches your server’s address and port.
  3. Firewall rules allow connections to the Blnk server.

High error rates

If error rates exceed thresholds:
  1. Check Blnk server logs for errors.
  2. Verify database connection pool settings.
  3. Review server resource usage (CPU, memory).
  4. Consider reducing virtual users or request rate.

Need help?

We are very happy to help you make the most of Blnk, regardless of whether it is your first time or you are switching from another tool. To ask questions or discuss issues, please contact us or join our Discord community.
Tip: Connect to Blnk Cloud to see your Core data.You can view your transactions, manage identities, create custom reports, invite other team members to collaborate, and perform operations on your Core — all in one dashboard.Check out Blnk Cloud →