de 1 à 1 million avec Tsung
-
Upload
rodolphe-quiedeville -
Category
Technology
-
view
346 -
download
0
description
Transcript of de 1 à 1 million avec Tsung
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
Ma pomme
Administrateur système et réseaux tendance DevOpsNourri de logiciel libre depuis 15 ansSigne astrologeek debian ascendant emacsContributeur à Tsung
Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 2 / 53
Qu’est-ce qu’un test de performance ?chargerésistancevieillissementmontée en chargeconfigurationpics de charge
Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 3 / 53
Qu’est-ce qu’un test de performance ?chargerésistancevieillissementmontée en chargeconfigurationpics de charge
Simulation au plus près du réel des conditions d’exploitation d’unsystème.
Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 4 / 53
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 octobre 2013 6 / 53
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
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 ; aurisque de pertes de temps et de pertinence dans l’analyse desrésultats.
Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 8 / 53
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 situationclient mécontent
Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 11 / 53
La situationclient mécontentboss pas content
Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 12 / 53
La situationclient mécontentboss pas contentchef de projet serre les dents
Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 13 / 53
La situationclient mécontentboss pas contentchef de projet serre les dentssoirée de foutue
Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 14 / 53
Mais pourquoi ?
Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 15 / 53
Quelle peut être la cause ?
Inputssur consommation de CPUsaturation de mémoiresaturation des iolock sur la base de donnéessaturation lien réseaufilesystem plein...
Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 16 / 53
Le site préféré des développeurs ?
Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 17 / 53
chez-moi-ca-marche.com
Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 18 / 53
Cas d’écoleplusieurs dizaines de photos sur la home
Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 19 / 53
Cas d’écoleplusieurs dizaines de photos sur la homeimages servies par un cgi
Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 20 / 53
Cas d’écoleplusieurs dizaines de photos sur la homeimages servies par un cgisources des images non maitrisées
Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 21 / 53
Cas d’écoleplusieurs dizaines de photos sur la homeimages servies par un cgisources des images non maitriséespas de limites sur la taille des images
Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 22 / 53
Cas d’écoleplusieurs dizaines de photos sur la homeimages servies par un cgisources des images non maitriséespas de limites sur la taille des imagesresize des images à la volée
Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 23 / 53
Cas d’écoleplusieurs dizaines de photos sur la homeimages servies par un cgisources des images non maitriséespas de limites sur la taille des imagesresize des images à la voléepas de stockage de l’image retaillée
Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 24 / 53
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 retourSituation : problème de performance sur l’affichage de la homepageen production
Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 28 / 53
Cas d’école, le retoursituation : problème de performance sur l’affichage de la homepage enproduction
lecture de logs# grep -c "GET / " access.log
Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 29 / 53
Cas d’école, le retoursituation : problème de performance sur l’affichage de la homepage enproduction
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
Cas d’école, le retoursituation : problème de performance sur l’affichage de la homepage enproduction
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
Cas d’école, le retoursituation : problème de performance sur l’affichage de la homepage enproduction
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
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ôleur0 à N injecteursune cibleun scenariodes logsdes rapports de résultats
Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 34 / 53
Action !
Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 35 / 53
Installation
apt-get install tsungyum install tsung...git clone && ./configure && make installmake deb rpm
Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 36 / 53
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
Scenario
La cible
ExampleSimple<servers>
<server host="www.target.fr" port="8080" type="tcp" /></servers>
ExampleComplexe<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
Scenario
Les injecteurs
ExampleSimple<clients>
<client host="foo" weight="1" /></clients>
ExampleComplexe<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
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
Scenario
Création du scenario
En mode proxy$ tsung-recorder startStarting 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
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
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
Les résultats
Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 44 / 53
Fonctions avancées
variables dynamiquesgestion des cookies automatiqueanalyse du résulatthinktimedonnées aléatoiresextension par modules erlangboucles et tests...
Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 45 / 53
match
L’élément match permet de déclencher une action suivant le contenudu 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
dyn_variable
Les variables dynamiques sont initialisées par lecture du résultat d’uneaction 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
dyn_variable
Les variables dynamiques sont initialisées par lecture du résultat d’uneaction 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
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
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
Quelques conseils
commencez au plus tôt la rédaction des scénarioscréez vos données de test avec l’outil de testarchitecture de pre-prod au plus près de la prodle dernier test pour la route en prod
Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 51 / 53
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 #tsungML, https://lists.process-one.net/mailman/listinfo/tsung-users
Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 52 / 53
Questions ?
Rodolphe Quiédeville
[email protected]://blog.rodolphe.quiedeville.org/
Document publié sous Licence Creative Commons BY-SA 2.0Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 53 / 53