SlideShare a Scribd company logo
1 of 53
Download to read offline
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 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
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
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
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 ; 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
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 2013

12 / 53
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
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
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 données
saturation lien réseau
filesystem 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’école
plusieurs dizaines de photos sur la home

Rodolphe Quiédeville (Freelance)

de 1 à 1 million avec Tsung

22 octobre 2013

19 / 53
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
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
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
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
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
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édeville (Freelance)

de 1 à 1 million avec Tsung

22 octobre 2013

28 / 53
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
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
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
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
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

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 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
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

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
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
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 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
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 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
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
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
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
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é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
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
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

More Related Content

Viewers also liked

Introduction à l’OPEN ACCESS Tout ce que vous avez toujours voulu savoir à pr...
Introduction à l’OPEN ACCESS Tout ce que vous avez toujours voulu savoir à pr...Introduction à l’OPEN ACCESS Tout ce que vous avez toujours voulu savoir à pr...
Introduction à l’OPEN ACCESS Tout ce que vous avez toujours voulu savoir à pr...MyScienceWork
 
Présentation MyScienceWork 10 ans de creative commons
Présentation MyScienceWork 10 ans de creative commonsPrésentation MyScienceWork 10 ans de creative commons
Présentation MyScienceWork 10 ans de creative commonsMyScienceWork
 
Dossier de candidature French Tech Rennes
Dossier de candidature French Tech RennesDossier de candidature French Tech Rennes
Dossier de candidature French Tech RennesAnto Rfk
 
Portofolio ELLE Québec
Portofolio ELLE QuébecPortofolio ELLE Québec
Portofolio ELLE Québeclberetti
 
Information metier hotellerie restauration personnel d'étage www.hotellerie r...
Information metier hotellerie restauration personnel d'étage www.hotellerie r...Information metier hotellerie restauration personnel d'étage www.hotellerie r...
Information metier hotellerie restauration personnel d'étage www.hotellerie r...Emploi Hotellerie Restauration
 
Comment trouver des jeux pour entraînement clavier
Comment trouver des jeux pour entraînement clavierComment trouver des jeux pour entraînement clavier
Comment trouver des jeux pour entraînement clavierdrrivedroite
 
4 directions graphiques
4 directions graphiques4 directions graphiques
4 directions graphiquesYves Goguely
 
Paper & Tactile Design par INK studio - Pixels Festival S01E01
Paper & Tactile Design par INK studio - Pixels Festival S01E01 Paper & Tactile Design par INK studio - Pixels Festival S01E01
Paper & Tactile Design par INK studio - Pixels Festival S01E01 Pixelsfestival
 
Le système boursier 4 - Les opérations sur titres
Le système boursier 4 - Les opérations sur titresLe système boursier 4 - Les opérations sur titres
Le système boursier 4 - Les opérations sur titresEsteban Giner
 
Long resume in French v3
Long resume in French v3Long resume in French v3
Long resume in French v3Luca Lorenzi
 
Neutralité axiologique et autorégulation : regard sur l'intervention en éthiq...
Neutralité axiologique et autorégulation : regard sur l'intervention en éthiq...Neutralité axiologique et autorégulation : regard sur l'intervention en éthiq...
Neutralité axiologique et autorégulation : regard sur l'intervention en éthiq...Pascale Chavaz Bengoa
 
Aide Régionale aux étudiants
Aide Régionale aux étudiantsAide Régionale aux étudiants
Aide Régionale aux étudiantsJo Anis
 
Barometre emploi jobtransport_mai2014
Barometre emploi jobtransport_mai2014Barometre emploi jobtransport_mai2014
Barometre emploi jobtransport_mai2014emploi
 
Web 2.0 et logiciels portables, en quoi sont-ils utiles dans un contexte d'en...
Web 2.0 et logiciels portables, en quoi sont-ils utiles dans un contexte d'en...Web 2.0 et logiciels portables, en quoi sont-ils utiles dans un contexte d'en...
Web 2.0 et logiciels portables, en quoi sont-ils utiles dans un contexte d'en...nomad-e-learning
 

Viewers also liked (18)

Introduction à l’OPEN ACCESS Tout ce que vous avez toujours voulu savoir à pr...
Introduction à l’OPEN ACCESS Tout ce que vous avez toujours voulu savoir à pr...Introduction à l’OPEN ACCESS Tout ce que vous avez toujours voulu savoir à pr...
Introduction à l’OPEN ACCESS Tout ce que vous avez toujours voulu savoir à pr...
 
Présentation MyScienceWork 10 ans de creative commons
Présentation MyScienceWork 10 ans de creative commonsPrésentation MyScienceWork 10 ans de creative commons
Présentation MyScienceWork 10 ans de creative commons
 
Dossier de candidature French Tech Rennes
Dossier de candidature French Tech RennesDossier de candidature French Tech Rennes
Dossier de candidature French Tech Rennes
 
Parachute
ParachuteParachute
Parachute
 
Portofolio ELLE Québec
Portofolio ELLE QuébecPortofolio ELLE Québec
Portofolio ELLE Québec
 
Information metier hotellerie restauration personnel d'étage www.hotellerie r...
Information metier hotellerie restauration personnel d'étage www.hotellerie r...Information metier hotellerie restauration personnel d'étage www.hotellerie r...
Information metier hotellerie restauration personnel d'étage www.hotellerie r...
 
Comment trouver des jeux pour entraînement clavier
Comment trouver des jeux pour entraînement clavierComment trouver des jeux pour entraînement clavier
Comment trouver des jeux pour entraînement clavier
 
4 directions graphiques
4 directions graphiques4 directions graphiques
4 directions graphiques
 
Vente Bases de Vie
Vente Bases de VieVente Bases de Vie
Vente Bases de Vie
 
Picsay 6°c
Picsay 6°cPicsay 6°c
Picsay 6°c
 
Paper & Tactile Design par INK studio - Pixels Festival S01E01
Paper & Tactile Design par INK studio - Pixels Festival S01E01 Paper & Tactile Design par INK studio - Pixels Festival S01E01
Paper & Tactile Design par INK studio - Pixels Festival S01E01
 
Le système boursier 4 - Les opérations sur titres
Le système boursier 4 - Les opérations sur titresLe système boursier 4 - Les opérations sur titres
Le système boursier 4 - Les opérations sur titres
 
Long resume in French v3
Long resume in French v3Long resume in French v3
Long resume in French v3
 
Analyse japon leonard ss14 final
Analyse japon leonard ss14 finalAnalyse japon leonard ss14 final
Analyse japon leonard ss14 final
 
Neutralité axiologique et autorégulation : regard sur l'intervention en éthiq...
Neutralité axiologique et autorégulation : regard sur l'intervention en éthiq...Neutralité axiologique et autorégulation : regard sur l'intervention en éthiq...
Neutralité axiologique et autorégulation : regard sur l'intervention en éthiq...
 
Aide Régionale aux étudiants
Aide Régionale aux étudiantsAide Régionale aux étudiants
Aide Régionale aux étudiants
 
Barometre emploi jobtransport_mai2014
Barometre emploi jobtransport_mai2014Barometre emploi jobtransport_mai2014
Barometre emploi jobtransport_mai2014
 
Web 2.0 et logiciels portables, en quoi sont-ils utiles dans un contexte d'en...
Web 2.0 et logiciels portables, en quoi sont-ils utiles dans un contexte d'en...Web 2.0 et logiciels portables, en quoi sont-ils utiles dans un contexte d'en...
Web 2.0 et logiciels portables, en quoi sont-ils utiles dans un contexte d'en...
 

More from Rodolphe Quiédeville

More from Rodolphe Quiédeville (16)

Tests unitaires pour PostgreSQL avec pgTap
Tests unitaires pour PostgreSQL avec pgTapTests unitaires pour PostgreSQL avec pgTap
Tests unitaires pour PostgreSQL avec pgTap
 
PostgreSQL Meetup Nantes #2
PostgreSQL Meetup Nantes #2PostgreSQL Meetup Nantes #2
PostgreSQL Meetup Nantes #2
 
SQL Debug avec Django @ PyConFr 2015
SQL Debug avec Django @ PyConFr 2015SQL Debug avec Django @ PyConFr 2015
SQL Debug avec Django @ PyConFr 2015
 
Pytong2015
Pytong2015Pytong2015
Pytong2015
 
Tsung de 1 à 1 million / Confoo Montréal 2015
Tsung de 1 à 1 million / Confoo Montréal 2015Tsung de 1 à 1 million / Confoo Montréal 2015
Tsung de 1 à 1 million / Confoo Montréal 2015
 
Confoo django
Confoo djangoConfoo django
Confoo django
 
BBL Données gégraphiques libres chez Work4labs
BBL Données gégraphiques libres chez Work4labsBBL Données gégraphiques libres chez Work4labs
BBL Données gégraphiques libres chez Work4labs
 
Tsung GIS
Tsung GISTsung GIS
Tsung GIS
 
BBL autour de PostgreSQL @Novapost
BBL autour de PostgreSQL @NovapostBBL autour de PostgreSQL @Novapost
BBL autour de PostgreSQL @Novapost
 
BBL chez Mappy autour de Tsung
BBL chez Mappy autour de TsungBBL chez Mappy autour de Tsung
BBL chez Mappy autour de Tsung
 
Un Tsung vaut mieux que 2 "croisons les doigts"
Un Tsung vaut mieux que 2 "croisons les doigts"Un Tsung vaut mieux que 2 "croisons les doigts"
Un Tsung vaut mieux que 2 "croisons les doigts"
 
OpenStreetMap Realtime Check
OpenStreetMap Realtime CheckOpenStreetMap Realtime Check
OpenStreetMap Realtime Check
 
Présentation de Tsung chez Leboncoin
Présentation de Tsung chez LeboncoinPrésentation de Tsung chez Leboncoin
Présentation de Tsung chez Leboncoin
 
Tests de performance avec Tsung
Tests de performance avec TsungTests de performance avec Tsung
Tests de performance avec Tsung
 
Asterisk
AsteriskAsterisk
Asterisk
 
Tests de montée en charge avec Tsung
Tests de montée en charge avec TsungTests de montée en charge avec Tsung
Tests de montée en charge avec Tsung
 

de 1 à 1 million avec Tsung

  • 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. 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. 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. 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. Ce n’est pas != test unitaire Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 5 / 53
  • 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. 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. 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. A quoi cela sert-il ? Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 9 / 53
  • 10. A éviter cela Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 10 / 53
  • 11. La situation client mécontent Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 11 / 53
  • 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. 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. 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. Mais pourquoi ? Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 15 / 53
  • 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. Le site préféré des développeurs ? Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 17 / 53
  • 18. chez-moi-ca-marche.com Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 18 / 53
  • 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. 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. 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. 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. 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. 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. chez-moi-ca-marche.com Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 25 / 53
  • 26. mais pas en prod ! Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 26 / 53
  • 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. 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. 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. 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. 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. 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. Chargeons Tsung de nous aider Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 33 / 53
  • 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. Action ! Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 35 / 53
  • 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. 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. 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. 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. 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. 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. 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. 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. Les résultats Rodolphe Quiédeville (Freelance) de 1 à 1 million avec Tsung 22 octobre 2013 44 / 53
  • 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. 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. 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. 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. 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. 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. 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. 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. 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