BlazeMeter: Cloud-Scale Load Testing Without Infrastructure Management
Running a large load test on your own infrastructure is painful: provisioning machines, managing networking, cleaning up after. BlazeMeter eliminates this by running your JMeter, Gatling, or Locust scripts in cloud infrastructure on demand, scaling to millions of virtual users without touching a server.
This guide covers BlazeMeter's architecture, how to upload and run tests, CI/CD integration, and practical configuration for realistic load testing.
What Is BlazeMeter?
BlazeMeter is a SaaS continuous testing platform that runs performance tests in cloud infrastructure. It's built around JMeter compatibility — any JMeter .jmx file runs in BlazeMeter without modification — but also supports Gatling, Locust, Selenium, Taurus YAML, and proprietary Scriptless testing.
Key capabilities:
- Cloud load generation — run from AWS, GCP, Azure across multiple regions simultaneously
- Massive scale — millions of VUs without managing a single load generator
- Private locations — deploy agents in your own infrastructure for testing internal systems
- CI/CD integration — native plugins for Jenkins, GitHub Actions, Azure DevOps
- Real-time reporting — live dashboards during test execution
- Reporting and trends — historical comparison across test runs
BlazeMeter is owned by Perforce Software (acquired from CA Technologies).
Getting Started
Account Setup
Sign up at blazemeter.com. The free plan includes:
- 50 concurrent users
- 10-minute test duration max
- 1 test at a time
- Basic reporting
Paid plans start at ~$99/month for 1000 VUs and longer durations.
Your First Test
The quickest path: upload an existing JMeter script.
- Create a test in BlazeMeter → Performance Tests
- Upload your
.jmxfile - Configure load parameters (override JMeter's own settings)
- Click Run
BlazeMeter handles provisioning cloud machines, distributing load, collecting results, and tearing down infrastructure.
Test Configuration
Load Configuration
Override JMeter's thread count and duration from BlazeMeter's UI:
# Equivalent to BlazeMeter test settings
concurrent_users: 500
ramp_up: 5m
hold_for: 30m
iterations: 0 # Run for duration, not fixed iterationsThis separation means your JMeter script stays generic (doesn't hardcode VU counts) and BlazeMeter drives the load profile.
Geographic Distribution
Distribute load from multiple regions simultaneously:
- US East (N. Virginia)
- US West (Oregon)
- EU West (Ireland)
- EU Central (Frankfurt)
- Asia Pacific (Singapore, Tokyo, Sydney)
Configure in test settings:
locations:
- location: us-east-1
weight: 40 # 40% of VUs from US East
- location: eu-west-1
weight: 35 # 35% from EU West
- location: ap-southeast-1
weight: 25 # 25% from SingaporeMulti-region testing verifies global performance, not just from a single data center. A page that loads in 200ms from US East might take 800ms from Singapore.
Private Locations
For testing internal applications not exposed to the internet:
- Install BlazeMeter Private Location agent in your network:
docker run -d \
--name blazemeter-agent \
-e BLAZEMETER_API_KEY=your_api_key \
blazemeter/bzm-private-agent:latest- Register the agent in BlazeMeter UI under Private Locations
- Select it as a load source in your test configuration
This maintains firewall security while allowing cloud-managed load generation from inside your network.
Taurus: Script-as-Code for BlazeMeter
Taurus is BlazeMeter's open-source test automation framework. It provides a clean YAML format that can drive JMeter, Gatling, Locust, or other executors:
# test.yaml
execution:
- concurrency: 500
ramp-up: 5m
hold-for: 30m
scenario: main-scenario
scenarios:
main-scenario:
requests:
- url: https://example.com/
label: Homepage
- url: https://example.com/api/login
method: POST
headers:
Content-Type: application/json
body:
username: ${username}
password: ${password}
label: Login
assert:
- contains:
- token
- url: https://example.com/dashboard
label: Dashboard
think-time: 2s
modules:
console:
disable: false
blazemeter:
token: ${BLAZEMETER_API_KEY}
project: MyApp
reporting:
- module: blazemeter
test: Load Test - Main ScenarioRun locally: bzt test.yaml — executes with local JMeter. Upload to BlazeMeter: bzt test.yaml -o modules.blazemeter.token=API_KEY — executes in cloud.
The same configuration file runs locally and in the cloud.
Data Parameterization in Taurus
scenarios:
main-scenario:
variables:
username: ${__property(test.user,defaultuser)}
data-sources:
- path: users.csv
delimiter: ","
quoted: false
loop: true
variable-names: username,passwordCI/CD Integration
GitHub Actions
name: Performance Test
on:
push:
branches: [main]
jobs:
load-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Taurus
run: pip install bzt
- name: Run BlazeMeter test
env:
BLAZEMETER_API_KEY: ${{ secrets.BLAZEMETER_API_KEY }}
run: |
bzt tests/performance/test.yaml \
-o modules.blazemeter.token=$BLAZEMETER_API_KEY \
-o modules.blazemeter.project=MyApp \
-o execution.concurrency=200 \
-o execution.hold-for=10mJenkins
stage('Performance Test') {
steps {
withCredentials([string(credentialsId: 'blazemeter-api-key', variable: 'BZM_KEY')]) {
sh """
bzt tests/performance/test.yaml \
-o modules.blazemeter.token=${BZM_KEY} \
-o execution.hold-for=15m
"""
}
}
}BlazeMeter API Direct Integration
For more control, use BlazeMeter's REST API:
# Start a test
TEST_ID=your_test_id
API_KEY=your_api_key
curl -X POST \
"https://a.blazemeter.com/api/v4/tests/${TEST_ID}/start" \
-H "Authorization: Basic $(echo -n ${API_KEY}: | base64)" \
-H "Content-Type: application/json"
# Poll for completion
MASTER_ID=from_start_response
while true; do
STATUS=$(curl -s \
"https://a.blazemeter.com/api/v4/masters/${MASTER_ID}" \
-H "Authorization: Basic $(echo -n ${API_KEY}: | base64)" \
| jq -r '.result.status')
if [ "$STATUS" = "ENDED" ]; then
break
fi
echo "Status: $STATUS — waiting..."
sleep 30
done
# Get result
curl -s \
"https://a.blazemeter.com/api/v4/masters/${MASTER_ID}/reports/thresholds" \
-H "Authorization: Basic $(echo -n ${API_KEY}: | base64)" \
| jq '.result.data.overallPass'Real-Time Monitoring
BlazeMeter's dashboard during test execution shows:
- Active Users — current VU count vs. target
- Response Time — average, p90, p95 in real time
- Throughput — requests/second
- Error Rate — with error breakdown (HTTP status codes, connection errors)
- Percentile Distribution — p50, p75, p90, p95, p99
Set up Live Monitoring Thresholds to auto-stop tests if error rate exceeds a limit:
modules:
blazemeter:
address: https://a.blazemeter.com
test: My Load Test
monitoring-threshold: 5% # Stop test if error rate exceeds 5%This prevents a runaway load test from causing extended downtime in staging.
Reporting and Comparison
Test Report Components
After test completion, BlazeMeter generates:
- Summary — VUs, duration, total requests, error rate, response time percentiles
- Transactions — per-request breakdown with p90/p95/p99
- Errors — grouped by type with count and percentage
- Load Profile — VU count and throughput over time
Compare Reports
Compare two test runs side-by-side to detect regressions:
- Open test history
- Select two runs
- Click "Compare"
BlazeMeter overlays the graphs and highlights statistically significant differences. A 15% response time increase between runs is immediately visible.
Automated Pass/Fail via Thresholds
Define pass/fail criteria that integrate with CI:
services:
- module: passfail
criteria:
- p90 of LoginTransaction > 1.5s for 10s: fail
- fail rate of CheckoutTransaction > 1%: fail
- avg response time > 3s: warnBzt exits with code 0 (pass) or non-zero (fail) based on these criteria, which maps directly to CI pipeline success/failure.
Cost Optimization
BlazeMeter charges by VU-minutes. To keep costs controlled:
- Smoke tests on PR — 50 VUs for 5 minutes (~0.1% of a full test)
- Full load tests on main merges — 500+ VUs for 30 minutes
- Schedule off-peak — many plans allow scheduled tests at lower rates
- Use private locations for staging — reduces cloud VU usage for internal testing
A typical smoke test (50 VU, 5 min) costs a few cents. A weekly full regression (1000 VU, 60 min) costs a few dollars. Budget varies significantly by plan tier.
BlazeMeter vs. k6 Cloud vs. Gatling Cloud
| BlazeMeter | k6 Cloud | Gatling Cloud | |
|---|---|---|---|
| JMeter support | Yes (core feature) | Via plugin | No |
| Script format | JMX, Taurus YAML, Locust | k6 JS | Gatling Scala/Java |
| Free tier | 50 VU, 10 min | 50 VU, limited | Limited |
| Private locations | Yes | Yes | Yes |
| Historical trends | Yes | Yes | Yes |
| Geographic distribution | Extensive | Good | Good |
Choose BlazeMeter if you already have JMeter scripts. Choose k6 Cloud for code-first performance testing. Choose Gatling Cloud for Gatling scripts.
Summary
BlazeMeter's value is eliminating the infrastructure overhead of large load tests. Instead of provisioning load generator instances, managing networking, and cleaning up after, you upload a script and BlazeMeter handles the rest.
The Taurus YAML format is worth adopting even if you're staying with JMeter as the executor — it gives you a cleaner, version-controlled test definition that works both locally and in the cloud. The CI/CD integration turns performance testing from a manual activity into an automated gate, which is where load testing needs to be for modern development teams.