de 1 à 1 million avec Tsung
Rodolphe Quiédeville
La Cantine - Nantes

22 octobre 2013

Rodolphe Quiédeville (Freelance)

d...
Ma pomme

Administrateur système et réseaux tendance DevOps
Nourri de logiciel libre depuis 15 ans
Signe astrologeek debia...
Qu’est-ce qu’un test de performance ?
charge
résistance
vieillissement
montée en charge
configuration
pics de charge

Rodol...
Qu’est-ce qu’un test de performance ?
charge
résistance
vieillissement
montée en charge
configuration
pics de charge
Simula...
Ce n’est pas
!= test unitaire

Rodolphe Quiédeville (Freelance)

de 1 à 1 million avec Tsung

22 octobre 2013

5 / 53
Ce n’est pas
!= test unitaire
!= test fonctionnel

Rodolphe Quiédeville (Freelance)

de 1 à 1 million avec Tsung

22 octob...
Ce n’est pas
!= test unitaire
!= test fonctionnel
!= test de conformité

Rodolphe Quiédeville (Freelance)

de 1 à 1 millio...
Ce n’est pas
!= test unitaire
!= test fonctionnel
!= test de conformité
Ces tests ont été réalisés avant d’effectuer les t...
A quoi cela sert-il ?

Rodolphe Quiédeville (Freelance)

de 1 à 1 million avec Tsung

22 octobre 2013

9 / 53
A éviter cela

Rodolphe Quiédeville (Freelance)

de 1 à 1 million avec Tsung

22 octobre 2013

10 / 53
La situation
client mécontent

Rodolphe Quiédeville (Freelance)

de 1 à 1 million avec Tsung

22 octobre 2013

11 / 53
La situation
client mécontent
boss pas content

Rodolphe Quiédeville (Freelance)

de 1 à 1 million avec Tsung

22 octobre ...
La situation
client mécontent
boss pas content
chef de projet serre les dents

Rodolphe Quiédeville (Freelance)

de 1 à 1 ...
La situation
client mécontent
boss pas content
chef de projet serre les dents
soirée de foutue

Rodolphe Quiédeville (Free...
Mais pourquoi ?

Rodolphe Quiédeville (Freelance)

de 1 à 1 million avec Tsung

22 octobre 2013

15 / 53
Quelle peut être la cause ?
Inputs
sur consommation de CPU
saturation de mémoire
saturation des io
lock sur la base de don...
Le site préféré des développeurs ?

Rodolphe Quiédeville (Freelance)

de 1 à 1 million avec Tsung

22 octobre 2013

17 / 5...
chez-moi-ca-marche.com

Rodolphe Quiédeville (Freelance)

de 1 à 1 million avec Tsung

22 octobre 2013

18 / 53
Cas d’école
plusieurs dizaines de photos sur la home

Rodolphe Quiédeville (Freelance)

de 1 à 1 million avec Tsung

22 oc...
Cas d’école
plusieurs dizaines de photos sur la home
images servies par un cgi

Rodolphe Quiédeville (Freelance)

de 1 à 1...
Cas d’école
plusieurs dizaines de photos sur la home
images servies par un cgi
sources des images non maitrisées

Rodolphe...
Cas d’école
plusieurs dizaines de photos sur la home
images servies par un cgi
sources des images non maitrisées
pas de li...
Cas d’école
plusieurs dizaines de photos sur la home
images servies par un cgi
sources des images non maitrisées
pas de li...
Cas d’école
plusieurs dizaines de photos sur la home
images servies par un cgi
sources des images non maitrisées
pas de li...
chez-moi-ca-marche.com

Rodolphe Quiédeville (Freelance)

de 1 à 1 million avec Tsung

22 octobre 2013

25 / 53
mais pas en prod !

Rodolphe Quiédeville (Freelance)

de 1 à 1 million avec Tsung

22 octobre 2013

26 / 53
So 90’s, now is web 2.0 !

Rodolphe Quiédeville (Freelance)

de 1 à 1 million avec Tsung

22 octobre 2013

27 / 53
Cas d’école, le retour
Situation : problème de performance sur l’affichage de la homepage
en production

Rodolphe Quiédevil...
Cas d’école, le retour
situation : problème de performance sur l’affichage de la homepage en
production

lecture de logs
# ...
Cas d’école, le retour
situation : problème de performance sur l’affichage de la homepage en
production

lecture de logs
# ...
Cas d’école, le retour
situation : problème de performance sur l’affichage de la homepage en
production

lecture de logs
# ...
Cas d’école, le retour
situation : problème de performance sur l’affichage de la homepage en
production

lecture de logs
# ...
Chargeons Tsung de nous aider

Rodolphe Quiédeville (Freelance)

de 1 à 1 million avec Tsung

22 octobre 2013

33 / 53
Principe de fonctionnement

un contrôleur
0 à N injecteurs
une cible
un scenario
des logs
des rapports de résultats

Rodol...
Action !

Rodolphe Quiédeville (Freelance)

de 1 à 1 million avec Tsung

22 octobre 2013

35 / 53
Installation

apt-get install tsung
yum install tsung
...
git clone && ./configure && make install
make deb rpm

Rodolphe Q...
Scenario
Example
<?xml version="1.0"?>
<!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd">
<tsung loglevel="debug" du...
Scenario
La cible

Example
Simple
<servers>
<server host="www.target.fr" port="8080" type="tcp" />
</servers>

Example
Com...
Scenario
Les injecteurs

Example
Simple
<clients>
<client host="foo" weight="1" />
</clients>

Example
Complexe
<clients>
...
Scenario

La charge

Example
<load>
<arrivalphase phase="1" duration="10" unit="minute">
<users arrivalrate="1" unit="seco...
Scenario

Création du scenario

En mode proxy
$ tsung-recorder start
Starting Tsung recorder on port 8090
"Record file: /h...
Scenario

Les requêtes

Example
<request>
<http url="/" method="GET" version="1.1" />
</request>
<request>
<http url="/api...
Scenario

Sur le contrôleur

Exécution
$ tsung -f scenario.xml -l logs/ start

Rodolphe Quiédeville (Freelance)

de 1 à 1 ...
Les résultats

Rodolphe Quiédeville (Freelance)

de 1 à 1 million avec Tsung

22 octobre 2013

44 / 53
Fonctions avancées

variables dynamiques
gestion des cookies automatique
analyse du résulat
thinktime
données aléatoires
e...
match

L’élément match permet de déclencher une action suivant le contenu
du résultat de la requête.

Example
<request>
<m...
dyn_variable

Les variables dynamiques sont initialisées par lecture du résultat d’une
action et peuvent être ré-utilisées...
dyn_variable

Les variables dynamiques sont initialisées par lecture du résultat d’une
action et peuvent être ré-utilisées...
dyn_variable

Lecture d’un fichier JSON

Example
<request>
<dyn_variable name="nb_page" jsonpath="field.array[3].value"/>
<...
dyn_variable

Utilisation du xpath

Example
<request>
<dyn_variable name="field1_value" xpath="//div[2]/@value"/>
<http ur...
Quelques conseils

commencez au plus tôt la rédaction des scénarios
créez vos données de test avec l’outil de test
archite...
Contribuer

Docs, https://tsung.readthedocs.org/
Code, https://github.com/processone/tsung/
CI, http:
//jenkins.quiedevill...
Questions ?
Rodolphe Quiédeville
rodolphe@quiedeville.org
http://blog.rodolphe.quiedeville.org/

Rodolphe Quiédeville (Fre...
Prochain SlideShare
Chargement dans…5
×

de 1 à 1 million avec Tsung

679 vues

Publié le

Présentation des tests de performance et de leur mise en pratique avec Tsung. Description du fonctionnement de Tsung de son mécanisme de base et de ses fonctions avancées.

Publié dans : Technologie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
679
Sur SlideShare
0
Issues des intégrations
0
Intégrations
10
Actions
Partages
0
Téléchargements
5
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

de 1 à 1 million avec Tsung

  1. 1. de 1 à 1 million avec Tsung Rodolphe Quiédeville La Cantine - Nantes 22 octobre 2013 Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 1 / 53
  2. 2. Ma pomme Administrateur système et réseaux tendance DevOps Nourri de logiciel libre depuis 15 ans Signe astrologeek debian ascendant emacs Contributeur à Tsung Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 2 / 53
  3. 3. Qu’est-ce qu’un test de performance ? charge résistance vieillissement montée en charge configuration pics de charge Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 3 / 53
  4. 4. Qu’est-ce qu’un test de performance ? charge résistance vieillissement montée en charge configuration pics de charge Simulation au plus près du réel des conditions d’exploitation d’un système. Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 4 / 53
  5. 5. Ce n’est pas != test unitaire Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 5 / 53
  6. 6. Ce n’est pas != test unitaire != test fonctionnel Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 6 / 53
  7. 7. Ce n’est pas != test unitaire != test fonctionnel != test de conformité Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 7 / 53
  8. 8. Ce n’est pas != test unitaire != test fonctionnel != test de conformité Ces tests ont été réalisés avant d’effectuer les tests de charge ; au risque de pertes de temps et de pertinence dans l’analyse des résultats. Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 8 / 53
  9. 9. A quoi cela sert-il ? Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 9 / 53
  10. 10. A éviter cela Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 10 / 53
  11. 11. La situation client mécontent Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 11 / 53
  12. 12. La situation client mécontent boss pas content Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 12 / 53
  13. 13. La situation client mécontent boss pas content chef de projet serre les dents Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 13 / 53
  14. 14. La situation client mécontent boss pas content chef de projet serre les dents soirée de foutue Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 14 / 53
  15. 15. Mais pourquoi ? Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 15 / 53
  16. 16. Quelle peut être la cause ? Inputs sur consommation de CPU saturation de mémoire saturation des io lock sur la base de données saturation lien réseau filesystem plein ... Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 16 / 53
  17. 17. Le site préféré des développeurs ? Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 17 / 53
  18. 18. chez-moi-ca-marche.com Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 18 / 53
  19. 19. Cas d’école plusieurs dizaines de photos sur la home Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 19 / 53
  20. 20. Cas d’école plusieurs dizaines de photos sur la home images servies par un cgi Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 20 / 53
  21. 21. Cas d’école plusieurs dizaines de photos sur la home images servies par un cgi sources des images non maitrisées Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 21 / 53
  22. 22. Cas d’école plusieurs dizaines de photos sur la home images servies par un cgi sources des images non maitrisées pas de limites sur la taille des images Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 22 / 53
  23. 23. Cas d’école plusieurs dizaines de photos sur la home images servies par un cgi sources des images non maitrisées pas de limites sur la taille des images resize des images à la volée Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 23 / 53
  24. 24. Cas d’école plusieurs dizaines de photos sur la home images servies par un cgi sources des images non maitrisées pas de limites sur la taille des images resize des images à la volée pas de stockage de l’image retaillée Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 24 / 53
  25. 25. chez-moi-ca-marche.com Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 25 / 53
  26. 26. mais pas en prod ! Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 26 / 53
  27. 27. So 90’s, now is web 2.0 ! Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 27 / 53
  28. 28. Cas d’école, le retour Situation : problème de performance sur l’affichage de la homepage en production Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 28 / 53
  29. 29. Cas d’école, le retour situation : problème de performance sur l’affichage de la homepage en production lecture de logs # grep -c "GET / " access.log Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 29 / 53
  30. 30. Cas d’école, le retour situation : problème de performance sur l’affichage de la homepage en production lecture de logs # grep -c "GET / " access.log # 23 000 Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 30 / 53
  31. 31. Cas d’école, le retour situation : problème de performance sur l’affichage de la homepage en production lecture de logs # grep -c "GET / " access.log # 23 000 # grep -c "GET /api/v1/foo?format=json" access.log Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 31 / 53
  32. 32. Cas d’école, le retour situation : problème de performance sur l’affichage de la homepage en production lecture de logs # grep -c "GET / " access.log # 23 000 # grep -c "GET /api/v1/foo?format=json" access.log # 300 000 Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 32 / 53
  33. 33. Chargeons Tsung de nous aider Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 33 / 53
  34. 34. Principe de fonctionnement un contrôleur 0 à N injecteurs une cible un scenario des logs des rapports de résultats Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 34 / 53
  35. 35. Action ! Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 35 / 53
  36. 36. Installation apt-get install tsung yum install tsung ... git clone && ./configure && make install make deb rpm Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 36 / 53
  37. 37. Scenario Example <?xml version="1.0"?> <!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd"> <tsung loglevel="debug" dumptraffic="protocol" version="1.0"> <clients /> <servers /> <options /> <load> <arrivalphase /> </load> <sessions> <session> <transaction /> <transaction /> </session> </sessions> </tsung> Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 37 / 53
  38. 38. Scenario La cible Example Simple <servers> <server host="www.target.fr" port="8080" type="tcp" /> </servers> Example Complexe <servers> <server host="192.168.0.1" port="80" weight="2" type="tcp" /> <server host="192.168.0.2" port="80" weight="1" type="tcp" /> </servers> Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 38 / 53
  39. 39. Scenario Les injecteurs Example Simple <clients> <client host="foo" weight="1" /> </clients> Example Complexe <clients> <client host="foo" weight="1"> <ip value="10.9.195.12"></ip> <ip value="10.9.195.13"></ip> </client> <client host="bar" weight="2" /> </clients> Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 39 / 53
  40. 40. Scenario La charge Example <load> <arrivalphase phase="1" duration="10" unit="minute"> <users arrivalrate="1" unit="second"></users> </arrivalphase> <arrivalphase phase="2" duration="60" unit="minute"> <users arrivalrate="10" unit="second"></users> </arrivalphase> </load> Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 40 / 53
  41. 41. Scenario Création du scenario En mode proxy $ tsung-recorder start Starting Tsung recorder on port 8090 "Record file: /home/rodo/.tsung/tsung_recorder20131003-1633.xml" Depuis les logs $ log2tsung.pl Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 41 / 53
  42. 42. Scenario Les requêtes Example <request> <http url="/" method="GET" version="1.1" /> </request> <request> <http url="/api/v1/foo?format=json" method="GET" version="1.1" /> </request> Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 42 / 53
  43. 43. Scenario Sur le contrôleur Exécution $ tsung -f scenario.xml -l logs/ start Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 43 / 53
  44. 44. Les résultats Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 44 / 53
  45. 45. Fonctions avancées variables dynamiques gestion des cookies automatique analyse du résulat thinktime données aléatoires extension par modules erlang boucles et tests ... Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 45 / 53
  46. 46. match L’élément match permet de déclencher une action suivant le contenu du résultat de la requête. Example <request> <match do="loop" sleep_loop="5" max_loop="10" when="match">Retry</match> <match do="abort" when="match">Error</match> <http url="/index.php" method="GET"> </request> Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 46 / 53
  47. 47. dyn_variable Les variables dynamiques sont initialisées par lecture du résultat d’une action et peuvent être ré-utilisées dans les actions suivantes. Example <request> <dyn_variable name="nb_page" re="Page d+ on (d+)" /> <http url="/articles" method="GET" version="1.1" ></http> </request> <request subst="true"> <http url="/articles?page=%%_nb_page%%" method="GET" version="1.1" ></http> </request> Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 47 / 53
  48. 48. dyn_variable Les variables dynamiques sont initialisées par lecture du résultat d’une action et peuvent être ré-utilisées dans les actions suivantes. Example <request> <dyn_variable name="nb_page" re="Page d+ on (d+)" /> <http url="/articles" method="GET" version="1.1" ></http> </request> <request subst="true"> <http url="/articles?page=%%_nb_page%%" method="GET" version="1.1" ></http> </request> Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 48 / 53
  49. 49. dyn_variable Lecture d’un fichier JSON Example <request> <dyn_variable name="nb_page" jsonpath="field.array[3].value"/> <http url="/articles" method="GET" version="1.1" ></http> </request> <request subst="true"> <http url="/articles?page=%%_nb_page%%" method="GET" version="1.1" ></http> </request> Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 49 / 53
  50. 50. dyn_variable Utilisation du xpath Example <request> <dyn_variable name="field1_value" xpath="//div[2]/@value"/> <http url="/articles" method="GET" version="1.1" ></http> </request> Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 50 / 53
  51. 51. Quelques conseils commencez au plus tôt la rédaction des scénarios créez vos données de test avec l’outil de test architecture de pre-prod au plus près de la prod le dernier test pour la route en prod Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 51 / 53
  52. 52. Contribuer Docs, https://tsung.readthedocs.org/ Code, https://github.com/processone/tsung/ CI, http: //jenkins.quiedeville.org/view/Tsung/job/Tsung/ Bugtrack, https://support.process-one.net/browse/TSUN Irc, freenode #tsung ML, https://lists.process-one.net/mailman/ listinfo/tsung-users Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 52 / 53
  53. 53. Questions ? Rodolphe Quiédeville rodolphe@quiedeville.org http://blog.rodolphe.quiedeville.org/ Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 53 / 53

×