Upload
rodolphe-quiedeville
View
346
Download
0
Embed Size (px)
DESCRIPTION
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.
Citation preview
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