Transcript
Page 1: 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

Page 2: de 1 à 1 million avec Tsung

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

Page 3: de 1 à 1 million avec Tsung

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

Page 4: de 1 à 1 million avec Tsung

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

Page 5: de 1 à 1 million avec Tsung

Ce n’est pas!= test unitaire

Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 5 / 53

Page 6: de 1 à 1 million avec Tsung

Ce n’est pas!= test unitaire!= test fonctionnel

Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 6 / 53

Page 7: de 1 à 1 million avec Tsung

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

Page 8: de 1 à 1 million avec Tsung

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

Page 9: de 1 à 1 million avec Tsung

A quoi cela sert-il ?

Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 9 / 53

Page 10: de 1 à 1 million avec Tsung

A éviter cela

Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 10 / 53

Page 11: de 1 à 1 million avec Tsung

La situationclient mécontent

Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 11 / 53

Page 12: de 1 à 1 million avec Tsung

La situationclient mécontentboss pas content

Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 12 / 53

Page 13: de 1 à 1 million avec Tsung

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

Page 14: de 1 à 1 million avec Tsung

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

Page 15: de 1 à 1 million avec Tsung

Mais pourquoi ?

Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 15 / 53

Page 16: de 1 à 1 million avec Tsung

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

Page 17: de 1 à 1 million avec Tsung

Le site préféré des développeurs ?

Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 17 / 53

Page 18: de 1 à 1 million avec Tsung

chez-moi-ca-marche.com

Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 18 / 53

Page 19: de 1 à 1 million avec Tsung

Cas d’écoleplusieurs dizaines de photos sur la home

Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 19 / 53

Page 20: de 1 à 1 million avec Tsung

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

Page 21: de 1 à 1 million avec Tsung

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

Page 22: de 1 à 1 million avec Tsung

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

Page 23: de 1 à 1 million avec Tsung

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

Page 24: de 1 à 1 million avec Tsung

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

Page 25: de 1 à 1 million avec Tsung

chez-moi-ca-marche.com

Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 25 / 53

Page 26: de 1 à 1 million avec Tsung

mais pas en prod !

Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 26 / 53

Page 27: de 1 à 1 million avec Tsung

So 90’s, now is web 2.0 !

Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 27 / 53

Page 28: de 1 à 1 million avec Tsung

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

Page 29: de 1 à 1 million avec Tsung

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

Page 30: de 1 à 1 million avec Tsung

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

Page 31: de 1 à 1 million avec Tsung

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

Page 32: de 1 à 1 million avec Tsung

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

Page 33: de 1 à 1 million avec Tsung

Chargeons Tsung de nous aider

Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 33 / 53

Page 34: de 1 à 1 million avec Tsung

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

Page 35: de 1 à 1 million avec Tsung

Action !

Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 35 / 53

Page 36: de 1 à 1 million avec Tsung

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

Page 37: de 1 à 1 million avec Tsung

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

Page 38: de 1 à 1 million avec Tsung

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

Page 39: de 1 à 1 million avec Tsung

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

Page 40: de 1 à 1 million avec Tsung

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

Page 41: de 1 à 1 million avec Tsung

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

Page 42: de 1 à 1 million avec Tsung

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

Page 43: de 1 à 1 million avec Tsung

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

Page 44: de 1 à 1 million avec Tsung

Les résultats

Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 44 / 53

Page 45: de 1 à 1 million avec Tsung

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

Page 46: de 1 à 1 million avec Tsung

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

Page 47: de 1 à 1 million avec Tsung

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

Page 48: de 1 à 1 million avec Tsung

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

Page 49: de 1 à 1 million avec Tsung

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

Page 50: de 1 à 1 million avec Tsung

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

Page 51: de 1 à 1 million avec Tsung

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

Page 52: de 1 à 1 million avec Tsung

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

Page 53: de 1 à 1 million avec Tsung

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


Recommended