SlideShare a Scribd company logo
Continuous Performance
Load testing for developers with Gatling
Bert	
  Jan	
  Schrijver
@bjschrijverbertjan@jpoint.nl
@bjschrijver@bjschrijver
Bert Jan Schrijver
Let’s meet
@bjschrijver@bjschrijver
Outline
• Performance testing process
• Introduction to Gatling
• Demo
• Results
• Looking forward
• Summary
• Q&A
@bjschrijver@bjschrijver
How it all started…
@bjschrijver@bjschrijver
Performance testing should be
part of the process
@bjschrijver@bjschrijver
Performance testing traditionally…
…happens several times per year



…and/or at major releases



…is performed by specialists



.. which is far from ideal:



- changes were made long ago



- many different code changes



- at a certain moment in time



- when is a test required?



@bjschrijver@bjschrijver
Traditional performance testing
design
write code
test code
performance test
release
unit tests
integration tests
@bjschrijver@bjschrijver
design
write code
test code
release
unit tests
integration tests
performance tests
Performance testing in 

continuous delivery
@bjschrijver@bjschrijver
Continuous Delivery
Demands code to be
Always production ready
Short feedback cycles
Maintained by self-supporting

teams
In regard to performance
Has to be under control
Effects should be clear ASAP
No external specialists
@bjschrijver@bjschrijver
Part of the process
With the same level of support as

- Unit-tests and integration tests

- Continuous Integration

- Zero-downtime deployments

Performed by the development team
@bjschrijver@bjschrijver
Performance testing process
Design Record Operationalise Execute Report
@bjschrijver@bjschrijver
Designing scenarios
Generic tests used to test core functionality
Specialised tests used to test specific features
@bjschrijver@bjschrijver
Tool support is key for
performance test adoption
@bjschrijver@bjschrijver
Gatling
package computerdatabase // 1
import io.gatling.core.Predef._ // 2
import io.gatling.http.Predef._
import scala.concurrent.duration._
class BasicSimulation extends Simulation { // 3
val httpConf = http // 4
.baseURL("http://computer-database.gatling.io") // 5
.acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8") // 6
.doNotTrackHeader("1")
.acceptLanguageHeader("en-US,en;q=0.5")
.acceptEncodingHeader("gzip, deflate")
.userAgentHeader("Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0")
val scn = scenario("BasicSimulation") // 7
.exec(http("request_1") // 8
.get("/")) // 9
.pause(5) // 10
setUp( // 11
scn.inject(atOnceUsers(1)) // 12
).protocols(httpConf) // 13
}
@bjschrijver@bjschrijver
Alternative tools
And many more…
@bjschrijver@bjschrijver
Gatling core concepts
Scenario
Feeder
A sequence of http requests used to simulate application usage
A tool used to fill request parameters
Recorder The tool used to record http requests or take a HAR-file 

and convert it to Gatling DSL
Gatling DSL Easy-to-read, developer-friendly way of defining tests
@bjschrijver
DEMO
@bjschrijver@bjschrijver
Scenario to outcome
Browser HAR-file
Gatling recorder DSL
Custom changes DSL
Gatling Report
@bjschrijver
DEMO
@bjschrijver@bjschrijver
Reports
@bjschrijver@bjschrijver
Interpretations
We can

See how changes affect performance

Have feedback on performance in short amount of time



We cannot

See which load the application can endure in production

@bjschrijver@bjschrijver
Results so far
- At least one time prevented issues in production
- Helped testing performance fixes and database tuning
- Discovered configuration error in test infrastructure
- Helped track down and validate a fix for a memory leak
@bjschrijver@bjschrijver
- Automate (re-)recording process
- Re-use functional test scenarios as performance tests
- Eliminate custom code changes
Further development
@bjschrijver
SUMMARY
@bjschrijver@bjschrijver
Some take-aways
Performance testing should be a first class citizen in your development cycle
Frontend changes can impact backend performance
Gatling is an awesome programmer friendly tool for load testing
The approach I shared monitors performance trends - it does NOT determine
the maximum load a production environment can endure
https://github.com/timve/continuous-performance-demo
https://github.com/bertjan/gatling-seed
@bjschrijver
Q&A
@bjschrijver@bjschrijver
Thanks for your time!
Please care about
conference quality.
Liked it? Tweet it!

More Related Content

PDF
JavaLand 2016 - Decoding the air around you with Java and $7 hardware
PDF
JUGM meetup March 2019 - Continuous performance - Load testing for developers...
PDF
OpenValue meetup January 2019 - Continuous performance - Load testing for dev...
PDF
JavaZone 2016: Continuous performance
PDF
J-Fall 2014: Decoding the airspace above you with Java and $7 hardware
PDF
DevOps Utrecht - The DevOps Disaster
PDF
EuregJUG 2016-01-07 - Swimming upstream in the container revolution
PDF
Amsterdam JUG - Continuous performance
JavaLand 2016 - Decoding the air around you with Java and $7 hardware
JUGM meetup March 2019 - Continuous performance - Load testing for developers...
OpenValue meetup January 2019 - Continuous performance - Load testing for dev...
JavaZone 2016: Continuous performance
J-Fall 2014: Decoding the airspace above you with Java and $7 hardware
DevOps Utrecht - The DevOps Disaster
EuregJUG 2016-01-07 - Swimming upstream in the container revolution
Amsterdam JUG - Continuous performance

Viewers also liked (8)

PDF
GOTO Amsterdam 2016 - The DevOps Disaster
PDF
Codemotion tech pills - Continuous performance
PDF
Codemotion Amsterdam 2016 - Building microservices with Vert.x
PDF
Utrecht JUG - Building microservices with Vert.x
PDF
Devoxx UK 2016 - Building microservices with Vert.x
PDF
Codemotion Amsterdam 2016 - The DevOps Disaster
PDF
Utrecht JUG - Pipeline as code
PDF
Jfokus 2017 - The DevOps Disaster
GOTO Amsterdam 2016 - The DevOps Disaster
Codemotion tech pills - Continuous performance
Codemotion Amsterdam 2016 - Building microservices with Vert.x
Utrecht JUG - Building microservices with Vert.x
Devoxx UK 2016 - Building microservices with Vert.x
Codemotion Amsterdam 2016 - The DevOps Disaster
Utrecht JUG - Pipeline as code
Jfokus 2017 - The DevOps Disaster
Ad

Similar to JavaLand 2016: Continuous performance (20)

PPT
Sdb Presentatie
PDF
Fail fast Fail cheap - Agile Development, Testing & Delivery
PDF
PFZ Workshop - Automatiseren van functionele tests
PDF
Starten met geautomatiseerd testen - SDN 2013
PDF
JavaLand 2017 - Pipeline as code
PPT
Agile - De Rol Van Tester
PDF
Hands-off performance testing - Twan Koot & Addy Zwiebel
PPTX
ING : How top quality software and state-of-the-art technology leads to conti...
PDF
Coww 2.16 Presentatie Wim La Haye
PPT
Workshop BI/DWH AGILE TESTING Zwitserleven Dutch
PPTX
Continuous delivery met jenkins twist en puppet
PDF
DSD-NL 2014 - iMOD Symposium - 6. Reproduceerbaarheid en Kwaliteitsborging, W...
PPTX
Presentatie dso leveranciersdag 17 november
PPTX
Web applicatie van scratch
ODP
H6 Realisatiefase
PPTX
Requirements en testing
PPT
Versiebeheer van database changes
PPT
Agile, Continuous Delivery & DevOps in perspectief
PPTX
HTML 5, ASP.NET MVC & Windows Azure sessie voor Ivo Brugge
PDF
TMap dag - Agile testautomatisering in de praktijk
Sdb Presentatie
Fail fast Fail cheap - Agile Development, Testing & Delivery
PFZ Workshop - Automatiseren van functionele tests
Starten met geautomatiseerd testen - SDN 2013
JavaLand 2017 - Pipeline as code
Agile - De Rol Van Tester
Hands-off performance testing - Twan Koot & Addy Zwiebel
ING : How top quality software and state-of-the-art technology leads to conti...
Coww 2.16 Presentatie Wim La Haye
Workshop BI/DWH AGILE TESTING Zwitserleven Dutch
Continuous delivery met jenkins twist en puppet
DSD-NL 2014 - iMOD Symposium - 6. Reproduceerbaarheid en Kwaliteitsborging, W...
Presentatie dso leveranciersdag 17 november
Web applicatie van scratch
H6 Realisatiefase
Requirements en testing
Versiebeheer van database changes
Agile, Continuous Delivery & DevOps in perspectief
HTML 5, ASP.NET MVC & Windows Azure sessie voor Ivo Brugge
TMap dag - Agile testautomatisering in de praktijk
Ad

JavaLand 2016: Continuous performance