View
3.126
Download
1
Category
Preview:
DESCRIPTION
Gatling Tool in Action talk @DevoxxFr 2012. Gatling is an effecient asynchronous stress test tool. http://gatling-tool.org
Citation preview
1
Réaliser destests de charge
avec Gatlingpar Stéphane Landelle @slandelle
& Romain Sertelon @BluePyth
2
Plan
•Pourquoi un nième injecteur ?
•Solution
•Démo
3
Pourquoi un nième injecteur ?
4
Problème 1:
Les performances
5
1 utilisateur = 1 thread
6
~50 threads/JVM
7
~2000 threads/JVM
8
IO bloquants
9
Au fait, que font ces threads?
Ils attendent…
10
Et sinon?
Ils dorment…
11
Problème 2:
Utilisabilité & Maintenabilité
12
Une interface graphique ?
13
Du XML ?<?xml version="1.0" encoding="UTF-8"?><jmeterTestPlan version="1.2" properties="2.1"> <hashTree> <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test Plan" enabled="true"> <stringProp name="TestPlan.comments"></stringProp> <boolProp name="TestPlan.functional_mode">false</boolProp> <boolProp name="TestPlan.serialize_threadgroups">false</boolProp> <elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments"> <collectionProp name="Arguments.arguments"/> </elementProp> <stringProp name="TestPlan.user_define_classpath"></stringProp> </TestPlan> <hashTree> <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true"> <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel"> <boolProp name="LoopController.continue_forever">false</boolProp> <stringProp name="LoopController.loops">1</stringProp> </elementProp> <stringProp name="ThreadGroup.num_threads">1500</stringProp> <stringProp name="ThreadGroup.ramp_time">200</stringProp>
14
Solution
•Portable (JVM)
•Réellement asynchrone
•Ergonomique
•Evolutive
15
Async = Acteurs
16
Async = IO non bloquants
•Netty
•Async Http Client
17
Scénarios=
DSL
18
Scénarios = code val scn = scenario("My Scenario") .exec(http("Login page").get("/login.html"))
.exec(http("Login").post("/login") .param("username", "foo") .param("password", "bar"))
.loop( chain.exec(http("Home").get("/home.html") .check(regex("""<a href="/account/(ACC[0-9]*)">""")) ) ).times(5)
19
Démo !
20
Screenshot recorder 1
21
Screenshot recorder 2
22
Conclusion
http://gatling-tool.org
@GatlingTool
https://github.com/excilys/gatling
Recommended