SlideShare a Scribd company logo
Load testing
Load testing with Blitz
Who is this dude?
Lindsay Holmwood
BULLETPROOF
I Run this thing
Have tried and failed many
times to implement effective
        load testing
Load testing with Blitz
A story
New project
Replacing a high-
 profile website
 (new infrastructure,
    new application)
1000
concurrent users
“We need 100%
   uptime”
Project starts
Requirements
   change
Deadlines
aren’t met
Performance testing?
      Fuck it!
  We’ll do it live!
Load testing with Blitz
Performance testing?
“You have one day”
Load testing with Blitz
Problem:
Treated as
WAterfall-esque
       QA
It’s a
non-functional
  requirement
Load testing with Blitz
WHY
Do we load test?
Capacity
planning
“Can the site deal
   with load?”
Defect
detection
“Is this code
going to cripple
    the site?”
Optimisation
“What happens if
 we change this
   Setting?”
Historical
 analysis
“Is the site
getting slower?”
Cache warming
“Prepare the
infrastructure
  for Failover”
WHY
Do we load test?
A combination of
  proactive &
Reactive reasons
A combination of
  proactive &
Reactive reasons
It’s a
non-functional
  requirement
Load testing with Blitz
Why
      does load testing
           FAIL?
(from a technical perspective)
How
not the
WHAT
TooL fetishism
Get bogged down
   in details
how the testing
infrastructure works
Micro
 vs
Macro
Business
  Does not care
about your tools
Business
cares About:
“Can the site deal
   with load?”
Load testing with Blitz
Recommendation:
Use tool with
lowest barrier
   TO entry
Load testing with Blitz
Blitz
Runs on AWS
Web form
Browser plugins
   Firefox, Chrome
REST API
API Clients
Ruby, Python, Java
   Node.JS, Perl
Common
Command Line
Excellent
documentation
   docs.blitz.io
Inexpensive
    250 concurrent users
over 60 second period == free
SPRINTS
   &
RUSHES
Load testing with Blitz
Let’s dive in!
Sign up @
 http://blitz.io/
$ gem install blitz
$ blitz help
Usage: blitz <command> <options>
                help - Display this help
      account:about - Show information about your account
           api:init - Validate and login with your API key
         couch:fuzz - Auto generate blitz tests from CouchDB
                curl - Run a sprint or a rush
          curl:help - Show help on sprint and rushing
         traceroute - Run traceroute remotely
    traceroute:help - Show help on traceroute
             version - Show the version of this Ruby gem
$ blitz api:init
# writes credentials to ~/.blitz/credentials
$ blitz curl:help

Usage: blitz curl <options> <url>

--user-agent    -A   <string>      User-Agent to send to server
--cookie        -b   name=<string> Cookie to send to the server (multiple)
--data          -d   <string>      Data to send in a PUT or POST request
--dump-header   -D   <file>        Print the request/response headers
--referer       -e   <string>      Referer URL
--help          -h                 Help on command line options
--header        -H   <string>      Custom header to pass to server
--pattern       -p   <s>-<e>:<d>   Ramp from s to e concurrent requests in d secs
--region        -r   <string>      california|oregon|virginia|singapore|ireland|japan
--status        -s   <number>      Assert on the HTTP response status code
--timeout       -T   <ms>          Wait time for both connect and responses
--user          -u   <user[:pass]> User and password for authentication
--request       -X   <string>      Request method to use (GET, HEAD, PUT, etc.)
--variable      -v   <string>      Define a variable to use
--verbose       -V                 Print the request/response headers
--tlsv1         -1                 Use TLSv1 (SSL)
--sslv2         -2                 Use SSLv2 (SSL)
--sslv3         -3                 Use SSLv3 (SSL)
Load testing with Blitz
$ blitz curl --region singapore --pattern 1-250:20 
     --timeout 10000 --verbose http://example.org/
user growth / time

$ blitz curl --region singapore --pattern 1-250:20 
     --timeout 10000 --verbose http://example.org/
user growth / time
      for AWS lag
$ blitz curl --region singapore --pattern 1-250:20 
     --timeout 10000 --verbose http://example.org/
user growth / time
         for AWS lag
$ blitz curl --region singapore --pattern 1-250:20 
     --timeout 10000 --verbose http://example.org/

rushing from singapore...

  Time    Users Response    Hits Timeouts   Errors   Hits/s Mbps
  2.5s       31 -1.000s        0        0        0
  8.3s      103   1.075s     146        0        9    50.53   0.88
 11.2s      140   0.406s     376        0        9    79.64   1.41
 14.1s      176   0.409s     682        0        9   105.24   1.86
 22.8s        0   0.417s    1552        0        9    15.57   0.27
--pattern 1-250:20
blitz calculates the
     growth automatically



--pattern 1-250:20
Sawtooth
--pattern 1-250:20,1-250:20,1-250:20
TV AD / Twittersplosion
 --pattern 200-5000:30,5000-400:60
Load testing with Blitz
Integrate
     with your
development cycle
VCS
        CI
Deploy automation
VCS
        CI
Deploy automation
git
post-receive hook
GitHub web hooks
Doesn’t take into
 account test
   failures
Is the code
 actually
 deployed?
Load testing with Blitz
VCS
        CI
Deploy automation
CRON JOB
JENKINS JOB
GREAT if you have
   a CI system
Runs tests
      but
Separate system
What if you’re making
infrastructure changes
 during a load test?
Load testing with Blitz
VCS
        CI
Deploy automation
Fabric
Capistrano
Run tests when
  you deploy
Use the same
  toolchain
Testing lives IN the app.
What about triggering
   load tests on
  infrastructure
      changes?
MVP
Just get
something
 working!
Load testing with Blitz
Problem:
No REporting
     :-(
THIS IS IT
rushing from singapore...

  Time   Users Response     Hits Timeouts   Errors   Hits/s Mbps
  2.5s      31 -1.000s         0        0        0
  8.3s     103   1.075s      146        0        9    50.53   0.88
 11.2s     140   0.406s      376        0        9    79.64   1.41
 14.1s     176   0.409s      682        0        9   105.24   1.86
 22.8s       0   0.417s     1552        0        9    15.57   0.27
SOL ON:
Optimisation
“What happens if
 we change this
   Setting?”
Historical
 analysis
“Is the site
getting slower?”
Showstopper?
...
$ gem install blitz

# ...

rushing from singapore...

  Time   Users Response     Hits Timeouts   Errors   Hits/s Mbps
  2.5s      31 -1.000s         0        0        0
  8.3s     103   1.075s      146        0        9    50.53   0.88
 11.2s     140   0.406s      376        0        9    79.64   1.41
 14.1s     176   0.409s      682        0        9   105.24   1.86
 22.8s       0   0.417s     1552        0        9    15.57   0.27
Can we duck
punch our way
  to success?
Load testing with Blitz
#!/usr/bin/env ruby
# load_test.rb

require 'blitz'

arguments = "--region singapore --pattern 1:250:60"
url       = "http://example.org/"
command   = "#{arguments} #{url}"

job     = Blitz::Curl.parse(command)
curl    = Blitz::Command::Curl.new
curl.rush(job)
# ruby load_test.rb

rushing from singapore...

  Time   Users Response     Hits Timeouts   Errors   Hits/s Mbps
  2.5s      31 -1.000s         0        0        0
  8.3s     103   1.075s      146        0        9    50.53   0.88
 11.2s     140   0.406s      376        0        9    79.64   1.41
 14.1s     176   0.409s      682        0        9   105.24   1.86
 22.8s       0   0.417s     1552        0        9    15.57   0.27
#!/usr/bin/env ruby
# load_test.rb

require 'blitz'

arguments = "--region singapore --pattern 1:250:60"
url       = "http://example.org/"
command   = "#{arguments} #{url}"

job     = Blitz::Curl.parse(command)
curl    = Blitz::Command::Curl.new
curl.rush(job)
#!/usr/bin/env ruby
# load_test.rb

require 'blitz'

arguments = "--region singapore --pattern 1:250:60"
url       = "http://example.org/"
command   = "#{arguments} #{url}"

job     = Blitz::Curl.parse(command)
curl    = Blitz::Command::Curl.new
curl.rush(job)
Blitz::Curl.parse(command)

         returns
    Blitz::Curl::Rush
#!/usr/bin/env ruby
# load_test.rb

require 'blitz'

arguments = "--region singapore --pattern 1:250:60"
url       = "http://example.org/"
command   = "#{arguments} #{url}"

job     = Blitz::Curl.parse(command)
curl    = Blitz::Command::Curl.new
curl.rush(job)
Blitz::Command::Curl#rush
initiates the test
   + outputs the test results


Blitz::Command::Curl#rush
#!/usr/bin/env ruby
# load_test.rb

require 'blitz'

arguments = "--region singapore --pattern 1:250:60"
url       = "http://example.org/"
command   = "#{arguments} #{url}"

job     = Blitz::Curl.parse(command)
curl    = Blitz::Command::Curl.new
curl.rush(job)

puts job.result.timeline.to_json
Produces muck
duck punch our
way to success
class Blitz::Curl::Rush
  class Point
    def to_json(*args)
      {
        'timestamp' => @timestamp,
        'duration' => @duration,
        'total'     => @total,
        'hits'      => @hits,
        'errors'    => @errors,
        'timeouts' => @timeouts,
        'volume'    => @volume,
        'txbytes'   => @txbytes,
        'rxbytes'   => @rxbytes,
        'steps'     => @steps,
      }.to_json
    end
  end

  # ...
# ...

  class Step
    def to_json(*args)
      {
        'duration' => @duration,
        'connect' => @connect,
        'errors'   => @errors,
        'timeouts' => @timeouts,
        'asserts' => @asserts,
      }.to_json
    end
  end
end
#!/usr/bin/env ruby
# load_test.rb

require 'blitz'

arguments = "--region singapore --pattern 1:250:60"
url       = "http://example.org/"
command   = "#{arguments} #{url}"

job     = Blitz::Curl.parse(command)
curl    = Blitz::Command::Curl.new
curl.rush(job)

puts job.result.timeline.to_json
{"start":1335694346,"finish":1335694367,"results":[{"timestamp":
2.502626,"duration":1.13912,"total":1,"hits":1,"errors":0,"timeouts":
0,"volume":2,"txbytes":258.0,"rxbytes":17810.0,"steps":[{"duration":
2.13912,"connect":0.260004,"errors":0,"timeouts":0,"asserts":0}]},
{"timestamp":5.016102,"duration":0.640047,"total":5,"hits":5,"errors":
0,"timeouts":0,"volume":4,"txbytes":1548.0,"rxbytes":90882.0,"steps":
[{"duration":1.640047,"connect":0.158944,"errors":0,"timeouts":
0,"asserts":0}]},{"timestamp":7.524594,"duration":0.639987,"total":
10,"hits":10,"errors":0,"timeouts":0,"volume":5,"txbytes":
3354.0,"rxbytes":182222.0,"steps":[{"duration":1.639987,"connect":
0.158999,"errors":0,"timeouts":0,"asserts":0}]},{"timestamp":
10.03388,"duration":0.63961,"total":20,"hits":20,"errors":0,"timeouts":
0,"volume":7,"txbytes":5418.0,"rxbytes":364902.0,"steps":[{"duration":
1.63961,"connect":0.158847,"errors":0,"timeouts":0,"asserts":0}]},
{"timestamp":12.543211,"duration":0.640421,"total":31,"hits":
31,"errors":0,"timeouts":0,"volume":9,"txbytes":9030.0,"rxbytes":
565850.0,"steps":[{"duration":1.640422,"connect":0.158767,"errors":
0,"timeouts":0,"asserts":0}]},{"timestamp":15.051705,"duration":
0.639894,"total":44,"hits":44,"errors":0,"timeouts":0,"volume":
10,"txbytes":12384.0,"rxbytes":803334.0,"steps":[{"duration":
1.639894,"connect":0.158794,"errors":0,"timeouts":0,"asserts":0}]},
{"timestamp":17.560136,"duration":-1.0,"total":44,"hits":44,"errors":
0,"timeouts":0,"volume":0,"txbytes":12384.0,"rxbytes":803334.0,"steps":
[{"duration":0.0,"connect":0.0,"errors":0,"timeouts":0,"asserts":0}]}]}
Do with as
you please
Here’s one I
prepared earlier..
Load testing with Blitz
...
You don’t have to
  set up a tool
But you have to
write reporting?
At least you
 have load
  testing?
It’s on the way..
http://support.blitz.io/discussions/questions/114-sharing-reports
Load testing with Blitz
Where to
from here?
Pull in data from
  other places
new relic
Ganglia/collectd
  Git commits
Github:
square/crossfilter
Load testing with Blitz
Don’t like Blitz?
SaaS
 Load impact
Browser mob
Open Source
    Tsung
   JMeter
Load testing with Blitz
Start Using
 something!
Low barrier of
 entry is key
Integrate with your
  existing dev tools
Load testing with Blitz
Questions?

More Related Content

PPT
PPTX
Performance and Load Testing
PDF
Load and Performance Testing for J2EE - Testing, monitoring and reporting usi...
PPT
Performance and load testing
PPTX
QSpiders - Introduction to HP Load Runner
PPTX
QSpiders - Simple Recording and Configuration of recording options for HP Loa...
PDF
LoadRunner Performance Testing
PPTX
QSpiders - Introduction to JMeter
Performance and Load Testing
Load and Performance Testing for J2EE - Testing, monitoring and reporting usi...
Performance and load testing
QSpiders - Introduction to HP Load Runner
QSpiders - Simple Recording and Configuration of recording options for HP Loa...
LoadRunner Performance Testing
QSpiders - Introduction to JMeter

What's hot (20)

PPT
Performance testing jmeter
PPTX
Performance Testing using LoadRunner
PPTX
Cloud Performance Testing with LoadRunner
PPTX
QSpiders - Introduction to Performance Testing
PPT
Advanced Load Runner
PPTX
Load Runner
PPTX
QA. Load Testing
PPTX
Performance Testing from Scratch + JMeter intro
PPT
Performance testing using hp load runner
PPT
Performance Testing With Loadrunner
PPT
Performance Testing
PPTX
How to make a Load Testing with Visual Studio 2012
PPT
Getting start with Performance Testing
PDF
LoadRunner walkthrough
PPTX
Performance Testing using LoadRunner - Kamran Khan [chromeis.com]
PPT
Performance Testing With Jmeter
PDF
Visual studio performance testing quick reference guide 3 6
PPTX
JMeter Database Performace Testing - Keytorc Approach
PPTX
Performance Testing Using VS 2010 - Part 1
PDF
Ginsbourg.com - Performance and Load Test Report Template LTR 1.5
Performance testing jmeter
Performance Testing using LoadRunner
Cloud Performance Testing with LoadRunner
QSpiders - Introduction to Performance Testing
Advanced Load Runner
Load Runner
QA. Load Testing
Performance Testing from Scratch + JMeter intro
Performance testing using hp load runner
Performance Testing With Loadrunner
Performance Testing
How to make a Load Testing with Visual Studio 2012
Getting start with Performance Testing
LoadRunner walkthrough
Performance Testing using LoadRunner - Kamran Khan [chromeis.com]
Performance Testing With Jmeter
Visual studio performance testing quick reference guide 3 6
JMeter Database Performace Testing - Keytorc Approach
Performance Testing Using VS 2010 - Part 1
Ginsbourg.com - Performance and Load Test Report Template LTR 1.5
Ad

Viewers also liked (16)

PPTX
Load Runner
PDF
Microservices_vs_SOA
PPT
Soap Vs Rest
PPTX
Load runner & win runner
PPT
Soap vs. rest - which is right web service protocol for your need?
PPTX
EMCW2015 - Containers vs VMs
PDF
REST vs. SOAP
PDF
Spring Web Services: SOAP vs. REST
PPTX
Introduction to performance testing
PDF
Microservices and SOA
PPTX
Containers and VMs and Clouds: Oh My. by Mike Coleman
PDF
Moving from Load Runner to Open Source: Increase Performance Test Coverage 10...
PPTX
EMC World 2015 - The Devops Toolkit
PPTX
Why Docker
PPT
Quick guide to plan and execute a load test
PDF
Docker 101: Introduction to Docker
Load Runner
Microservices_vs_SOA
Soap Vs Rest
Load runner & win runner
Soap vs. rest - which is right web service protocol for your need?
EMCW2015 - Containers vs VMs
REST vs. SOAP
Spring Web Services: SOAP vs. REST
Introduction to performance testing
Microservices and SOA
Containers and VMs and Clouds: Oh My. by Mike Coleman
Moving from Load Runner to Open Source: Increase Performance Test Coverage 10...
EMC World 2015 - The Devops Toolkit
Why Docker
Quick guide to plan and execute a load test
Docker 101: Introduction to Docker
Ad

Similar to Load testing with Blitz (20)

PPTX
Jenkins Online Meetup - Automated SLI based Build Validation with Keptn
ODP
Otimizando seu projeto Rails
PDF
Non-blocking I/O, Event loops and node.js
KEY
Socket applications
PDF
DevOps with Serverless
PDF
AWS Lambda from the trenches
KEY
fog or: How I Learned to Stop Worrying and Love the Cloud
PDF
Reactive Microservices with JRuby and Docker
PDF
DSLing your System For Scalability Testing Using Gatling - Dublin Scala User ...
KEY
How I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine Yard
KEY
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
PDF
Software as a Service workshop / Unlocked: the Hybrid Cloud 12th May 2014
PDF
clara-rules
PPTX
Real World Lessons on the Pain Points of Node.js Applications
PDF
Devoxx Maroc 2015 HTTP 1, HTTP 2 and folks
PDF
Presto anatomy
PDF
PipelineAI + TensorFlow AI + Spark ML + Kuberenetes + Istio + AWS SageMaker +...
PDF
Serverless in production, an experience report (FullStack 2018)
PPTX
A Guide to Event-Driven SRE-inspired DevOps
PPTX
Full Stack Load Testing
Jenkins Online Meetup - Automated SLI based Build Validation with Keptn
Otimizando seu projeto Rails
Non-blocking I/O, Event loops and node.js
Socket applications
DevOps with Serverless
AWS Lambda from the trenches
fog or: How I Learned to Stop Worrying and Love the Cloud
Reactive Microservices with JRuby and Docker
DSLing your System For Scalability Testing Using Gatling - Dublin Scala User ...
How I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine Yard
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
Software as a Service workshop / Unlocked: the Hybrid Cloud 12th May 2014
clara-rules
Real World Lessons on the Pain Points of Node.js Applications
Devoxx Maroc 2015 HTTP 1, HTTP 2 and folks
Presto anatomy
PipelineAI + TensorFlow AI + Spark ML + Kuberenetes + Istio + AWS SageMaker +...
Serverless in production, an experience report (FullStack 2018)
A Guide to Event-Driven SRE-inspired DevOps
Full Stack Load Testing

More from Lindsay Holmwood (12)

PDF
Escalating complexity: DevOps learnings from Air France 447
PDF
AA261: DevOps lessons in collaborative maintenance
PDF
Islands: Puppet at Bulletproof Networks
PDF
Latency: The Silent Monitoring System Killer
PDF
Rump - making Puppetmaster-less Puppet meaty
PDF
Behaviour driven infrastructure
PDF
Burn down the silos! Helping dev and ops gel on high availability websites
PDF
Behaviour Driven Monitoring with cucumber-nagios
PDF
Flapjack: rethinking monitoring for the cloud
PDF
Monitoring web application behaviour with cucumber-nagios
PDF
Your own (little) gem: building an online business with Ruby
PDF
Deploying Merb
Escalating complexity: DevOps learnings from Air France 447
AA261: DevOps lessons in collaborative maintenance
Islands: Puppet at Bulletproof Networks
Latency: The Silent Monitoring System Killer
Rump - making Puppetmaster-less Puppet meaty
Behaviour driven infrastructure
Burn down the silos! Helping dev and ops gel on high availability websites
Behaviour Driven Monitoring with cucumber-nagios
Flapjack: rethinking monitoring for the cloud
Monitoring web application behaviour with cucumber-nagios
Your own (little) gem: building an online business with Ruby
Deploying Merb

Recently uploaded (20)

PDF
KodekX | Application Modernization Development
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
GamePlan Trading System Review: Professional Trader's Honest Take
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Advanced Soft Computing BINUS July 2025.pdf
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PPTX
Big Data Technologies - Introduction.pptx
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
Empathic Computing: Creating Shared Understanding
PDF
Modernizing your data center with Dell and AMD
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
Approach and Philosophy of On baking technology
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
NewMind AI Monthly Chronicles - July 2025
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Electronic commerce courselecture one. Pdf
PPTX
breach-and-attack-simulation-cybersecurity-india-chennai-defenderrabbit-2025....
KodekX | Application Modernization Development
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Reach Out and Touch Someone: Haptics and Empathic Computing
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
GamePlan Trading System Review: Professional Trader's Honest Take
Chapter 3 Spatial Domain Image Processing.pdf
Advanced Soft Computing BINUS July 2025.pdf
CIFDAQ's Market Insight: SEC Turns Pro Crypto
Big Data Technologies - Introduction.pptx
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
Empathic Computing: Creating Shared Understanding
Modernizing your data center with Dell and AMD
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Approach and Philosophy of On baking technology
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
NewMind AI Monthly Chronicles - July 2025
Mobile App Security Testing_ A Comprehensive Guide.pdf
Electronic commerce courselecture one. Pdf
breach-and-attack-simulation-cybersecurity-india-chennai-defenderrabbit-2025....

Load testing with Blitz