de 1 à 1 million avec Tsung

Post on 20-May-2015

347 views 0 download

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.

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

rodolphe@quiedeville.orghttp://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