SlideShare una empresa de Scribd logo
1 de 52
Descargar para leer sin conexión
© Gatling 2015.All rights reserved.
Requirements
Background in programming
1. Object oriented language mostly
2. Functional programming is a plus, but optional
Experience
1. Gatling?
2. Scala?
1
© Gatling 2015.All rights reserved.
LoadTesting Done Right
http://gatling.io
Guillaume Corré
@notdryft
2
© Gatling 2015.All rights reserved.
Workshop Schedule
1. Architecture
2. Usage
3. Exercises
3
© Gatling 2015.All rights reserved.
Workshop Schedule
1. Architecture
2. Usage
3. Exercises
4
© Gatling 2015.All rights reserved.
Gatling:Architecture
Designed for:
1. Complex use cases
2. High Performance
3. Maintainability
5
© Gatling 2015.All rights reserved.
Gatling:Architecture
High Performance
Optimize thread usage:
1. Non Blocking IO
2. Message oriented orchestration
6
© Gatling 2015.All rights reserved.
Gatling:Architecture
High Performance
7
© Gatling 2015.All rights reserved.
Gatling:Architecture
Maintainability
Code
1. Real programming language
2. DSL
3. API
8
© Gatling 2015.All rights reserved.
Gatling:Architecture
Maintainability
Why?
1. Versioning
2. Refactoring
3. Peer review
4. Composition
9
© Gatling 2015.All rights reserved.
Gatling:Architecture
Maintainability
10
class Simple extends Simulation {
val scn = scenario("simple")
.exec(
http("home")
.get("http://gatling.io")
.check(status.is(200)))
setUp(
scn.inject(
atOnceUsers(1)))
}
© Gatling 2015.All rights reserved.
Workshop Schedule
1. Architecture
2. Usage
3. Exercises
11
© Gatling 2015.All rights reserved.
Gatling: Usage
12
© Gatling 2015.All rights reserved.
Usage: DSL
Extensive documentation:
http://gatling.io/#/docs
Cheat-sheet:
http://gatling.io/docs/2.1.7/cheat-sheet.html
13
© Gatling 2015.All rights reserved.
Usage:Very Fast Track
Step 1: Create a Simulation class
14
import io.gatling.core.Predef._
import io.gatling.http.Predef._
import scala.concurrent.duration._
class Simple extends Simulation {
}
© Gatling 2015.All rights reserved.
Usage:Very Fast Track
Step 2: Create a Scenario
15
import …
class Simple extends Simulation {
val scn = scenario("simple")
}
© Gatling 2015.All rights reserved.
Usage:Very Fast Track
Step 3: Chain Actions
16
import …
class Simple extends Simulation {
val scn = scenario("simple")
.exec(
http("home")
.get("http://gatling.io"))
}
© Gatling 2015.All rights reserved.
Usage:Very Fast Track
Step 4: Check your requests are fine
17
import …
class Simple extends Simulation {
val scn = scenario("simple")
.exec(
http("home")
.get("http://gatling.io")
.check(status.is(200))
}
© Gatling 2015.All rights reserved.
Usage:Very Fast Track
Step 5: Set up and inject users
18
import …
class Simple extends Simulation {
val scn = scenario("simple")
.exec(
http("home")
.get("http://gatling.io")
.check(status.is(200))
setUp(scn.inject(atOnceUsers(1)))
}
© Gatling 2015.All rights reserved.
Usage:Very Fast Track
Step 6: Make things dynamic
19
// Set up virtual users with feeders
feed(csv("credentials.csv"))
© Gatling 2015.All rights reserved.
Usage:Very Fast Track
Step 6: Make things dynamic
20
// Capture response data with checks
http("request")
.get("url")
.check(css("someSelector").saveAs("someVariable"))
© Gatling 2015.All rights reserved.
Usage:Very Fast Track
Step 6: Make things dynamic
21
// Craft requests with the Expression Language
http("request")
.get("/foo?bar=${someVariable}")
© Gatling 2015.All rights reserved.
Usage:Very Fast Track
Step 6: Make things dynamic
22
// Use functions
exec { session =>
println(session)
session
}
© Gatling 2015.All rights reserved.
Usage:Very Fast Track
Expressions
23
type Expression[T] = Session => Validation[T]
© Gatling 2015.All rights reserved.
Workshop Schedule
1. Architecture
2. Usage
3. Exercises
24
© Gatling 2015.All rights reserved.
Workshop
4 exercises
1. Ranged from (almost) easy to difficult
2. Each pinpoint different specifics of Gatling
Url
bit.ly/gatling-workshop
Documentation reminder
http://gatling.io/#/docs
http://gatling.io/docs/2.1.7/cheat-sheet.html
25
© Gatling 2015.All rights reserved.
Exercise 1:
1. First Request
What happens if you don't do any checks?
1. Gatling adds a status check by default
26
© Gatling 2015.All rights reserved.
Exercise 1:
1. First Request
Are there any defaults? If so, which?
1. status.in
2. All statuses of the 20x family
3. 304
27
© Gatling 2015.All rights reserved.
Exercise 1:
3. Checks
Which check should you use to fetch the title ?
1. Regex
1. Most the time harder to maintain
2. Still does the job pretty well
2. XPath
1. HTML needs to be strict and well formed
3. CSS is easy to read and fast
1. css("#logo-section a", "title")
28
© Gatling 2015.All rights reserved.
Exercise 1:
3. Checks
What happens when a check matches more than a
single element?
1. exists by default
2. And, if you don’t specify a fetch method but try to save,
Gatling will add a find(0) before saveAs
29
© Gatling 2015.All rights reserved.
Exercise 1:
4. Information retrieval
30
Which check should you use to fetch the menu links ?
1. css("#main-menu-inner > ul > li > a", "href")
© Gatling 2015.All rights reserved.
Exercise 1:
4. Information retrieval
How can you save all matches?
1. findAll
31
© Gatling 2015.All rights reserved.
Exercise 1:
4. Information retrieval
How can you access the “menuLinks” attribute?
1. Use the exec { session => … } syntax
2. session(“menuLinks”) for extraction
3. Then, either
1. as[Type]
2. asOption[Type]
3. validate[Type]
4. Validate recommended unless you know what you are
doing
32
© Gatling 2015.All rights reserved.
Exercise 1:
4. Iterate over menu links
Which DSL element should you use?
1. foreach
2. Takes an Expression[String] as its first argument
1. Which is a function of Session toValidation[String]
3. Gatling does the EL conversion for you
33
© Gatling 2015.All rights reserved.
Exercise 1:
4. Iterate over menu links
How do think it works behind the hood?
1. Iterate over each element
2. Put current element into the session as an attribute
3. Run the action block with the new session
34
© Gatling 2015.All rights reserved.
Exercise 2:
1. Fetch the login page
Which baseURL should you use?
1. Gatling doesn’t add a / before concatenating
2. One of the following
1. baseURL(“https://github.com”) and get(“/login”)
2. baseURL(“https://github.com/“) and get(“login”)
3. Prefer the first one
35
© Gatling 2015.All rights reserved.
Exercise 2:
1. Fetch the login page
Which check should you use?
1. The general idea is to make sure you are on the page you
requested
2. css(".auth-form form h1").is("Sign in")
36
© Gatling 2015.All rights reserved.
Exercise 2:
2.1. Performing the login
Which request should you do?
1. /session
Which HTTP method does it need to use?
2. POST
37
© Gatling 2015.All rights reserved.
Exercise 2:
2.2. Specifying additional parameters
Do you think these are generated or provided?
1. Generated by Github, provided in the HTML.
Where can you fetch thoses?
2. Add a check to the previous request
3. css(".auth-form form input[name='authenticity_token']",
“value").saveAs("authenticityToken")
38
© Gatling 2015.All rights reserved.
Exercise 2:
3. Checks
Which checks should you use to be sure you are
logged in?
1. Check for content, titles, css, etc.
2. css(“.logged_in”)
3. exists is a default
39
© Gatling 2015.All rights reserved.
Exercise 2:
4. Feeding the credentials
Which feeder file format could you use?
1. Multiple formats are handled by Gatling
1. CSV,TSV, etc.
2. Just beware of malformed files
40
© Gatling 2015.All rights reserved.
Exercise 2:
4. Feeding the credentials
How does the session interact with the feeder?
1. A feeder outputs lines of CSV (and else) files into the
session
2. One line per user, with different methods of retrieval
1. Queue, failure when reading is over
2. Random
3. Shuffle, which is a shuffle + queue
4. Circular
3. If you want more, you can skip the feeding to Gatling and
fetch the records yourself
41
© Gatling 2015.All rights reserved.
Exercise 3:
1. Create gist
Think of multiple ways to load the templates
1. StringBody
2. RawFileBody
3. ELFileBody, with parsed content
42
© Gatling 2015.All rights reserved.
Exercise 3:
1. Create gist
Which one is better in this case?
1. All are good
2. Still, scala can handle string template pretty well
3. => StringBody
43
© Gatling 2015.All rights reserved.
Exercise 4:
Part 1. 1. Start simple
Is using java.util.Random a good idea in this case?
What could happen if you do?
1. Random is synchronized
2. Multiples threads would block each other when fetching
3. ThreadLocalRandom is not
4. It creates a single Random for eachThread, resolving
conflicts
44
© Gatling 2015.All rights reserved.
Exercise 4:
Part 1. 4.A twist
How does Gatling execute requests?
1. Each requests are launched in sequence
2. They cannot overlap
3. And cannot be launched asynchronously
How should we proceed instead?
45
© Gatling 2015.All rights reserved.
Exercise 4:
Part 1. 4.A twist
How does Gatling execute requests?
1. Each requests are launched in sequence
2. They cannot overlap
3. And cannot be launched asynchronously
How should we proceed instead?
4. We can use the resources mechanism
5. Not its purpose, but it will work
46
© Gatling 2015.All rights reserved.
Exercise 4:
Part 1I. 2. Making the queries
Is the number of tiles requested really fixed?
1. What about edges ?
2. Will reduce the number of tiles
3. We can reduce the bounds, excluding the edges
47
© Gatling 2015.All rights reserved.
Exercise 4:
Part 1I. 2. Making the queries
Mixing Gatling’s EL and Scala’s String Macro
1. This a Gatling EL:“${variableName}”
2. Theses are Scala Macros:
1. s”$variableName”
2. s”${variableName}
How?
48
© Gatling 2015.All rights reserved.
Exercise 4:
Part 1I. 2. Making the queries
Mixing Gatling’s EL and Scala’s String Macro
1. This a Gatling EL:“${variableName}”
2. Theses are Scala Macros:
1. s”$variableName”
2. s”${variableName}
How?
1. Escape Gatling’s EL when in a Scala String Macro
1. s”$${gatlingVariable}/${otherVariable}”
2. will output “${gatlingVariable}/variableContent”
49
© Gatling 2015.All rights reserved.
Workshop
Solutions
1. Not available yet
Url
bit.ly/gatling-workshop-solutions
50
© Gatling 2015.All rights reserved.
© Gatling 2015.All rights reserved.
http://gatling.io
http://github.com/gatling/gatling
@GatlingTool

Más contenido relacionado

La actualidad más candente

Gatling overview
Gatling overviewGatling overview
Gatling overviewViral Jain
 
Gatling Tool in Action at Devoxx 2012
Gatling Tool in Action at Devoxx 2012Gatling Tool in Action at Devoxx 2012
Gatling Tool in Action at Devoxx 2012slandelle
 
Gatling Performance Workshop
Gatling Performance WorkshopGatling Performance Workshop
Gatling Performance WorkshopSai Krishna
 
Continuous performance: Load testing for developers with gatling @ JavaOne 2016
Continuous performance: Load testing for developers with gatling @ JavaOne 2016Continuous performance: Load testing for developers with gatling @ JavaOne 2016
Continuous performance: Load testing for developers with gatling @ JavaOne 2016Tim van Eijndhoven
 
Continuous performance: Load testing for developers with gatling
Continuous performance: Load testing for developers with gatlingContinuous performance: Load testing for developers with gatling
Continuous performance: Load testing for developers with gatlingTim van Eijndhoven
 
Open Source Load Testing: JMeter, Gatling and Taurus
Open Source Load Testing: JMeter, Gatling and TaurusOpen Source Load Testing: JMeter, Gatling and Taurus
Open Source Load Testing: JMeter, Gatling and TaurusGuy Salton
 
100 tests per second - 40 releases per week
100 tests per second - 40 releases per week100 tests per second - 40 releases per week
100 tests per second - 40 releases per weekLars Thorup
 
JavaScript Metaprogramming with ES 2015 Proxy
JavaScript Metaprogramming with ES 2015 ProxyJavaScript Metaprogramming with ES 2015 Proxy
JavaScript Metaprogramming with ES 2015 ProxyAlexandr Skachkov
 
How to go about testing in React?
How to go about testing in React? How to go about testing in React?
How to go about testing in React? Lisa Gagarina
 
[FullStack NYC 2019] Effective Unit Tests for JavaScript
[FullStack NYC 2019] Effective Unit Tests for JavaScript[FullStack NYC 2019] Effective Unit Tests for JavaScript
[FullStack NYC 2019] Effective Unit Tests for JavaScriptHazem Saleh
 
Understanding Reactive Programming
Understanding Reactive ProgrammingUnderstanding Reactive Programming
Understanding Reactive ProgrammingAndres Almiray
 
Continuous performance management with Gatling
Continuous performance management with GatlingContinuous performance management with Gatling
Continuous performance management with GatlingRadoslaw Smilgin
 
Testing in Scala. Adform Research
Testing in Scala. Adform ResearchTesting in Scala. Adform Research
Testing in Scala. Adform ResearchVasil Remeniuk
 
Migration from AngularJS to Angular
Migration from AngularJS to AngularMigration from AngularJS to Angular
Migration from AngularJS to AngularAleks Zinevych
 
prohuddle-utPLSQL v3 - Ultimate unit testing framework for Oracle
prohuddle-utPLSQL v3 - Ultimate unit testing framework for Oracleprohuddle-utPLSQL v3 - Ultimate unit testing framework for Oracle
prohuddle-utPLSQL v3 - Ultimate unit testing framework for OracleJacek Gebal
 
Apache JMeter Introduction
Apache JMeter IntroductionApache JMeter Introduction
Apache JMeter IntroductionSøren Lund
 
J meter understanding
J meter understandingJ meter understanding
J meter understandingRajesh S
 
Effective java item 80 prefer executors, tasks, and streams to threads
Effective java   item 80  prefer executors, tasks, and  streams to threadsEffective java   item 80  prefer executors, tasks, and  streams to threads
Effective java item 80 prefer executors, tasks, and streams to threadsIsaac Liao
 

La actualidad más candente (20)

Gatling overview
Gatling overviewGatling overview
Gatling overview
 
Gatling Tool in Action at Devoxx 2012
Gatling Tool in Action at Devoxx 2012Gatling Tool in Action at Devoxx 2012
Gatling Tool in Action at Devoxx 2012
 
Gatling Performance Workshop
Gatling Performance WorkshopGatling Performance Workshop
Gatling Performance Workshop
 
Continuous performance: Load testing for developers with gatling @ JavaOne 2016
Continuous performance: Load testing for developers with gatling @ JavaOne 2016Continuous performance: Load testing for developers with gatling @ JavaOne 2016
Continuous performance: Load testing for developers with gatling @ JavaOne 2016
 
Continuous performance: Load testing for developers with gatling
Continuous performance: Load testing for developers with gatlingContinuous performance: Load testing for developers with gatling
Continuous performance: Load testing for developers with gatling
 
Load test REST APIs using gatling
Load test REST APIs using gatlingLoad test REST APIs using gatling
Load test REST APIs using gatling
 
Open Source Load Testing: JMeter, Gatling and Taurus
Open Source Load Testing: JMeter, Gatling and TaurusOpen Source Load Testing: JMeter, Gatling and Taurus
Open Source Load Testing: JMeter, Gatling and Taurus
 
100 tests per second - 40 releases per week
100 tests per second - 40 releases per week100 tests per second - 40 releases per week
100 tests per second - 40 releases per week
 
JavaScript Metaprogramming with ES 2015 Proxy
JavaScript Metaprogramming with ES 2015 ProxyJavaScript Metaprogramming with ES 2015 Proxy
JavaScript Metaprogramming with ES 2015 Proxy
 
How to go about testing in React?
How to go about testing in React? How to go about testing in React?
How to go about testing in React?
 
[FullStack NYC 2019] Effective Unit Tests for JavaScript
[FullStack NYC 2019] Effective Unit Tests for JavaScript[FullStack NYC 2019] Effective Unit Tests for JavaScript
[FullStack NYC 2019] Effective Unit Tests for JavaScript
 
Understanding Reactive Programming
Understanding Reactive ProgrammingUnderstanding Reactive Programming
Understanding Reactive Programming
 
Continuous performance management with Gatling
Continuous performance management with GatlingContinuous performance management with Gatling
Continuous performance management with Gatling
 
Testing in Scala. Adform Research
Testing in Scala. Adform ResearchTesting in Scala. Adform Research
Testing in Scala. Adform Research
 
Migration from AngularJS to Angular
Migration from AngularJS to AngularMigration from AngularJS to Angular
Migration from AngularJS to Angular
 
prohuddle-utPLSQL v3 - Ultimate unit testing framework for Oracle
prohuddle-utPLSQL v3 - Ultimate unit testing framework for Oracleprohuddle-utPLSQL v3 - Ultimate unit testing framework for Oracle
prohuddle-utPLSQL v3 - Ultimate unit testing framework for Oracle
 
Apache JMeter Introduction
Apache JMeter IntroductionApache JMeter Introduction
Apache JMeter Introduction
 
The new React
The new React The new React
The new React
 
J meter understanding
J meter understandingJ meter understanding
J meter understanding
 
Effective java item 80 prefer executors, tasks, and streams to threads
Effective java   item 80  prefer executors, tasks, and  streams to threadsEffective java   item 80  prefer executors, tasks, and  streams to threads
Effective java item 80 prefer executors, tasks, and streams to threads
 

Destacado

TYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source Tools
TYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source ToolsTYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source Tools
TYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source ToolsMichael Lihs
 
Automated Testing Talk from Meet Magento New York 2014
Automated Testing Talk from Meet Magento New York 2014Automated Testing Talk from Meet Magento New York 2014
Automated Testing Talk from Meet Magento New York 2014Joshua Warren
 
Gatling Tool in Action at DevoxxFR 2012
Gatling Tool in Action at DevoxxFR 2012Gatling Tool in Action at DevoxxFR 2012
Gatling Tool in Action at DevoxxFR 2012slandelle
 
Démo Gatling au Performance User Group de Casablanca - 25 sept 2014
Démo Gatling au Performance User Group de Casablanca - 25 sept 2014Démo Gatling au Performance User Group de Casablanca - 25 sept 2014
Démo Gatling au Performance User Group de Casablanca - 25 sept 2014Benoît de CHATEAUVIEUX
 
DSLing your System For Scalability Testing Using Gatling - Dublin Scala User ...
DSLing your System For Scalability Testing Using Gatling - Dublin Scala User ...DSLing your System For Scalability Testing Using Gatling - Dublin Scala User ...
DSLing your System For Scalability Testing Using Gatling - Dublin Scala User ...Aman Kohli
 
はじめての Gatling
はじめての Gatlingはじめての Gatling
はじめての GatlingNaoya Nakazawa
 
Customer Scale: Stateless Sessions and Managing High-Volume Digital Services
Customer Scale: Stateless Sessions and Managing High-Volume Digital ServicesCustomer Scale: Stateless Sessions and Managing High-Volume Digital Services
Customer Scale: Stateless Sessions and Managing High-Volume Digital ServicesForgeRock
 
アドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニングアドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニングYosuke Mizutani
 

Destacado (9)

Las palmas devops: Pruebas de carga web
Las palmas devops: Pruebas de carga webLas palmas devops: Pruebas de carga web
Las palmas devops: Pruebas de carga web
 
TYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source Tools
TYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source ToolsTYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source Tools
TYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source Tools
 
Automated Testing Talk from Meet Magento New York 2014
Automated Testing Talk from Meet Magento New York 2014Automated Testing Talk from Meet Magento New York 2014
Automated Testing Talk from Meet Magento New York 2014
 
Gatling Tool in Action at DevoxxFR 2012
Gatling Tool in Action at DevoxxFR 2012Gatling Tool in Action at DevoxxFR 2012
Gatling Tool in Action at DevoxxFR 2012
 
Démo Gatling au Performance User Group de Casablanca - 25 sept 2014
Démo Gatling au Performance User Group de Casablanca - 25 sept 2014Démo Gatling au Performance User Group de Casablanca - 25 sept 2014
Démo Gatling au Performance User Group de Casablanca - 25 sept 2014
 
DSLing your System For Scalability Testing Using Gatling - Dublin Scala User ...
DSLing your System For Scalability Testing Using Gatling - Dublin Scala User ...DSLing your System For Scalability Testing Using Gatling - Dublin Scala User ...
DSLing your System For Scalability Testing Using Gatling - Dublin Scala User ...
 
はじめての Gatling
はじめての Gatlingはじめての Gatling
はじめての Gatling
 
Customer Scale: Stateless Sessions and Managing High-Volume Digital Services
Customer Scale: Stateless Sessions and Managing High-Volume Digital ServicesCustomer Scale: Stateless Sessions and Managing High-Volume Digital Services
Customer Scale: Stateless Sessions and Managing High-Volume Digital Services
 
アドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニングアドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニング
 

Similar a TestWorks Conf Performance testing made easy with gatling - Guillaume Corré

ScalaUA - distage: Staged Dependency Injection
ScalaUA - distage: Staged Dependency InjectionScalaUA - distage: Staged Dependency Injection
ScalaUA - distage: Staged Dependency Injection7mind
 
I Love APIs 2015: Crash Course Foundational Topics in Apigee Edge Workshop
I Love APIs 2015: Crash Course Foundational Topics in Apigee Edge WorkshopI Love APIs 2015: Crash Course Foundational Topics in Apigee Edge Workshop
I Love APIs 2015: Crash Course Foundational Topics in Apigee Edge WorkshopApigee | Google Cloud
 
Creating testing tools to support development
Creating testing tools to support developmentCreating testing tools to support development
Creating testing tools to support developmentChema del Barco
 
Testlink Test Management with Teamforge
Testlink Test Management with TeamforgeTestlink Test Management with Teamforge
Testlink Test Management with TeamforgeCollabNet
 
Getting Started with Test-Driven Development at Longhorn PHP 2023
Getting Started with Test-Driven Development at Longhorn PHP 2023Getting Started with Test-Driven Development at Longhorn PHP 2023
Getting Started with Test-Driven Development at Longhorn PHP 2023Scott Keck-Warren
 
Droidcon Spain 2016 - The Pragmatic Android Programmer: from hype to reality
 Droidcon Spain 2016 - The Pragmatic Android Programmer: from hype to reality Droidcon Spain 2016 - The Pragmatic Android Programmer: from hype to reality
Droidcon Spain 2016 - The Pragmatic Android Programmer: from hype to realityDaniel Gallego Vico
 
JS Fest 2018. Никита Галкин. Микросервисная архитектура с переиспользуемыми к...
JS Fest 2018. Никита Галкин. Микросервисная архитектура с переиспользуемыми к...JS Fest 2018. Никита Галкин. Микросервисная архитектура с переиспользуемыми к...
JS Fest 2018. Никита Галкин. Микросервисная архитектура с переиспользуемыми к...JSFestUA
 
Qtp interview questions and answers
Qtp interview questions and answersQtp interview questions and answers
Qtp interview questions and answersITeLearn
 
Real time trend and failure analysis using TTA-Anand Bagmar & Aasawaree Deshmukh
Real time trend and failure analysis using TTA-Anand Bagmar & Aasawaree DeshmukhReal time trend and failure analysis using TTA-Anand Bagmar & Aasawaree Deshmukh
Real time trend and failure analysis using TTA-Anand Bagmar & Aasawaree Deshmukhbhumika2108
 
Codeless Web testing: a keyword-driven example with Excel
Codeless Web testing: a keyword-driven example with ExcelCodeless Web testing: a keyword-driven example with Excel
Codeless Web testing: a keyword-driven example with ExcelMaveryx
 
Hadoop testing workshop - july 2013
Hadoop testing workshop - july 2013Hadoop testing workshop - july 2013
Hadoop testing workshop - july 2013Ophir Cohen
 
Mykola Kovsh - Functional API automation with Jmeter
Mykola Kovsh - Functional API automation with JmeterMykola Kovsh - Functional API automation with Jmeter
Mykola Kovsh - Functional API automation with JmeterIevgenii Katsan
 
QTP Automation Testing Tutorial 1
QTP Automation Testing Tutorial 1QTP Automation Testing Tutorial 1
QTP Automation Testing Tutorial 1Akash Tyagi
 
STAREAST 2011 - 7 Steps To Improving Software Quality using Microsoft Test Ma...
STAREAST 2011 - 7 Steps To Improving Software Quality using Microsoft Test Ma...STAREAST 2011 - 7 Steps To Improving Software Quality using Microsoft Test Ma...
STAREAST 2011 - 7 Steps To Improving Software Quality using Microsoft Test Ma...Anna Russo
 
Testing the Grails Spring Security Plugins
Testing the Grails Spring Security PluginsTesting the Grails Spring Security Plugins
Testing the Grails Spring Security PluginsBurt Beckwith
 
Engineering Student MuleSoft Meetup#4 - API Testing With MuleSoft
Engineering Student MuleSoft Meetup#4 - API Testing With MuleSoftEngineering Student MuleSoft Meetup#4 - API Testing With MuleSoft
Engineering Student MuleSoft Meetup#4 - API Testing With MuleSoftJitendra Bafna
 
STARWEST 2011 - 7 Steps To Improving Software Quality using Microsoft Test Ma...
STARWEST 2011 - 7 Steps To Improving Software Quality using Microsoft Test Ma...STARWEST 2011 - 7 Steps To Improving Software Quality using Microsoft Test Ma...
STARWEST 2011 - 7 Steps To Improving Software Quality using Microsoft Test Ma...Anna Russo
 
Improving Software Quality- 2-day Tester Training
Improving Software Quality- 2-day Tester TrainingImproving Software Quality- 2-day Tester Training
Improving Software Quality- 2-day Tester TrainingAnna Russo
 

Similar a TestWorks Conf Performance testing made easy with gatling - Guillaume Corré (20)

ScalaUA - distage: Staged Dependency Injection
ScalaUA - distage: Staged Dependency InjectionScalaUA - distage: Staged Dependency Injection
ScalaUA - distage: Staged Dependency Injection
 
I Love APIs 2015: Crash Course Foundational Topics in Apigee Edge Workshop
I Love APIs 2015: Crash Course Foundational Topics in Apigee Edge WorkshopI Love APIs 2015: Crash Course Foundational Topics in Apigee Edge Workshop
I Love APIs 2015: Crash Course Foundational Topics in Apigee Edge Workshop
 
Creating testing tools to support development
Creating testing tools to support developmentCreating testing tools to support development
Creating testing tools to support development
 
Testlink Test Management with Teamforge
Testlink Test Management with TeamforgeTestlink Test Management with Teamforge
Testlink Test Management with Teamforge
 
Getting Started with Test-Driven Development at Longhorn PHP 2023
Getting Started with Test-Driven Development at Longhorn PHP 2023Getting Started with Test-Driven Development at Longhorn PHP 2023
Getting Started with Test-Driven Development at Longhorn PHP 2023
 
Droidcon Spain 2016 - The Pragmatic Android Programmer: from hype to reality
 Droidcon Spain 2016 - The Pragmatic Android Programmer: from hype to reality Droidcon Spain 2016 - The Pragmatic Android Programmer: from hype to reality
Droidcon Spain 2016 - The Pragmatic Android Programmer: from hype to reality
 
JS Fest 2018. Никита Галкин. Микросервисная архитектура с переиспользуемыми к...
JS Fest 2018. Никита Галкин. Микросервисная архитектура с переиспользуемыми к...JS Fest 2018. Никита Галкин. Микросервисная архитектура с переиспользуемыми к...
JS Fest 2018. Никита Галкин. Микросервисная архитектура с переиспользуемыми к...
 
Qtp interview questions and answers
Qtp interview questions and answersQtp interview questions and answers
Qtp interview questions and answers
 
Selenium topic 1- Selenium Basic
Selenium topic 1-  Selenium BasicSelenium topic 1-  Selenium Basic
Selenium topic 1- Selenium Basic
 
Real time trend and failure analysis using TTA-Anand Bagmar & Aasawaree Deshmukh
Real time trend and failure analysis using TTA-Anand Bagmar & Aasawaree DeshmukhReal time trend and failure analysis using TTA-Anand Bagmar & Aasawaree Deshmukh
Real time trend and failure analysis using TTA-Anand Bagmar & Aasawaree Deshmukh
 
Codeless Web testing: a keyword-driven example with Excel
Codeless Web testing: a keyword-driven example with ExcelCodeless Web testing: a keyword-driven example with Excel
Codeless Web testing: a keyword-driven example with Excel
 
Hadoop testing workshop - july 2013
Hadoop testing workshop - july 2013Hadoop testing workshop - july 2013
Hadoop testing workshop - july 2013
 
Mykola Kovsh - Functional API automation with Jmeter
Mykola Kovsh - Functional API automation with JmeterMykola Kovsh - Functional API automation with Jmeter
Mykola Kovsh - Functional API automation with Jmeter
 
QTP Automation Testing Tutorial 1
QTP Automation Testing Tutorial 1QTP Automation Testing Tutorial 1
QTP Automation Testing Tutorial 1
 
STAREAST 2011 - 7 Steps To Improving Software Quality using Microsoft Test Ma...
STAREAST 2011 - 7 Steps To Improving Software Quality using Microsoft Test Ma...STAREAST 2011 - 7 Steps To Improving Software Quality using Microsoft Test Ma...
STAREAST 2011 - 7 Steps To Improving Software Quality using Microsoft Test Ma...
 
Testing the Grails Spring Security Plugins
Testing the Grails Spring Security PluginsTesting the Grails Spring Security Plugins
Testing the Grails Spring Security Plugins
 
The Test way
The Test wayThe Test way
The Test way
 
Engineering Student MuleSoft Meetup#4 - API Testing With MuleSoft
Engineering Student MuleSoft Meetup#4 - API Testing With MuleSoftEngineering Student MuleSoft Meetup#4 - API Testing With MuleSoft
Engineering Student MuleSoft Meetup#4 - API Testing With MuleSoft
 
STARWEST 2011 - 7 Steps To Improving Software Quality using Microsoft Test Ma...
STARWEST 2011 - 7 Steps To Improving Software Quality using Microsoft Test Ma...STARWEST 2011 - 7 Steps To Improving Software Quality using Microsoft Test Ma...
STARWEST 2011 - 7 Steps To Improving Software Quality using Microsoft Test Ma...
 
Improving Software Quality- 2-day Tester Training
Improving Software Quality- 2-day Tester TrainingImproving Software Quality- 2-day Tester Training
Improving Software Quality- 2-day Tester Training
 

Más de Xebia Nederland BV

The 10 tip recipe for business model innovation
The 10 tip recipe for business model innovationThe 10 tip recipe for business model innovation
The 10 tip recipe for business model innovationXebia Nederland BV
 
Holacracy: een nieuwe bodem voor de Scrum taart
Holacracy: een nieuwe bodem voor de Scrum taartHolacracy: een nieuwe bodem voor de Scrum taart
Holacracy: een nieuwe bodem voor de Scrum taartXebia Nederland BV
 
Videoscribe je agile transitie
Videoscribe je agile transitieVideoscribe je agile transitie
Videoscribe je agile transitieXebia Nederland BV
 
Sketchnote je Product Backlog Items & Sprint Retrospectives
Sketchnote je Product Backlog Items & Sprint RetrospectivesSketchnote je Product Backlog Items & Sprint Retrospectives
Sketchnote je Product Backlog Items & Sprint RetrospectivesXebia Nederland BV
 
Why we need test automation, but it’s not the right question
Why we need test automation, but it’s not the right questionWhy we need test automation, but it’s not the right question
Why we need test automation, but it’s not the right questionXebia Nederland BV
 
Testen in de transitie naar continuous delivery
Testen in de transitie naar continuous deliveryTesten in de transitie naar continuous delivery
Testen in de transitie naar continuous deliveryXebia Nederland BV
 
Becoming an agile enterprise, focus on the test ingredient
Becoming an agile enterprise, focus on the test ingredientBecoming an agile enterprise, focus on the test ingredient
Becoming an agile enterprise, focus on the test ingredientXebia Nederland BV
 
How DUO started with Continuous Delivery and changed their way of Testing
How DUO started with Continuous Delivery and changed their way of TestingHow DUO started with Continuous Delivery and changed their way of Testing
How DUO started with Continuous Delivery and changed their way of TestingXebia Nederland BV
 
Become a digital company - Case KPN / Xebia
Become a digital company - Case KPN / XebiaBecome a digital company - Case KPN / Xebia
Become a digital company - Case KPN / XebiaXebia Nederland BV
 
Building a Docker powered feature driven delivery pipeline at hoyhoy.nl
Building a Docker powered feature driven delivery pipeline at hoyhoy.nlBuilding a Docker powered feature driven delivery pipeline at hoyhoy.nl
Building a Docker powered feature driven delivery pipeline at hoyhoy.nlXebia Nederland BV
 
TestWorks Conf The magic of models for 1000% test automation - Machiel van de...
TestWorks Conf The magic of models for 1000% test automation - Machiel van de...TestWorks Conf The magic of models for 1000% test automation - Machiel van de...
TestWorks Conf The magic of models for 1000% test automation - Machiel van de...Xebia Nederland BV
 
TestWorks Conf Serenity BDD in action - John Ferguson Smart
TestWorks Conf Serenity BDD in action - John Ferguson SmartTestWorks Conf Serenity BDD in action - John Ferguson Smart
TestWorks Conf Serenity BDD in action - John Ferguson SmartXebia Nederland BV
 
TestWorks Conf Scalable QA with docker - Maarten van den Ende and Adé Mochtar
TestWorks Conf Scalable QA with docker - Maarten van den Ende and Adé MochtarTestWorks Conf Scalable QA with docker - Maarten van den Ende and Adé Mochtar
TestWorks Conf Scalable QA with docker - Maarten van den Ende and Adé MochtarXebia Nederland BV
 

Más de Xebia Nederland BV (20)

The 10 tip recipe for business model innovation
The 10 tip recipe for business model innovationThe 10 tip recipe for business model innovation
The 10 tip recipe for business model innovation
 
Scan je teams!
Scan je teams!Scan je teams!
Scan je teams!
 
Holacracy: een nieuwe bodem voor de Scrum taart
Holacracy: een nieuwe bodem voor de Scrum taartHolacracy: een nieuwe bodem voor de Scrum taart
Holacracy: een nieuwe bodem voor de Scrum taart
 
3* Scrum Master
3* Scrum Master3* Scrum Master
3* Scrum Master
 
Judo Strategy
Judo StrategyJudo Strategy
Judo Strategy
 
Agile en Scrum buiten IT
Agile en Scrum buiten ITAgile en Scrum buiten IT
Agile en Scrum buiten IT
 
Scrumban
ScrumbanScrumban
Scrumban
 
Creating the right products
Creating the right productsCreating the right products
Creating the right products
 
Videoscribe je agile transitie
Videoscribe je agile transitieVideoscribe je agile transitie
Videoscribe je agile transitie
 
Sketchnote je Product Backlog Items & Sprint Retrospectives
Sketchnote je Product Backlog Items & Sprint RetrospectivesSketchnote je Product Backlog Items & Sprint Retrospectives
Sketchnote je Product Backlog Items & Sprint Retrospectives
 
Why we need test automation, but it’s not the right question
Why we need test automation, but it’s not the right questionWhy we need test automation, but it’s not the right question
Why we need test automation, but it’s not the right question
 
Testen in de transitie naar continuous delivery
Testen in de transitie naar continuous deliveryTesten in de transitie naar continuous delivery
Testen in de transitie naar continuous delivery
 
Becoming an agile enterprise, focus on the test ingredient
Becoming an agile enterprise, focus on the test ingredientBecoming an agile enterprise, focus on the test ingredient
Becoming an agile enterprise, focus on the test ingredient
 
How DUO started with Continuous Delivery and changed their way of Testing
How DUO started with Continuous Delivery and changed their way of TestingHow DUO started with Continuous Delivery and changed their way of Testing
How DUO started with Continuous Delivery and changed their way of Testing
 
Become a digital company - Case KPN / Xebia
Become a digital company - Case KPN / XebiaBecome a digital company - Case KPN / Xebia
Become a digital company - Case KPN / Xebia
 
Building a Docker powered feature driven delivery pipeline at hoyhoy.nl
Building a Docker powered feature driven delivery pipeline at hoyhoy.nlBuilding a Docker powered feature driven delivery pipeline at hoyhoy.nl
Building a Docker powered feature driven delivery pipeline at hoyhoy.nl
 
Webinar Xebia & bol.com
Webinar Xebia & bol.comWebinar Xebia & bol.com
Webinar Xebia & bol.com
 
TestWorks Conf The magic of models for 1000% test automation - Machiel van de...
TestWorks Conf The magic of models for 1000% test automation - Machiel van de...TestWorks Conf The magic of models for 1000% test automation - Machiel van de...
TestWorks Conf The magic of models for 1000% test automation - Machiel van de...
 
TestWorks Conf Serenity BDD in action - John Ferguson Smart
TestWorks Conf Serenity BDD in action - John Ferguson SmartTestWorks Conf Serenity BDD in action - John Ferguson Smart
TestWorks Conf Serenity BDD in action - John Ferguson Smart
 
TestWorks Conf Scalable QA with docker - Maarten van den Ende and Adé Mochtar
TestWorks Conf Scalable QA with docker - Maarten van den Ende and Adé MochtarTestWorks Conf Scalable QA with docker - Maarten van den Ende and Adé Mochtar
TestWorks Conf Scalable QA with docker - Maarten van den Ende and Adé Mochtar
 

Último

Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DaySri Ambati
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 

Último (20)

Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 

TestWorks Conf Performance testing made easy with gatling - Guillaume Corré

  • 1. © Gatling 2015.All rights reserved. Requirements Background in programming 1. Object oriented language mostly 2. Functional programming is a plus, but optional Experience 1. Gatling? 2. Scala? 1
  • 2. © Gatling 2015.All rights reserved. LoadTesting Done Right http://gatling.io Guillaume Corré @notdryft 2
  • 3. © Gatling 2015.All rights reserved. Workshop Schedule 1. Architecture 2. Usage 3. Exercises 3
  • 4. © Gatling 2015.All rights reserved. Workshop Schedule 1. Architecture 2. Usage 3. Exercises 4
  • 5. © Gatling 2015.All rights reserved. Gatling:Architecture Designed for: 1. Complex use cases 2. High Performance 3. Maintainability 5
  • 6. © Gatling 2015.All rights reserved. Gatling:Architecture High Performance Optimize thread usage: 1. Non Blocking IO 2. Message oriented orchestration 6
  • 7. © Gatling 2015.All rights reserved. Gatling:Architecture High Performance 7
  • 8. © Gatling 2015.All rights reserved. Gatling:Architecture Maintainability Code 1. Real programming language 2. DSL 3. API 8
  • 9. © Gatling 2015.All rights reserved. Gatling:Architecture Maintainability Why? 1. Versioning 2. Refactoring 3. Peer review 4. Composition 9
  • 10. © Gatling 2015.All rights reserved. Gatling:Architecture Maintainability 10 class Simple extends Simulation { val scn = scenario("simple") .exec( http("home") .get("http://gatling.io") .check(status.is(200))) setUp( scn.inject( atOnceUsers(1))) }
  • 11. © Gatling 2015.All rights reserved. Workshop Schedule 1. Architecture 2. Usage 3. Exercises 11
  • 12. © Gatling 2015.All rights reserved. Gatling: Usage 12
  • 13. © Gatling 2015.All rights reserved. Usage: DSL Extensive documentation: http://gatling.io/#/docs Cheat-sheet: http://gatling.io/docs/2.1.7/cheat-sheet.html 13
  • 14. © Gatling 2015.All rights reserved. Usage:Very Fast Track Step 1: Create a Simulation class 14 import io.gatling.core.Predef._ import io.gatling.http.Predef._ import scala.concurrent.duration._ class Simple extends Simulation { }
  • 15. © Gatling 2015.All rights reserved. Usage:Very Fast Track Step 2: Create a Scenario 15 import … class Simple extends Simulation { val scn = scenario("simple") }
  • 16. © Gatling 2015.All rights reserved. Usage:Very Fast Track Step 3: Chain Actions 16 import … class Simple extends Simulation { val scn = scenario("simple") .exec( http("home") .get("http://gatling.io")) }
  • 17. © Gatling 2015.All rights reserved. Usage:Very Fast Track Step 4: Check your requests are fine 17 import … class Simple extends Simulation { val scn = scenario("simple") .exec( http("home") .get("http://gatling.io") .check(status.is(200)) }
  • 18. © Gatling 2015.All rights reserved. Usage:Very Fast Track Step 5: Set up and inject users 18 import … class Simple extends Simulation { val scn = scenario("simple") .exec( http("home") .get("http://gatling.io") .check(status.is(200)) setUp(scn.inject(atOnceUsers(1))) }
  • 19. © Gatling 2015.All rights reserved. Usage:Very Fast Track Step 6: Make things dynamic 19 // Set up virtual users with feeders feed(csv("credentials.csv"))
  • 20. © Gatling 2015.All rights reserved. Usage:Very Fast Track Step 6: Make things dynamic 20 // Capture response data with checks http("request") .get("url") .check(css("someSelector").saveAs("someVariable"))
  • 21. © Gatling 2015.All rights reserved. Usage:Very Fast Track Step 6: Make things dynamic 21 // Craft requests with the Expression Language http("request") .get("/foo?bar=${someVariable}")
  • 22. © Gatling 2015.All rights reserved. Usage:Very Fast Track Step 6: Make things dynamic 22 // Use functions exec { session => println(session) session }
  • 23. © Gatling 2015.All rights reserved. Usage:Very Fast Track Expressions 23 type Expression[T] = Session => Validation[T]
  • 24. © Gatling 2015.All rights reserved. Workshop Schedule 1. Architecture 2. Usage 3. Exercises 24
  • 25. © Gatling 2015.All rights reserved. Workshop 4 exercises 1. Ranged from (almost) easy to difficult 2. Each pinpoint different specifics of Gatling Url bit.ly/gatling-workshop Documentation reminder http://gatling.io/#/docs http://gatling.io/docs/2.1.7/cheat-sheet.html 25
  • 26. © Gatling 2015.All rights reserved. Exercise 1: 1. First Request What happens if you don't do any checks? 1. Gatling adds a status check by default 26
  • 27. © Gatling 2015.All rights reserved. Exercise 1: 1. First Request Are there any defaults? If so, which? 1. status.in 2. All statuses of the 20x family 3. 304 27
  • 28. © Gatling 2015.All rights reserved. Exercise 1: 3. Checks Which check should you use to fetch the title ? 1. Regex 1. Most the time harder to maintain 2. Still does the job pretty well 2. XPath 1. HTML needs to be strict and well formed 3. CSS is easy to read and fast 1. css("#logo-section a", "title") 28
  • 29. © Gatling 2015.All rights reserved. Exercise 1: 3. Checks What happens when a check matches more than a single element? 1. exists by default 2. And, if you don’t specify a fetch method but try to save, Gatling will add a find(0) before saveAs 29
  • 30. © Gatling 2015.All rights reserved. Exercise 1: 4. Information retrieval 30 Which check should you use to fetch the menu links ? 1. css("#main-menu-inner > ul > li > a", "href")
  • 31. © Gatling 2015.All rights reserved. Exercise 1: 4. Information retrieval How can you save all matches? 1. findAll 31
  • 32. © Gatling 2015.All rights reserved. Exercise 1: 4. Information retrieval How can you access the “menuLinks” attribute? 1. Use the exec { session => … } syntax 2. session(“menuLinks”) for extraction 3. Then, either 1. as[Type] 2. asOption[Type] 3. validate[Type] 4. Validate recommended unless you know what you are doing 32
  • 33. © Gatling 2015.All rights reserved. Exercise 1: 4. Iterate over menu links Which DSL element should you use? 1. foreach 2. Takes an Expression[String] as its first argument 1. Which is a function of Session toValidation[String] 3. Gatling does the EL conversion for you 33
  • 34. © Gatling 2015.All rights reserved. Exercise 1: 4. Iterate over menu links How do think it works behind the hood? 1. Iterate over each element 2. Put current element into the session as an attribute 3. Run the action block with the new session 34
  • 35. © Gatling 2015.All rights reserved. Exercise 2: 1. Fetch the login page Which baseURL should you use? 1. Gatling doesn’t add a / before concatenating 2. One of the following 1. baseURL(“https://github.com”) and get(“/login”) 2. baseURL(“https://github.com/“) and get(“login”) 3. Prefer the first one 35
  • 36. © Gatling 2015.All rights reserved. Exercise 2: 1. Fetch the login page Which check should you use? 1. The general idea is to make sure you are on the page you requested 2. css(".auth-form form h1").is("Sign in") 36
  • 37. © Gatling 2015.All rights reserved. Exercise 2: 2.1. Performing the login Which request should you do? 1. /session Which HTTP method does it need to use? 2. POST 37
  • 38. © Gatling 2015.All rights reserved. Exercise 2: 2.2. Specifying additional parameters Do you think these are generated or provided? 1. Generated by Github, provided in the HTML. Where can you fetch thoses? 2. Add a check to the previous request 3. css(".auth-form form input[name='authenticity_token']", “value").saveAs("authenticityToken") 38
  • 39. © Gatling 2015.All rights reserved. Exercise 2: 3. Checks Which checks should you use to be sure you are logged in? 1. Check for content, titles, css, etc. 2. css(“.logged_in”) 3. exists is a default 39
  • 40. © Gatling 2015.All rights reserved. Exercise 2: 4. Feeding the credentials Which feeder file format could you use? 1. Multiple formats are handled by Gatling 1. CSV,TSV, etc. 2. Just beware of malformed files 40
  • 41. © Gatling 2015.All rights reserved. Exercise 2: 4. Feeding the credentials How does the session interact with the feeder? 1. A feeder outputs lines of CSV (and else) files into the session 2. One line per user, with different methods of retrieval 1. Queue, failure when reading is over 2. Random 3. Shuffle, which is a shuffle + queue 4. Circular 3. If you want more, you can skip the feeding to Gatling and fetch the records yourself 41
  • 42. © Gatling 2015.All rights reserved. Exercise 3: 1. Create gist Think of multiple ways to load the templates 1. StringBody 2. RawFileBody 3. ELFileBody, with parsed content 42
  • 43. © Gatling 2015.All rights reserved. Exercise 3: 1. Create gist Which one is better in this case? 1. All are good 2. Still, scala can handle string template pretty well 3. => StringBody 43
  • 44. © Gatling 2015.All rights reserved. Exercise 4: Part 1. 1. Start simple Is using java.util.Random a good idea in this case? What could happen if you do? 1. Random is synchronized 2. Multiples threads would block each other when fetching 3. ThreadLocalRandom is not 4. It creates a single Random for eachThread, resolving conflicts 44
  • 45. © Gatling 2015.All rights reserved. Exercise 4: Part 1. 4.A twist How does Gatling execute requests? 1. Each requests are launched in sequence 2. They cannot overlap 3. And cannot be launched asynchronously How should we proceed instead? 45
  • 46. © Gatling 2015.All rights reserved. Exercise 4: Part 1. 4.A twist How does Gatling execute requests? 1. Each requests are launched in sequence 2. They cannot overlap 3. And cannot be launched asynchronously How should we proceed instead? 4. We can use the resources mechanism 5. Not its purpose, but it will work 46
  • 47. © Gatling 2015.All rights reserved. Exercise 4: Part 1I. 2. Making the queries Is the number of tiles requested really fixed? 1. What about edges ? 2. Will reduce the number of tiles 3. We can reduce the bounds, excluding the edges 47
  • 48. © Gatling 2015.All rights reserved. Exercise 4: Part 1I. 2. Making the queries Mixing Gatling’s EL and Scala’s String Macro 1. This a Gatling EL:“${variableName}” 2. Theses are Scala Macros: 1. s”$variableName” 2. s”${variableName} How? 48
  • 49. © Gatling 2015.All rights reserved. Exercise 4: Part 1I. 2. Making the queries Mixing Gatling’s EL and Scala’s String Macro 1. This a Gatling EL:“${variableName}” 2. Theses are Scala Macros: 1. s”$variableName” 2. s”${variableName} How? 1. Escape Gatling’s EL when in a Scala String Macro 1. s”$${gatlingVariable}/${otherVariable}” 2. will output “${gatlingVariable}/variableContent” 49
  • 50. © Gatling 2015.All rights reserved. Workshop Solutions 1. Not available yet Url bit.ly/gatling-workshop-solutions 50
  • 51. © Gatling 2015.All rights reserved.
  • 52. © Gatling 2015.All rights reserved. http://gatling.io http://github.com/gatling/gatling @GatlingTool