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