Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias...

91
Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance Tests 1 / 26

Transcript of Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias...

Page 1: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Continuous Performance TestsDeveloper Conference 2012

Tobias Schlitt (@tobySen)Manuel Pichler (@manuelp)

September 7, 2012

Continuous Performance Tests 1 / 26

Page 2: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

About us

I Manuel & TobyI Degree in computer sienceI More than 10 years of

professional PHPI Open source enthusiastsI Contributing to various

FLOSS projects

Qafoopassion for software quality

Continuous Performance Tests 2 / 26

Page 3: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

About us

I Manuel & TobyI Degree in computer sienceI More than 10 years of

professional PHPI Open source enthusiastsI Contributing to various

FLOSS projects

Qafoopassion for software quality

Continuous Performance Tests 2 / 26

Page 4: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

About us

I Manuel & TobyI Degree in computer sienceI More than 10 years of

professional PHPI Open source enthusiastsI Contributing to various

FLOSS projects

Qafoopassion for software quality

Continuous Performance Tests 2 / 26

Page 5: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

About us

I Manuel & TobyI Degree in computer sienceI More than 10 years of

professional PHPI Open source enthusiastsI Contributing to various

FLOSS projects

Co-founders of

Qafoopassion for software quality

Continuous Performance Tests 2 / 26

Page 6: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

About us

I Manuel & TobyI Degree in computer sienceI More than 10 years of

professional PHPI Open source enthusiastsI Contributing to various

FLOSS projects

Co-founders of

Qafoopassion for software quality

Helping people to createhigh quality web

applications.

Continuous Performance Tests 2 / 26

Page 7: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

About us

I Manuel & TobyI Degree in computer sienceI More than 10 years of

professional PHPI Open source enthusiastsI Contributing to various

FLOSS projects

Co-founders of

Qafoopassion for software quality

Helping people to createhigh quality web

applications.

http://qafoo.com

Continuous Performance Tests 2 / 26

Page 8: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Outline

Motivation

Conclusion

Continuous Performance Tests 3 / 26

Page 9: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Motivation

I Why should we do performance tests?I Locate unknown bottlenecksI Mesaure behaviour of the full stack

I Why should we do that continuously?I Find performance regressionsI Ensure optimizations are persistent

Continuous Performance Tests 4 / 26

Page 10: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Motivation

I Why should we do performance tests?I Locate unknown bottlenecksI Mesaure behaviour of the full stack

I Why should we do that continuously?I Find performance regressionsI Ensure optimizations are persistent

Continuous Performance Tests 4 / 26

Page 11: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Motivation

I Why should we do performance tests?I Locate unknown bottlenecksI Mesaure behaviour of the full stack

I Why should we do that continuously?I Find performance regressionsI Ensure optimizations are persistent

Continuous Performance Tests 4 / 26

Page 12: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Motivation

I Why should we do performance tests?I Locate unknown bottlenecksI Mesaure behaviour of the full stack

I Why should we do that continuously?I Find performance regressionsI Ensure optimizations are persistent

Continuous Performance Tests 4 / 26

Page 13: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Often used tools

I Often misused toolsI siegeI ApacheBench (ab)

I Testing for micro-optimizationsI Evaluating Hello-World-examples of Frameworks

Continuous Performance Tests 5 / 26

Page 14: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Often used tools

I Often misused toolsI siegeI ApacheBench (ab)

I Testing for micro-optimizationsI Evaluating Hello-World-examples of Frameworks

Continuous Performance Tests 5 / 26

Page 15: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Often used tools

I Often misused toolsI siegeI ApacheBench (ab)

I Testing for micro-optimizationsI Evaluating Hello-World-examples of Frameworks

Continuous Performance Tests 5 / 26

Page 16: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Often used tools

I Often misused toolsI siegeI ApacheBench (ab)

I Testing for micro-optimizationsI Evaluating Hello-World-examples of Frameworks

Continuous Performance Tests 5 / 26

Page 17: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

The problem is more complex

I Your task: Create a new webshopI Assume it’s marchI The deadline is October this year, right before Christmas

Continuous Performance Tests 6 / 26

Page 18: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

The problem is more complex

I Your task: Create a new webshopI Assume it’s marchI The deadline is October this year, right before Christmas

Continuous Performance Tests 6 / 26

Page 19: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

The problem is more complex

I Your task: Create a new webshopI Assume it’s marchI The deadline is October this year, right before Christmas

Continuous Performance Tests 6 / 26

Page 20: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

A webshop

0 articles0.00 €Awesome Shop

Smartphone

1337,-- €5 items in stock

Lorem ipsum dolor sit amet,consectetur adipisicing elit,sed do eiusmod temporincididunt ut labore et doloremagna aliqua.

Comments

Lorem ipsum dolor sit amet, consecteturadipisicing elit, sed do eiusmod tempor.

Continuous Performance Tests 7 / 26

Page 21: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

A webshop

2 articles42.32 €

Continuous Performance Tests 7 / 26

Page 22: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

A webshop

Smartphone

1337,-- €5 items in stock

Lorem ipsum dolor sit amet,consectetur adipisicing elit,sed do eiusmod temporincididunt ut labore et doloremagna aliqua.

Continuous Performance Tests 7 / 26

Page 23: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

A webshop

Comments

Lorem ipsum dolor sit amet, consecteturadipisicing elit, sed do eiusmod tempor.

Continuous Performance Tests 7 / 26

Page 24: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

A webshop

1337,-- €5 items in stock

Continuous Performance Tests 7 / 26

Page 25: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

A real tool for performance tests

I JMeterI Complex user pathsI Concurrend requestsI Record on proxyI Clustering

Continuous Performance Tests 8 / 26

Page 26: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

A real tool for performance tests

I JMeterI Complex user pathsI Concurrend requestsI Record on proxyI Clustering

Continuous Performance Tests 8 / 26

Page 27: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

A real tool for performance tests

I JMeterI Complex user pathsI Concurrend requestsI Record on proxyI Clustering

Continuous Performance Tests 8 / 26

Page 28: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

A real tool for performance tests

I JMeterI Complex user pathsI Concurrend requestsI Record on proxyI Clustering

Continuous Performance Tests 8 / 26

Page 29: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

A real tool for performance tests

I JMeterI Complex user pathsI Concurrend requestsI Record on proxyI Clustering

Continuous Performance Tests 8 / 26

Page 30: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

JMeter 101

I Thread GroupI ControllerI Config ElementI TimerI Sampler

Continuous Performance Tests 9 / 26

Page 31: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Getting started

I Create a test planI What do users actually do on your site?

I Example:I Random browserI User registrationI Sign onI Shopping with checkoutI Commenting products

Continuous Performance Tests 10 / 26

Page 32: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Getting started

I Create a test planI What do users actually do on your site?

I Example:I Random browserI User registrationI Sign onI Shopping with checkoutI Commenting products

Continuous Performance Tests 10 / 26

Page 33: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Using JMeter

Demo

Continuous Performance Tests 11 / 26

Page 34: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Automation

I Ant JMeter integrationI Automation of your environment

I Setting up different software versionsI Testing with different extensionsI Running different database setupsI Handling multi-node environmentsI Plain Ant or Puppet, Chef, Vagrant

Continuous Performance Tests 12 / 26

Page 35: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Automation

I Ant JMeter integrationI Automation of your environment

I Setting up different software versionsI Testing with different extensionsI Running different database setupsI Handling multi-node environmentsI Plain Ant or Puppet, Chef, Vagrant

Continuous Performance Tests 12 / 26

Page 36: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Automation

I Ant JMeter integrationI Automation of your environment

I Setting up different software versionsI Testing with different extensionsI Running different database setupsI Handling multi-node environmentsI Plain Ant or Puppet, Chef, Vagrant

Continuous Performance Tests 12 / 26

Page 37: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Automation

I Ant JMeter integrationI Automation of your environment

I Setting up different software versionsI Testing with different extensionsI Running different database setupsI Handling multi-node environmentsI Plain Ant or Puppet, Chef, Vagrant

Continuous Performance Tests 12 / 26

Page 38: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Automation

I Ant JMeter integrationI Automation of your environment

I Setting up different software versionsI Testing with different extensionsI Running different database setupsI Handling multi-node environmentsI Plain Ant or Puppet, Chef, Vagrant

Continuous Performance Tests 12 / 26

Page 39: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Automation

I Ant JMeter integrationI Automation of your environment

I Setting up different software versionsI Testing with different extensionsI Running different database setupsI Handling multi-node environmentsI Plain Ant or Puppet, Chef, Vagrant

Continuous Performance Tests 12 / 26

Page 40: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Automation

I Ant JMeter integrationI Automation of your environment

I Setting up different software versionsI Testing with different extensionsI Running different database setupsI Handling multi-node environmentsI Plain Ant or Puppet, Chef, Vagrant

Continuous Performance Tests 12 / 26

Page 41: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Apache Ant example

26 < t a r g e t name= ” bu i ld −apc−bytecode−cache−user−cache− f i l e ”27 depends= ” setup−apc−bytecode− f i l e −cache , −b u i l d ”28 d e s c r i p t i o n = ”−> Run wi th APC opcode cache and f i l e based cache . ” />2930 < t a r g e t name= ” bu i ld −apc−bytecode−cache−user−cache−apc ”31 depends= ” setup−apc−bytecode−apc−cache , −b u i l d ”32 d e s c r i p t i o n = ”−> Run wi th APC opcode cache and APC based cache . ” />

211 < t a r g e t name= ”−remote−exec−p a r a l l e l ”>212 <subant t a r g e t = ” $ { t a r g e t } ” i n h e r i t a l l = ” t r ue ”>213 < f i l e s e t d i r = ” $ { p r o j e c t . d i r } ” i nc ludes= ” server ∗ . xml ” />214 </ subant>215 </ t a rge t >216217 < t a r g e t name= ”−remote−exec ”>218 <sshexec command= ” $ {command} ”219 username= ” $ { ssh . username } ”220 password= ” $ { ssh . password } ”221 host= ” $ { hostname } ”222 t r u s t = ” t r ue ” />223 </ t a rge t >

Continuous Performance Tests 13 / 26

Page 42: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Apache Ant example

26 < t a r g e t name= ” bu i ld −apc−bytecode−cache−user−cache− f i l e ”27 depends= ” setup−apc−bytecode− f i l e −cache , −b u i l d ”28 d e s c r i p t i o n = ”−> Run wi th APC opcode cache and f i l e based cache . ” />2930 < t a r g e t name= ” bu i ld −apc−bytecode−cache−user−cache−apc ”31 depends= ” setup−apc−bytecode−apc−cache , −b u i l d ”32 d e s c r i p t i o n = ”−> Run wi th APC opcode cache and APC based cache . ” />

211 < t a r g e t name= ”−remote−exec−p a r a l l e l ”>212 <subant t a r g e t = ” $ { t a r g e t } ” i n h e r i t a l l = ” t r ue ”>213 < f i l e s e t d i r = ” $ { p r o j e c t . d i r } ” i nc ludes= ” server ∗ . xml ” />214 </ subant>215 </ t a rge t >216217 < t a r g e t name= ”−remote−exec ”>218 <sshexec command= ” $ {command} ”219 username= ” $ { ssh . username } ”220 password= ” $ { ssh . password } ”221 host= ” $ { hostname } ”222 t r u s t = ” t r ue ” />223 </ t a rge t >

Continuous Performance Tests 13 / 26

Page 43: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Apache Ant example

26 < t a r g e t name= ” bu i ld −apc−bytecode−cache−user−cache− f i l e ”27 depends= ” setup−apc−bytecode− f i l e −cache , −b u i l d ”28 d e s c r i p t i o n = ”−> Run wi th APC opcode cache and f i l e based cache . ” />2930 < t a r g e t name= ” bu i ld −apc−bytecode−cache−user−cache−apc ”31 depends= ” setup−apc−bytecode−apc−cache , −b u i l d ”32 d e s c r i p t i o n = ”−> Run wi th APC opcode cache and APC based cache . ” />

211 < t a r g e t name= ”−remote−exec−p a r a l l e l ”>212 <subant t a r g e t = ” $ { t a r g e t } ” i n h e r i t a l l = ” t r ue ”>213 < f i l e s e t d i r = ” $ { p r o j e c t . d i r } ” i nc ludes= ” server ∗ . xml ” />214 </ subant>215 </ t a rge t >216217 < t a r g e t name= ”−remote−exec ”>218 <sshexec command= ” $ {command} ”219 username= ” $ { ssh . username } ”220 password= ” $ { ssh . password } ”221 host= ” $ { hostname } ”222 t r u s t = ” t r ue ” />223 </ t a rge t >

Continuous Performance Tests 13 / 26

Page 44: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Apache Ant example

26 < t a r g e t name= ” bu i ld −apc−bytecode−cache−user−cache− f i l e ”27 depends= ” setup−apc−bytecode− f i l e −cache , −b u i l d ”28 d e s c r i p t i o n = ”−> Run wi th APC opcode cache and f i l e based cache . ” />2930 < t a r g e t name= ” bu i ld −apc−bytecode−cache−user−cache−apc ”31 depends= ” setup−apc−bytecode−apc−cache , −b u i l d ”32 d e s c r i p t i o n = ”−> Run wi th APC opcode cache and APC based cache . ” />

211 < t a r g e t name= ”−remote−exec−p a r a l l e l ”>212 <subant t a r g e t = ” $ { t a r g e t } ” i n h e r i t a l l = ” t r ue ”>213 < f i l e s e t d i r = ” $ { p r o j e c t . d i r } ” i nc ludes= ” server ∗ . xml ” />214 </ subant>215 </ t a rge t >216217 < t a r g e t name= ”−remote−exec ”>218 <sshexec command= ” $ {command} ”219 username= ” $ { ssh . username } ”220 password= ” $ { ssh . password } ”221 host= ” $ { hostname } ”222 t r u s t = ” t r ue ” />223 </ t a rge t >

Continuous Performance Tests 13 / 26

Page 45: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Apache Ant example

26 < t a r g e t name= ” bu i ld −apc−bytecode−cache−user−cache− f i l e ”27 depends= ” setup−apc−bytecode− f i l e −cache , −b u i l d ”28 d e s c r i p t i o n = ”−> Run wi th APC opcode cache and f i l e based cache . ” />2930 < t a r g e t name= ” bu i ld −apc−bytecode−cache−user−cache−apc ”31 depends= ” setup−apc−bytecode−apc−cache , −b u i l d ”32 d e s c r i p t i o n = ”−> Run wi th APC opcode cache and APC based cache . ” />

211 < t a r g e t name= ”−remote−exec−p a r a l l e l ”>212 <subant t a r g e t = ” $ { t a r g e t } ” i n h e r i t a l l = ” t r ue ”>213 < f i l e s e t d i r = ” $ { p r o j e c t . d i r } ” i nc ludes= ” server ∗ . xml ” />214 </ subant>215 </ t a rge t >216217 < t a r g e t name= ”−remote−exec ”>218 <sshexec command= ” $ {command} ”219 username= ” $ { ssh . username } ”220 password= ” $ { ssh . password } ”221 host= ” $ { hostname } ”222 t r u s t = ” t r ue ” />223 </ t a rge t >

Continuous Performance Tests 13 / 26

Page 46: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Apache Ant example

454 < t a r g e t name= ”− r e s t a r t −host ”>455 <a n t c a l l t a r g e t = ”−remote−exec ”>456 <param name= ”command” value= ” shutdown − r now” />457 </ a n t c a l l >458459 <echo taskname= ” w a i t f o r ” message= ” Wait f o r $ { hostname } to stop . . . ” />460 <w a i t f o r maxwait= ” 5 ” maxwai tun i t= ” minute ” checkevery= ” 100 ”>461 <not>462 <h t t p u r l = ” h t t p : / / $ { hostname } ” />463 </ not>464 </ wa i t f o r >465466 <echo taskname= ” w a i t f o r ” message= ” Wait f o r $ { hostname } i s up again . . . ” />467 <w a i t f o r maxwait= ” 5 ” maxwai tun i t= ” minute ” checkevery= ” 100 ”>468 <h t t p u r l = ” h t t p : / / $ { hostname } ” />469 </ wa i t f o r >470 </ t a rge t >

Continuous Performance Tests 14 / 26

Page 47: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Apache Ant example

454 < t a r g e t name= ”− r e s t a r t −host ”>455 <a n t c a l l t a r g e t = ”−remote−exec ”>456 <param name= ”command” value= ” shutdown − r now” />457 </ a n t c a l l >458459 <echo taskname= ” w a i t f o r ” message= ” Wait f o r $ { hostname } to stop . . . ” />460 <w a i t f o r maxwait= ” 5 ” maxwai tun i t= ” minute ” checkevery= ” 100 ”>461 <not>462 <h t t p u r l = ” h t t p : / / $ { hostname } ” />463 </ not>464 </ wa i t f o r >465466 <echo taskname= ” w a i t f o r ” message= ” Wait f o r $ { hostname } i s up again . . . ” />467 <w a i t f o r maxwait= ” 5 ” maxwai tun i t= ” minute ” checkevery= ” 100 ”>468 <h t t p u r l = ” h t t p : / / $ { hostname } ” />469 </ wa i t f o r >470 </ t a rge t >

Continuous Performance Tests 14 / 26

Page 48: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Apache Ant example

454 < t a r g e t name= ”− r e s t a r t −host ”>455 <a n t c a l l t a r g e t = ”−remote−exec ”>456 <param name= ”command” value= ” shutdown − r now” />457 </ a n t c a l l >458459 <echo taskname= ” w a i t f o r ” message= ” Wait f o r $ { hostname } to stop . . . ” />460 <w a i t f o r maxwait= ” 5 ” maxwai tun i t= ” minute ” checkevery= ” 100 ”>461 <not>462 <h t t p u r l = ” h t t p : / / $ { hostname } ” />463 </ not>464 </ wa i t f o r >465466 <echo taskname= ” w a i t f o r ” message= ” Wait f o r $ { hostname } i s up again . . . ” />467 <w a i t f o r maxwait= ” 5 ” maxwai tun i t= ” minute ” checkevery= ” 100 ”>468 <h t t p u r l = ” h t t p : / / $ { hostname } ” />469 </ wa i t f o r >470 </ t a rge t >

Continuous Performance Tests 14 / 26

Page 49: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Apache Ant example

454 < t a r g e t name= ”− r e s t a r t −host ”>455 <a n t c a l l t a r g e t = ”−remote−exec ”>456 <param name= ”command” value= ” shutdown − r now” />457 </ a n t c a l l >458459 <echo taskname= ” w a i t f o r ” message= ” Wait f o r $ { hostname } to stop . . . ” />460 <w a i t f o r maxwait= ” 5 ” maxwai tun i t= ” minute ” checkevery= ” 100 ”>461 <not>462 <h t t p u r l = ” h t t p : / / $ { hostname } ” />463 </ not>464 </ wa i t f o r >465466 <echo taskname= ” w a i t f o r ” message= ” Wait f o r $ { hostname } i s up again . . . ” />467 <w a i t f o r maxwait= ” 5 ” maxwai tun i t= ” minute ” checkevery= ” 100 ”>468 <h t t p u r l = ” h t t p : / / $ { hostname } ” />469 </ wa i t f o r >470 </ t a rge t >

Continuous Performance Tests 14 / 26

Page 50: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Apache Ant example

421 < t a r g e t name= ” jmeter ” depends= ”−se t t i ngs − i n i t ,− s t a r t − jmeter ” />422423 < t a r g e t name= ”−s t a r t − jmeter ”>424 <a n t c a l l t a r g e t = ”−s t a r t − jmeter−before−hook ” />425426 < jmeter jmeterhome= ” $ { l o c a l . jmeter . home . d i r } ”427 r e s u l t l o g = ” $ { l o c a l . jmeter . log . f i l e } ”428 t e s t p l a n = ” $ { l o c a l . jmeter . t e s t . d i r } / $ { jmeter . f i l e } ”>429430 <proper ty name= ” jmeter . data . d i r ” value= ” $ { l o c a l . p r o j e c t . data . d i r } ” />431 <proper ty name= ” jmeter . rampup . t ime ” value= ” $ { jmeter . rampup . t ime } ” />432 <proper ty name= ” jmeter . execut ion . t ime ” value= ” $ { jmeter . execut ion . t ime } ” />433 </ jmeter>434435 <a n t c a l l t a r g e t = ”−s t a r t − jmeter−a f t e r −hook ” />436 </ t a rge t >

Continuous Performance Tests 15 / 26

Page 51: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Apache Ant example

421 < t a r g e t name= ” jmeter ” depends= ”−se t t i ngs − i n i t ,− s t a r t − jmeter ” />422423 < t a r g e t name= ”−s t a r t − jmeter ”>424 <a n t c a l l t a r g e t = ”−s t a r t − jmeter−before−hook ” />425426 < jmeter jmeterhome= ” $ { l o c a l . jmeter . home . d i r } ”427 r e s u l t l o g = ” $ { l o c a l . jmeter . log . f i l e } ”428 t e s t p l a n = ” $ { l o c a l . jmeter . t e s t . d i r } / $ { jmeter . f i l e } ”>429430 <proper ty name= ” jmeter . data . d i r ” value= ” $ { l o c a l . p r o j e c t . data . d i r } ” />431 <proper ty name= ” jmeter . rampup . t ime ” value= ” $ { jmeter . rampup . t ime } ” />432 <proper ty name= ” jmeter . execut ion . t ime ” value= ” $ { jmeter . execut ion . t ime } ” />433 </ jmeter>434435 <a n t c a l l t a r g e t = ”−s t a r t − jmeter−a f t e r −hook ” />436 </ t a rge t >

Continuous Performance Tests 15 / 26

Page 52: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Apache Ant example

351 < t a r g e t name= ”−backup−data−from−host ”>352 <scp r e m o t e f i l e = ” $ { ssh . username } : $ { ssh . password }@${ hostname } : ’ $ { remote . webserver .

e r r o r . log } ’ ”353 l o c a l t o f i l e = ” $ { l o c a l . b u i l d d i r } / $ { hostname}− e r r o r . log ”354 t r u s t = ” t r ue ” />355356 <scp r e m o t e f i l e = ” $ { ssh . username } : $ { ssh . password }@${ hostname } : ’ $ { remote . webserver .

access . log } ’ ”357 l o c a l t o f i l e = ” $ { l o c a l . b u i l d d i r } / $ { hostname}−access . log ”358 t r u s t = ” t r ue ” />359360 <scp r e m o t e f i l e = ” $ { ssh . username } : $ { ssh . password }@${ hostname } : ’ $ { remote . php . e r r o r .

log } ’ ”361 l o c a l t o f i l e = ” $ { l o c a l . b u i l d d i r } / $ { hostname}− php er ro rs . log ”362 t r u s t = ” t r ue ” />363364 <scp r e m o t e f i l e = ” $ { ssh . username } : $ { ssh . password }@${ hostname } : ’ $ { remote . based i r } /

s c r i p t s / load . log ’ ”365 l o c a l t o f i l e = ” $ { l o c a l . b u i l d d i r } / $ { hostname}− load . log ”366 t r u s t = ” t r ue ” />367368 </ t a rge t >

Continuous Performance Tests 16 / 26

Page 53: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Apache Ant example

351 < t a r g e t name= ”−backup−data−from−host ”>352 <scp r e m o t e f i l e = ” $ { ssh . username } : $ { ssh . password }@${ hostname } : ’ $ { remote . webserver .

e r r o r . log } ’ ”353 l o c a l t o f i l e = ” $ { l o c a l . b u i l d d i r } / $ { hostname}− e r r o r . log ”354 t r u s t = ” t r ue ” />355356 <scp r e m o t e f i l e = ” $ { ssh . username } : $ { ssh . password }@${ hostname } : ’ $ { remote . webserver .

access . log } ’ ”357 l o c a l t o f i l e = ” $ { l o c a l . b u i l d d i r } / $ { hostname}−access . log ”358 t r u s t = ” t r ue ” />359360 <scp r e m o t e f i l e = ” $ { ssh . username } : $ { ssh . password }@${ hostname } : ’ $ { remote . php . e r r o r .

log } ’ ”361 l o c a l t o f i l e = ” $ { l o c a l . b u i l d d i r } / $ { hostname}− php er ro rs . log ”362 t r u s t = ” t r ue ” />363364 <scp r e m o t e f i l e = ” $ { ssh . username } : $ { ssh . password }@${ hostname } : ’ $ { remote . based i r } /

s c r i p t s / load . log ’ ”365 l o c a l t o f i l e = ” $ { l o c a l . b u i l d d i r } / $ { hostname}− load . log ”366 t r u s t = ” t r ue ” />367368 </ t a rge t >

Continuous Performance Tests 16 / 26

Page 54: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Apache Ant example

351 < t a r g e t name= ”−backup−data−from−host ”>352 <scp r e m o t e f i l e = ” $ { ssh . username } : $ { ssh . password }@${ hostname } : ’ $ { remote . webserver .

e r r o r . log } ’ ”353 l o c a l t o f i l e = ” $ { l o c a l . b u i l d d i r } / $ { hostname}− e r r o r . log ”354 t r u s t = ” t r ue ” />355356 <scp r e m o t e f i l e = ” $ { ssh . username } : $ { ssh . password }@${ hostname } : ’ $ { remote . webserver .

access . log } ’ ”357 l o c a l t o f i l e = ” $ { l o c a l . b u i l d d i r } / $ { hostname}−access . log ”358 t r u s t = ” t r ue ” />359360 <scp r e m o t e f i l e = ” $ { ssh . username } : $ { ssh . password }@${ hostname } : ’ $ { remote . php . e r r o r .

log } ’ ”361 l o c a l t o f i l e = ” $ { l o c a l . b u i l d d i r } / $ { hostname}− php er ro rs . log ”362 t r u s t = ” t r ue ” />363364 <scp r e m o t e f i l e = ” $ { ssh . username } : $ { ssh . password }@${ hostname } : ’ $ { remote . based i r } /

s c r i p t s / load . log ’ ”365 l o c a l t o f i l e = ” $ { l o c a l . b u i l d d i r } / $ { hostname}− load . log ”366 t r u s t = ” t r ue ” />367368 </ t a rge t >

Continuous Performance Tests 16 / 26

Page 55: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Apache Ant example

351 < t a r g e t name= ”−backup−data−from−host ”>352 <scp r e m o t e f i l e = ” $ { ssh . username } : $ { ssh . password }@${ hostname } : ’ $ { remote . webserver .

e r r o r . log } ’ ”353 l o c a l t o f i l e = ” $ { l o c a l . b u i l d d i r } / $ { hostname}− e r r o r . log ”354 t r u s t = ” t r ue ” />355356 <scp r e m o t e f i l e = ” $ { ssh . username } : $ { ssh . password }@${ hostname } : ’ $ { remote . webserver .

access . log } ’ ”357 l o c a l t o f i l e = ” $ { l o c a l . b u i l d d i r } / $ { hostname}−access . log ”358 t r u s t = ” t r ue ” />359360 <scp r e m o t e f i l e = ” $ { ssh . username } : $ { ssh . password }@${ hostname } : ’ $ { remote . php . e r r o r .

log } ’ ”361 l o c a l t o f i l e = ” $ { l o c a l . b u i l d d i r } / $ { hostname}− php er ro rs . log ”362 t r u s t = ” t r ue ” />363364 <scp r e m o t e f i l e = ” $ { ssh . username } : $ { ssh . password }@${ hostname } : ’ $ { remote . based i r } /

s c r i p t s / load . log ’ ”365 l o c a l t o f i l e = ” $ { l o c a l . b u i l d d i r } / $ { hostname}− load . log ”366 t r u s t = ” t r ue ” />367368 </ t a rge t >

Continuous Performance Tests 16 / 26

Page 56: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Apache Ant example

351 < t a r g e t name= ”−backup−data−from−host ”>352 <scp r e m o t e f i l e = ” $ { ssh . username } : $ { ssh . password }@${ hostname } : ’ $ { remote . webserver .

e r r o r . log } ’ ”353 l o c a l t o f i l e = ” $ { l o c a l . b u i l d d i r } / $ { hostname}− e r r o r . log ”354 t r u s t = ” t r ue ” />355356 <scp r e m o t e f i l e = ” $ { ssh . username } : $ { ssh . password }@${ hostname } : ’ $ { remote . webserver .

access . log } ’ ”357 l o c a l t o f i l e = ” $ { l o c a l . b u i l d d i r } / $ { hostname}−access . log ”358 t r u s t = ” t r ue ” />359360 <scp r e m o t e f i l e = ” $ { ssh . username } : $ { ssh . password }@${ hostname } : ’ $ { remote . php . e r r o r .

log } ’ ”361 l o c a l t o f i l e = ” $ { l o c a l . b u i l d d i r } / $ { hostname}− php er ro rs . log ”362 t r u s t = ” t r ue ” />363364 <scp r e m o t e f i l e = ” $ { ssh . username } : $ { ssh . password }@${ hostname } : ’ $ { remote . based i r } /

s c r i p t s / load . log ’ ”365 l o c a l t o f i l e = ” $ { l o c a l . b u i l d d i r } / $ { hostname}− load . log ”366 t r u s t = ” t r ue ” />367368 </ t a rge t >

Continuous Performance Tests 16 / 26

Page 57: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Ant 2.0

78 <commons . s c r i p t d e f name= ” p a r a l l e l . extension−po in t ” language= ” j a v a s c r i p t ”>79 <a t t r i b u t e name= ” t a r g e t ” / > < ! [CDATA[80 var t a r g e t s = p r o j e c t . getTargets ( ) ;81 var dependencies = t a r g e t s . get (82 a t t r i b u t e s . get ( ” t a r g e t ” )83 ) . getDependencies ( ) ;8485 var p a r a l l e l = p r o j e c t . createTask ( ” p a r a l l e l ” ) ;86 while ( dependencies . hasMoreElements ( ) ) {87 ( function ( dependency ) {88 var t a r g e t = t a r g e t s . get ( dependency ) ;89 var task = p r o j e c t . createTask ( ” a n t c a l l ” ) ;90 task . se tTarget ( t a r g e t ) ;91 p a r a l l e l . addTask ( task ) ;92 } ) ( dependencies . nextElement ( ) ) ;9394 s e l f . p r o j e c t . se tProper ty ( ’commons . s c r i p t d e f . f a i l e d ’ , fa lse ) ;95 t ry {

96 p a r a l l e l . perform ( ) ;97 } catch ( e ) {98 s e l f . p r o j e c t . se tProper ty ( ’commons . s c r i p t d e f . f a i l e d ’ , true ) ;99 }

100 } ] ] >101 </commons . s c r i p t d e f >

Continuous Performance Tests 17 / 26

Page 58: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Hardware

I Test in a realistic environmentI If your software runs in the cloud test against virtual

environmentI If you use real hardware, also test against real hardware

I JMeter might have serious hardware requirementsI Use real hardwareI Use the biggest VM availableI Ensure that not the JMeter hardware is the bottleneck

I Be sure that the network is not the bottleneckI See ifstat, iftop

I Measure several system metricsI See vmstat, top

Continuous Performance Tests 18 / 26

Page 59: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Hardware

I Test in a realistic environmentI If your software runs in the cloud test against virtual

environmentI If you use real hardware, also test against real hardware

I JMeter might have serious hardware requirementsI Use real hardwareI Use the biggest VM availableI Ensure that not the JMeter hardware is the bottleneck

I Be sure that the network is not the bottleneckI See ifstat, iftop

I Measure several system metricsI See vmstat, top

Continuous Performance Tests 18 / 26

Page 60: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Hardware

I Test in a realistic environmentI If your software runs in the cloud test against virtual

environmentI If you use real hardware, also test against real hardware

I JMeter might have serious hardware requirementsI Use real hardwareI Use the biggest VM availableI Ensure that not the JMeter hardware is the bottleneck

I Be sure that the network is not the bottleneckI See ifstat, iftop

I Measure several system metricsI See vmstat, top

Continuous Performance Tests 18 / 26

Page 61: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Hardware

I Test in a realistic environmentI If your software runs in the cloud test against virtual

environmentI If you use real hardware, also test against real hardware

I JMeter might have serious hardware requirementsI Use real hardwareI Use the biggest VM availableI Ensure that not the JMeter hardware is the bottleneck

I Be sure that the network is not the bottleneckI See ifstat, iftop

I Measure several system metricsI See vmstat, top

Continuous Performance Tests 18 / 26

Page 62: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Hardware

I Test in a realistic environmentI If your software runs in the cloud test against virtual

environmentI If you use real hardware, also test against real hardware

I JMeter might have serious hardware requirementsI Use real hardwareI Use the biggest VM availableI Ensure that not the JMeter hardware is the bottleneck

I Be sure that the network is not the bottleneckI See ifstat, iftop

I Measure several system metricsI See vmstat, top

Continuous Performance Tests 18 / 26

Page 63: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Hardware

I Test in a realistic environmentI If your software runs in the cloud test against virtual

environmentI If you use real hardware, also test against real hardware

I JMeter might have serious hardware requirementsI Use real hardwareI Use the biggest VM availableI Ensure that not the JMeter hardware is the bottleneck

I Be sure that the network is not the bottleneckI See ifstat, iftop

I Measure several system metricsI See vmstat, top

Continuous Performance Tests 18 / 26

Page 64: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Hardware

I Test in a realistic environmentI If your software runs in the cloud test against virtual

environmentI If you use real hardware, also test against real hardware

I JMeter might have serious hardware requirementsI Use real hardwareI Use the biggest VM availableI Ensure that not the JMeter hardware is the bottleneck

I Be sure that the network is not the bottleneckI See ifstat, iftop

I Measure several system metricsI See vmstat, top

Continuous Performance Tests 18 / 26

Page 65: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Hardware

I Test in a realistic environmentI If your software runs in the cloud test against virtual

environmentI If you use real hardware, also test against real hardware

I JMeter might have serious hardware requirementsI Use real hardwareI Use the biggest VM availableI Ensure that not the JMeter hardware is the bottleneck

I Be sure that the network is not the bottleneckI See ifstat, iftop

I Measure several system metricsI See vmstat, top

Continuous Performance Tests 18 / 26

Page 66: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Extended system metrics

Response time

Minimum Average Maximum

00:00 05:00 09:00 13:00 17:00 21:00 01:00

Seconds

25

50

75

Requests per second

Average

00:00 05:00 09:00 13:00 17:00 21:00 01:00

R/s

100

200

300

CPU usage

System User

05:00 09:00 13:00 17:00 21:00 01:00 05:00

Percent

25

50

75

100

Memory usage

Used Memory Shared Cached

05:00 09:00 13:00 17:00 21:00 01:00 05:00

Percent

25

50

75

100

Continuous Performance Tests 19 / 26

Page 67: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Continuous Performance

I JenkinsI Plugin available

I SonarI JMeter Plugin available

Continuous Performance Tests 20 / 26

Page 68: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Continuous Performance

I JenkinsI Plugin available

I SonarI JMeter Plugin available

Continuous Performance Tests 20 / 26

Page 69: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Continuous Performance

I JenkinsI Plugin available

I SonarI JMeter Plugin available

Continuous Performance Tests 20 / 26

Page 70: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Continuous Performance

I JenkinsI Plugin available

I SonarI JMeter Plugin available

Continuous Performance Tests 20 / 26

Page 71: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Continuous testing with Jenkins

Demo

Continuous Performance Tests 21 / 26

Page 72: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Getting realistic settings

I Your customer usually only knows his AGOV/IVW values, like:I 1.000.000 PIs per monthI 30.000 sold articles per monthI 45.000 registrations per month

I Believe us, you will get nothing more :-)I Ask for access statistics before Christmas and the ratio

compared with regular monthsI Ask for hours with the highest conversion ratesI Maybe get the aggregated access logs from existing similar

shops

Continuous Performance Tests 22 / 26

Page 73: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Getting realistic settings

I Your customer usually only knows his AGOV/IVW values, like:I 1.000.000 PIs per monthI 30.000 sold articles per monthI 45.000 registrations per month

I Believe us, you will get nothing more :-)I Ask for access statistics before Christmas and the ratio

compared with regular monthsI Ask for hours with the highest conversion ratesI Maybe get the aggregated access logs from existing similar

shops

Continuous Performance Tests 22 / 26

Page 74: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Getting realistic settings

I Your customer usually only knows his AGOV/IVW values, like:I 1.000.000 PIs per monthI 30.000 sold articles per monthI 45.000 registrations per month

I Believe us, you will get nothing more :-)I Ask for access statistics before Christmas and the ratio

compared with regular monthsI Ask for hours with the highest conversion ratesI Maybe get the aggregated access logs from existing similar

shops

Continuous Performance Tests 22 / 26

Page 75: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Getting realistic settings

I Your customer usually only knows his AGOV/IVW values, like:I 1.000.000 PIs per monthI 30.000 sold articles per monthI 45.000 registrations per month

I Believe us, you will get nothing more :-)I Ask for access statistics before Christmas and the ratio

compared with regular monthsI Ask for hours with the highest conversion ratesI Maybe get the aggregated access logs from existing similar

shops

Continuous Performance Tests 22 / 26

Page 76: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Getting realistic settings

I Your customer usually only knows his AGOV/IVW values, like:I 1.000.000 PIs per monthI 30.000 sold articles per monthI 45.000 registrations per month

I Believe us, you will get nothing more :-)I Ask for access statistics before Christmas and the ratio

compared with regular monthsI Ask for hours with the highest conversion ratesI Maybe get the aggregated access logs from existing similar

shops

Continuous Performance Tests 22 / 26

Page 77: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Getting realistic settings

I Your customer usually only knows his AGOV/IVW values, like:I 1.000.000 PIs per monthI 30.000 sold articles per monthI 45.000 registrations per month

I Believe us, you will get nothing more :-)I Ask for access statistics before Christmas and the ratio

compared with regular monthsI Ask for hours with the highest conversion ratesI Maybe get the aggregated access logs from existing similar

shops

Continuous Performance Tests 22 / 26

Page 78: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Example calculation

I Customer provided values, for a classic webshop:I 1.000.000 PIs per monthI 30.000 sold articles per monthI 45.000 registrations per month

I Per day: 1.000.000/26 = 38.500 (non-business)I Per hour: 38.500/12 = 3.200 (national shop)I Peak hour: 3.200 ∗ 8 = 25.500 (18:00 to 19:00)I Per second: 25.500/3600 = 7PI/sI Add Christmas / Easter bonusI Add launch bonusI So . . . 50 PI/s should be safe?

I Spare resources for scaling are always a business decisionI Provide with trade-off: Costs vs. downtime / slownessI Fail gracefully

Continuous Performance Tests 23 / 26

Page 79: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Example calculation

I Customer provided values, for a classic webshop:I 1.000.000 PIs per monthI 30.000 sold articles per monthI 45.000 registrations per month

I Per day: 1.000.000/26 = 38.500 (non-business)I Per hour: 38.500/12 = 3.200 (national shop)I Peak hour: 3.200 ∗ 8 = 25.500 (18:00 to 19:00)I Per second: 25.500/3600 = 7PI/sI Add Christmas / Easter bonusI Add launch bonusI So . . . 50 PI/s should be safe?

I Spare resources for scaling are always a business decisionI Provide with trade-off: Costs vs. downtime / slownessI Fail gracefully

Continuous Performance Tests 23 / 26

Page 80: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Example calculation

I Customer provided values, for a classic webshop:I 1.000.000 PIs per monthI 30.000 sold articles per monthI 45.000 registrations per month

I Per day: 1.000.000/26 = 38.500 (non-business)I Per hour: 38.500/12 = 3.200 (national shop)I Peak hour: 3.200 ∗ 8 = 25.500 (18:00 to 19:00)I Per second: 25.500/3600 = 7PI/sI Add Christmas / Easter bonusI Add launch bonusI So . . . 50 PI/s should be safe?

I Spare resources for scaling are always a business decisionI Provide with trade-off: Costs vs. downtime / slownessI Fail gracefully

Continuous Performance Tests 23 / 26

Page 81: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Example calculation

I Customer provided values, for a classic webshop:I 1.000.000 PIs per monthI 30.000 sold articles per monthI 45.000 registrations per month

I Per day: 1.000.000/26 = 38.500 (non-business)I Per hour: 38.500/12 = 3.200 (national shop)I Peak hour: 3.200 ∗ 8 = 25.500 (18:00 to 19:00)I Per second: 25.500/3600 = 7PI/sI Add Christmas / Easter bonusI Add launch bonusI So . . . 50 PI/s should be safe?

I Spare resources for scaling are always a business decisionI Provide with trade-off: Costs vs. downtime / slownessI Fail gracefully

Continuous Performance Tests 23 / 26

Page 82: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Example calculation

I Customer provided values, for a classic webshop:I 1.000.000 PIs per monthI 30.000 sold articles per monthI 45.000 registrations per month

I Per day: 1.000.000/26 = 38.500 (non-business)I Per hour: 38.500/12 = 3.200 (national shop)I Peak hour: 3.200 ∗ 8 = 25.500 (18:00 to 19:00)I Per second: 25.500/3600 = 7PI/sI Add Christmas / Easter bonusI Add launch bonusI So . . . 50 PI/s should be safe?

I Spare resources for scaling are always a business decisionI Provide with trade-off: Costs vs. downtime / slownessI Fail gracefully

Continuous Performance Tests 23 / 26

Page 83: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Example calculation

I Customer provided values, for a classic webshop:I 1.000.000 PIs per monthI 30.000 sold articles per monthI 45.000 registrations per month

I Per day: 1.000.000/26 = 38.500 (non-business)I Per hour: 38.500/12 = 3.200 (national shop)I Peak hour: 3.200 ∗ 8 = 25.500 (18:00 to 19:00)I Per second: 25.500/3600 = 7PI/sI Add Christmas / Easter bonusI Add launch bonusI So . . . 50 PI/s should be safe?

I Spare resources for scaling are always a business decisionI Provide with trade-off: Costs vs. downtime / slownessI Fail gracefully

Continuous Performance Tests 23 / 26

Page 84: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Example calculation

I Customer provided values, for a classic webshop:I 1.000.000 PIs per monthI 30.000 sold articles per monthI 45.000 registrations per month

I Per day: 1.000.000/26 = 38.500 (non-business)I Per hour: 38.500/12 = 3.200 (national shop)I Peak hour: 3.200 ∗ 8 = 25.500 (18:00 to 19:00)I Per second: 25.500/3600 = 7PI/sI Add Christmas / Easter bonusI Add launch bonusI So . . . 50 PI/s should be safe?

I Spare resources for scaling are always a business decisionI Provide with trade-off: Costs vs. downtime / slownessI Fail gracefully

Continuous Performance Tests 23 / 26

Page 85: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Example calculation

I Customer provided values, for a classic webshop:I 1.000.000 PIs per monthI 30.000 sold articles per monthI 45.000 registrations per month

I Per day: 1.000.000/26 = 38.500 (non-business)I Per hour: 38.500/12 = 3.200 (national shop)I Peak hour: 3.200 ∗ 8 = 25.500 (18:00 to 19:00)I Per second: 25.500/3600 = 7PI/sI Add Christmas / Easter bonusI Add launch bonusI So . . . 50 PI/s should be safe?

I Spare resources for scaling are always a business decisionI Provide with trade-off: Costs vs. downtime / slownessI Fail gracefully

Continuous Performance Tests 23 / 26

Page 86: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Outline

Motivation

Conclusion

Continuous Performance Tests 24 / 26

Page 87: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Conclusion

I Plan your test scenarioI Use realisitic thresholdsI Choose the right tool

with care

Continuous Performance Tests 25 / 26

Page 88: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Conclusion

I Plan your test scenarioI Use realisitic thresholdsI Choose the right tool

with care

Continuous Performance Tests 25 / 26

Page 89: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Conclusion

I Plan your test scenarioI Use realisitic thresholdsI Choose the right tool

with care

Continuous Performance Tests 25 / 26

Page 90: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Conclusion

I Plan your test scenarioI Use realisitic thresholdsI Choose the right tool

with care

Continuous Performance Tests 25 / 26

Page 91: Continuous Performance Tests · Continuous Performance Tests Developer Conference 2012 Tobias Schlitt (@tobySen) Manuel Pichler (@manuelp) September 7, 2012 Continuous Performance

Thanks for listening

I More about us:I http://qafoo.com

Continuous Performance Tests 26 / 26