Tests de performance - Gatling

1 1 1 1 1 1 1 1 1 1 Rating 5.00 (6 Votes)
Submit to DeliciousSubmit to DiggSubmit to FacebookSubmit to Google PlusSubmit to StumbleuponSubmit to TechnoratiSubmit to TwitterSubmit to LinkedIn

Gatling permet de réaliser des tests de charge sur votre application web. Plus performant que JMeter, il permet de simuler une montée en charge plus importante avec encore plus d'utilisateurs.

Il est possible de lancer Gatling depuis eclipse, en ligne de commandes, depuis Maven et même depuis Jenkins, ce qui permet d'inclure les tests de performance dans le processus d'intégration continue. Les sénarios de Gatling sont écrits en Scala dans une syntaxe suffisamment simple pour ne pas nécessiter un apprentissage de ce langage.

Dans ce tutoriel, nous allons voir comment réaliser un test de charge sur l'application Laravel 5 - Construire une application CRUD.

Déployer l'environnement de TEST

Avant d'utiliser Gatling, il faut déployer l'environnement de TEST, pour cela, exécutez les commandes ci-dessous (il faut avant avoir installé un environnement LAMP, si ce n'est pas le cas, regardez l'article LAMP - DEV - Ubuntu 14.04 LTS) :

# Aller dans le répertoire public_html
cd ~/public_html/
  
# Créer le répertoire de la plateforme de test s'il n'existe pas
mkdir -p test
  
# Aller dans le répertoire test
cd test
  
# Supprimer le répertoire tasks s'il existe
rm -rf tasks
  
# Cloner le code source
git clone https://github.com/erlem/tasks-laravel5.git tasks
  
# Aller dans le répertoire tasks
cd tasks
  
# Installer les différents vendors
composer install
  
# Renommer la configuration
mv .env.example .env
  
# Générer la clef de configuration de Laravel
php artisan key:generate
  
# Remplacer la configuration
sed -i '/DB_HOST=/c\DB_HOST=localhost' .env
sed -i '/DB_DATABASE=/c\DB_DATABASE=test.tasks' .env
sed -i '/DB_USERNAME=/c\DB_USERNAME=root' .env
sed -i '/DB_PASSWORD=/c\DB_PASSWORD=root' .env
  
# Créer la base de données
mysql -u root -proot -e "CREATE DATABASE IF NOT EXISTS \`test.tasks\`;"
  
# Insérer la stucture et les jeux de données
php artisan migrate:refresh --seed
  
# Changer les droits du répertoire storage
chmod 777 -R storage/

Pour vérifier que tout c'est bien passé, allez à l'adresse : http://localhost/test/tasks/public/

204 tests de performance gathling 01

Réaliser des tests de charges avec Gatling

Installer Gatling et lancer le recorder

Dans cet article, nous allons tester la version 2.1.7 de Gatling vous pouvez consulter la documentation http://gatling.io/docs/2.1.7/

Nous allons dans un premier temps télécharger le Gatling bundle (zip), décompresser le fichier zip et lancer le recorder de Gatling. Pour cela utilisez les commandes ci-dessous :

# Télécharger Gatling 2.1.7
wget https://repo1.maven.org/maven2/io/gatling/highcharts/gatling-charts-highcharts-bundle/2.1.7/gatling-charts-highcharts-bundle-2.1.7-bundle.zip

# Décompresser
unzip gatling-charts-highcharts-bundle-2.1.7-bundle.zip

# Renommer le répertoire
mv gatling-charts-highcharts-bundle-2.1.7 gatling

# Aller dans le répertoire
cd gatling/bin/

# Rendre exécutable le fichier recorder.sh
chmod +x recorder.sh

# Lancer le recorder de Gatling
./recorder.sh

Vous avez maintenant la fenêtre de Gatling Recorder qui s'ouvre :

204 tests de performance gathling 02 a

Les fichiers HAR

Le Format HTTP Archive (HAR) est un format ouvert destiné à l’export et l’échange de données collectées par des outils de monitoring HTTP.

Le Format HTTP Archive permet de sauvegarder et d”échanger le “détail de la chronologie de chargement d’une page WEB”.

Source Wikipédia

En résumé, il s’agit d’un fichier au format JSON (ou XML) qui contient les différents appels effectués vers un serveur web.

Nous pouvons récupérer les fichier HAR depuis Chrome, pour cela :

  • Lancer les outils de développement Chrome (touche F12)
  • Se positionner à l’onglet Network
  • Effectuer une navigation à travers plusieurs pages web ou recharger simplement la page courante.
  • Effectuer un clic droit sur une des requêtes. 2 options nous intéressent :
    • Copy All as HAR : faire un export dans le presse-papier que nous pourrons coller dans un fichier
    • Save as HAR with Content : enregistrement dans un fichier du HAR (dans ce tutoriel nous utiliserons cette solution)

204 tests de performance gathling 03

Pour Firefox, vous devez installer les extensions suivantes :

  • Firebug : outil pour développeur web
  • NetExport : une extension de Firebug permettant d’effectuer un export de l’activité réseau au format HAR

Lancer le test Gatling

Dans le recorder Gatling, compléter les informations :

204 tests de performance gathling 04 a

  • Dans "Recorder mode" sélectionner “HAR Converter
  • Saisir ou sélectionner le fichier HAR à importer
  • Remplir les autres informations (nom de la simulation, package, répertoire de sortie)
  • Cliquer sur “start”

Une fois terminé, aller dans votre répertoire de sortie du test c'est une accumulation de votre répertoire de sortie + le nom du package. Dans mons cas {HOME_Gatling}/user-files/simulations/fr/erlem/Gatling/tasks

Le fichier RecordedTasks.scala a été généré :

package fr.erlem.Gatling.tasks

import scala.concurrent.duration._

import io.gatling.core.Predef._
import io.gatling.http.Predef._
import io.gatling.jdbc.Predef._

class RecordedTasks extends Simulation {

	val httpProtocol = http
		.baseURL("http://localhost")
		.inferHtmlResources()

	val headers_0 = Map("Upgrade-Insecure-Requests" -> "1")

    val uri1 = "http://localhost/test/tasks/public"
    val uri2 = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5"

	val scn = scenario("RecordedTasks")
		.exec(http("request_0")
			.get("/test/tasks/public/tasks")
			.headers(headers_0))

	setUp(scn.inject(atOnceUsers(1))).protocols(httpProtocol)
}

Pour lancer le scénario, lancer Gatling :

# Permettre l'exécution du .sh
chmod +x gatling.sh

# Lancer Gatling
./gatling.sh

Gatling vous demande quel scénarion exécuter :

GATLING_HOME is set to /home/debian/gatling
Choose a simulation number:
     [0] computerdatabase.BasicSimulation
     [1] computerdatabase.advanced.AdvancedSimulationStep01
     [2] computerdatabase.advanced.AdvancedSimulationStep02
     [3] computerdatabase.advanced.AdvancedSimulationStep03
     [4] computerdatabase.advanced.AdvancedSimulationStep04
     [5] computerdatabase.advanced.AdvancedSimulationStep05
     [6] fr.erlem.Gatling.tasks.RecordedTasks

Dans mon cas, sélectionner le scénario 6 puis "Entrer", appuyez sur "Entrer" pour els configuration. Ci-dessous la sortie complète du terminal :

GATLING_HOME is set to /home/debian/gatling
Choose a simulation number:
     [0] computerdatabase.BasicSimulation
     [1] computerdatabase.advanced.AdvancedSimulationStep01
     [2] computerdatabase.advanced.AdvancedSimulationStep02
     [3] computerdatabase.advanced.AdvancedSimulationStep03
     [4] computerdatabase.advanced.AdvancedSimulationStep04
     [5] computerdatabase.advanced.AdvancedSimulationStep05
     [6] fr.erlem.Gatling.tasks.RecordedTasks
6
Select simulation id (default is 'recordedtasks'). Accepted characters are a-z, A-Z, 0-9, - and _

Select run description (optional)

Simulation fr.erlem.Gatling.tasks.RecordedTasks started...

================================================================================
2015-11-01 10:53:42                                           0s elapsed
---- RecordedTasks -------------------------------------------------------------
[                                                                          ]  0%
          waiting: 1      / active: 0      / done:0     
---- Requests ------------------------------------------------------------------
> Global                                                   (OK=0      KO=0     )

================================================================================


================================================================================
2015-11-01 10:53:43                                           0s elapsed
---- RecordedTasks -------------------------------------------------------------
[##########################################################################]100%
          waiting: 0      / active: 0      / done:1     
---- Requests ------------------------------------------------------------------
> Global                                                   (OK=5      KO=0     )
> request_0                                                (OK=1      KO=0     )
> stylesheets?1445286912                                   (OK=1      KO=0     )
> javascript?1445286912                                    (OK=1      KO=0     )
> bootstrap.min.js                                         (OK=1      KO=0     )
> bootstrap.min.css                                        (OK=1      KO=0     )
================================================================================

Simulation finished
Parsing log file(s)...
Parsing log file(s) done
Generating reports...

================================================================================
---- Global Information --------------------------------------------------------
> request count                                          5 (OK=5      KO=0     )
> min response time                                     21 (OK=21     KO=-     )
> max response time                                    500 (OK=500    KO=-     )
> mean response time                                   191 (OK=191    KO=-     )
> std deviation                                        201 (OK=201    KO=-     )
> response time 50th percentile                         36 (OK=36     KO=-     )
> response time 75th percentile                        366 (OK=366    KO=-     )
> mean requests/sec                                  7.924 (OK=7.924  KO=-     )
---- Response Time Distribution ------------------------------------------------
> t < 800 ms                                             5 (100%)
> 800 ms < t < 1200 ms                                   0 (  0%)
> t > 1200 ms                                            0 (  0%)
> failed                                                 0 (  0%)
================================================================================

Reports generated in 0s.
Please open the following file: /home/debian/gatling/results/recordedtasks-1446371622812/index.html

A la fin Gatling vous indique l'adresse du rapport HTML généré /home/debian/gatling/results/recordedtasks-1446371622812/index.html :

204 tests de performance gathling 05

Aller plus loin

Pour aller plus loin, ne pas hésiter à lire la documentation avancée http://gatling.io/docs/2.1.7/advanced_tutorial.html qui vous permettra de modifier les différents scénarios.

Autres articles

Submit to DeliciousSubmit to DiggSubmit to FacebookSubmit to Google PlusSubmit to StumbleuponSubmit to TechnoratiSubmit to TwitterSubmit to LinkedIn