gatling - softshake 2013
DESCRIPTION
Slides of my talk about Performance Testing and Gatling @ SoftShake 2013TRANSCRIPT
Load testing made easy
Pierre DAL-PRA @ eBusiness Information
@pierre_dalpra
Load Testing
Gatling
Load Testing
Gatling
Load testing?
Performance
It’s all ‘bout the money! Conversion rates
Platform costs
Performance
Why care? (from business POV)
Results/page : 10 => 30
+500 ms
-20% pages seen
-1 % sales
Estimated loss: $160M/y
+100 ms
Performance
Why care? (from dev POV)
Fun!
(happens to be useful too) Anticipate
Reproduce
Train
Performance
WDYM?
Performance
means
Fast?
Robust?
Cost effective?
Performance
= Requirements
Speed is
suggestive
contextualized
Traffic & Behaviors
Analytics
Business people
Methodology
(tentative)
Prerequisite
Proper local perf testing!!!
client + network
app debugging
Be scientists
Analyze!!!
Data
Monitor
Tooling • Load injector: Gatling, JMeter,
Locust.io...
• JVM monitoring: JMXtrans, Yammer
Metrics...
• System monitoring: Nagios
• Network monitoring
• Database monitoring
• Dashboard: Graphite, Ganglia
• Webapp mock: H. Gomez's basic perf
webapp
Simulate
Behaviors
Situations
Capacity test
Stress test
Endurance test
Metrics
min/max? mean?
The good, the bad
and the ugly
Metrics
Percentiles FTW!
Iterate!!!
Test Analyze
Fix hotspot
Jmeter, The Grinder,
LoadUI, Tsung, Locust,
Load Runner, Rational,
NeoLoad…
Issue #1
High Performance
1 user =
1 thread
50 threads on a JVM
With 2000 threads
Blocking
I/O
Threads ?
Waiting…
… and sleeping
Usability Issue #2
Listen, it's not
that
complicated...
Graphical User
Interface
Maintainability Issue #3
What is this change about ?
Gatling can
change all that !
Synchronous
1user=1thread
Blocking I/O
- Asynchronous
- Actor model
- Non blocking
I/O
Actors
NIO
Reach new limits
From the Play2 Computer-Database sample.
(cf: https://github.com/gatling/computer-database)
Scenario
Scala
code
DSL
=
=
Use the rich DSL …
Checks
regex / css / xpath / jsonPath find / findAll / count is / in / not / whatever Structures
doIf / repeat / during / asLongAs randomSwitch / roundRobinSwitch Error handling
tryMax / exitBlockOnFail Feeders
csv / tsv / jdbc
… or write your own
Scala code…
… or use the Recorder
• Maven Plugin
• Maven archetype (run in IDE)
• Jenkins plugin
• Graphite live reporting
Coming soon…
• Websockets, JDBC…
• Clustering
http://gatling-tool.org
http://github.com/excilys/gatling
@GatlingTool