BlazeMeter + JMeter Cloud Testing: Scale Performance Tests Without Infrastructure
BlazeMeter runs JMeter, Gatling, Locust, and k6 scripts in the cloud across multiple geographic regions. Upload your existing scripts, configure geographic distribution and user counts, run tests, and get unified performance reports without managing load generator infrastructure.
The biggest bottleneck in load testing isn't script writing—it's infrastructure. Generating 100,000 concurrent users requires dozens of servers, coordinated startup, unified result collection, and cleanup. BlazeMeter eliminates that work: upload your JMeter script, pick regions and user count, click run. Load generators spin up in AWS infrastructure across your chosen locations and tear down automatically when the test ends.
What BlazeMeter Adds to JMeter
JMeter is the de facto standard for enterprise load testing scripts. BlazeMeter runs JMeter at cloud scale:
- No load generator management: BlazeMeter provisions and terminates EC2 instances
- Geographic distribution: Simultaneously generate load from US, EU, APAC regions
- Real-time unified dashboard: Aggregate stats from all load generators in one view
- Historical comparison: Compare this run to any previous run
- CI/CD integration: REST API and plugins for Jenkins, GitHub Actions, Azure DevOps
- Multiple script formats: JMeter (.jmx), Gatling (.scala), Locust (.py), k6 (.js), Taurus (.yml)
Getting Started
- Sign up at blazemeter.com (free tier available: 50 concurrent users, 10 minutes, 1 location)
- Create a new test
- Upload a JMeter .jmx file or create a script in the UI
Creating a Simple Test Without a Script
For quick API tests, BlazeMeter has a URL builder:
- Performance Test → Create Test → Blank Test
- Add URLs manually: specify method, URL, headers, body
- BlazeMeter converts to JMeter internally
Uploading and Running JMeter Scripts
Prerequisites
Your JMeter script should:
- Use variables for host/port (not hardcoded URLs)
- Include assertions for response validation
- Have CSV data files (if needed) ready to upload alongside the .jmx
Upload Process
- Create Test → JMeter Test
- Upload your
.jmxfile - Upload supporting files (CSV data, keystores, plugins)
- Configure test settings:
- Engines: Number of load generator instances (more engines = more users)
- Total users: Divided evenly across engines
- Duration: Fixed duration or iteration count
- Ramp-up: Time to reach full user count
Geographic Distribution
BlazeMeter's "Locations" feature:
- Add multiple locations (US East, US West, EU West, Singapore, etc.)
- Set user count per location
- BlazeMeter starts load generators in each region simultaneously
Example: 10,000 users from US East + 5,000 from EU West + 5,000 from Singapore = realistic global load distribution.
Taurus: Script-as-Code for BlazeMeter
BlazeMeter's Taurus tool provides a YAML-based abstraction over JMeter:
# performance-test.yml
execution:
- concurrency: 1000
hold-for: 10m
ramp-up: 2m
scenario: api-test
scenarios:
api-test:
requests:
- url: https://api.example.com/products
method: GET
assert:
- contains:
- "id"
- url: https://api.example.com/products/${__Random(1,100,product_id)}
method: GET
headers:
Accept: application/json
think-time: 1s
- url: https://api.example.com/orders
method: POST
body:
product_id: ${product_id}
qty: 1
assert:
- contains:
- "order_id"
reporting:
- module: blazemeter
test: "API Load Test"
token: ${BLAZEMETER_API_KEY}
project: ${BLAZEMETER_PROJECT_ID}Run locally:
pip install bzt
bzt performance-test.ymlTaurus runs locally with JMeter under the hood. Add the blazemeter reporting module to push results to the BlazeMeter dashboard without uploading to the cloud.
To run IN the cloud:
modules:
blazemeter:
address: https://a.blazemeter.com
token: ${BLAZEMETER_API_KEY}
project: ${BLAZEMETER_PROJECT_ID}
test: "Cloud API Test"
location: us-east-1
nodes: 5 # 5 load generatorsbzt performance-test.yml -o modules.blazemeter.enabled=trueCI/CD Integration
GitHub Actions
name: Load Test
on:
workflow_dispatch:
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 Load Test
env:
BLAZEMETER_API_KEY: ${{ secrets.BLAZEMETER_API_KEY }}
BLAZEMETER_PROJECT_ID: ${{ secrets.BLAZEMETER_PROJECT_ID }}
run: |
bzt performance-test.yml \
-o modules.blazemeter.token=$BLAZEMETER_API_KEY \
-o modules.blazemeter.project=$BLAZEMETER_PROJECT_ID \
-o modules.blazemeter.test="CI Load Test - ${{ github.sha }}"BlazeMeter REST API
Trigger tests programmatically:
# Start a test
curl -X POST "https://a.blazemeter.com/api/v4/tests/{testId}/start" \
-H "x-api-key: $BLAZEMETER_API_KEY" \
| jq '.result.id'
# Check test status
curl "https://a.blazemeter.com/api/v4/masters/{masterId}/status" \
-H "x-api-key: $BLAZEMETER_API_KEY" \
| jq '.result.status'
# Get aggregate stats
curl "https://a.blazemeter.com/api/v4/masters/{masterId}/reports/aggregatereport/data" \
-H "x-api-key: $BLAZEMETER_API_KEY"Pass/Fail Thresholds
Configure test failure criteria in the BlazeMeter UI under Test Settings → Pass/Fail Criteria:
- Response time p95 > 500ms → Fail
- Error rate > 1% → Fail
- Throughput < 100 RPS → Fail
Or via Taurus configuration:
reporting:
- module: passfail
criteria:
- avg-rt of APITest > 500ms for 10s, stop as failed
- fail of APITest > 5%, stop as failed
- succ of APITest < 100, stop as failedReal-Time Monitoring
During a BlazeMeter test, the dashboard shows:
- Users: Current active users (ramp-up visible)
- RPS: Real-time requests per second
- Response time: p50, p90, p95, p99 (switch between percentiles)
- Error rate: Percentage of failed requests
- Errors: Breakdown by error type
Drill into individual engines to see per-location stats—useful when one geographic region degrades while others stay healthy.
Comparing Test Runs
BlazeMeter stores all test runs. The Comparison tab overlays two or more runs:
- Before/after a code deployment
- Load test after infrastructure upgrade
- Regression from a recent code change
Export comparison data as PDF for stakeholder reports.
Server Monitoring (Agent)
Install the BlazeMeter monitoring agent on target servers to capture server-side metrics alongside load test results:
# On target server
curl https://a.blazemeter.com/api/v4/projects/{projectId}/monitoring/download \
| sudo bashCorrelate response time increases with CPU spikes or memory pressure in the unified dashboard.
BlazeMeter Pricing Reality
The free tier is limited (50 users, 10 min). Realistic pricing:
- Freelancer ($99/mo): 1K users, 1 location
- Business ($449/mo): 50K users, multiple locations
- Enterprise: Custom pricing, unlimited users, SLA
For infrequent tests, the on-demand API (pay-per-test-minute) may be cheaper than a subscription. Calculate your expected monthly usage before committing.
When to Use BlazeMeter vs. Self-Hosted
Use BlazeMeter when:
- Testing from multiple geographic regions matters
- You don't want to maintain load generator infrastructure
- Tests are infrequent (monthly/quarterly)
- Stakeholder-ready reports are required
Use self-hosted (Locust, k6, Gatling) when:
- Tests run daily in CI
- Budget is limited
- Tests target internal staging environments not reachable from public internet
- You need full control over load generator configuration
Summary
BlazeMeter removes infrastructure management from load testing. Upload a JMeter script or write a Taurus YAML, configure geographic distribution and user count, and run. For teams that need realistic global load simulation or professional reporting without DevOps overhead, BlazeMeter's cloud infrastructure is the fastest path from "we should load test" to actually doing it. For regular CI load tests against internal environments, self-hosted tools cost less and integrate more naturally.