Article
· Sept 29, 2023 11m de lecture

Comment effectuer des tests de performance et de charge sur les bases de données et les backends ?

Parfois, nous devons savoir avec certitude si l'environnement actuel dispose de suffisamment de noyaux, de mémoire et de bande passante pour prendre en charge le nombre prévu d'utilisateurs et les accords de niveau de service tels que la latence, le temps de réponse et la disponibilité. C'est le cas pour les bases de données et les backends. C'est pourquoi il est obligatoire, pour les applications et les bases de données critiques, de simuler les demandes simultanées/concurrentes des utilisateurs et de collecter des données sur les performances et la disponibilité.

L'outil le plus populaire pour effectuer des tests de charge et de performance s'appelle JMeter. Il s'agit d'un outil open-source permettant de définir des requêtes de base de données et de backend avec plusieurs fils d'exécution (un par utilisateur) et de collecter des mesures telles que la latence et le temps de réponse afin de les afficher dans des rapports, des fichiers et des tableaux de bord HTML.

Qu'est-ce que JMeter ?

Selon son site web, l'application Apache JMeter™ est un logiciel open-source, une application 100 % pur Java conçue pour tester la charge et le comportement fonctionnel et mesurer la performance. Elle a été conçue à l'origine pour tester les applications Web, mais elle a ensuite été étendue à d'autres fonctions de test.
Apache JMeter peut être utilisé pour tester les performances des ressources statiques et dynamiques ainsi que des applications Web dynamiques. Il peut être utilisé pour simuler une charge importante sur un serveur, un groupe de serveurs, un réseau ou un objet afin de tester sa résistance ou d'analyser les performances globales sous différents types de charge. Les fonctionnalités d'Apache JMeter (celles qui sont en gras seront détaillées dans cet article) sont les suivantes :

  • Capacité à tester la charge et les performances de nombreux types d'applications/serveurs/protocoles différents :
    • Web - HTTP, HTTPS (Java, NodeJS, PHP, ASP.NET, …);
    • SOAP / Services REST;
    • FTP;
    • Base de données via JDBC;
    • LDAP;
    • Middleware orienté message (MOM) via JMS;
    • Messagerie - SMTP(S), POP3(S) et IMAP(S) ;
    • Commandes natives ou scripts shell ;
    • TCP;
    • Objets Java.
  • IDE test complet qui permet d'enregistrer rapidement des plans de test (à partir de navigateurs ou d'applications natives), de les construire et de les déboguer.
  • Le mode CLI (mode ligne de commande qui était auparavant appelé mode Non-GUI ou headless) pour les tests de charge à partir de n'importe quel système d'exploitation compatible avec Java (Linux, Windows, Mac OSX).
  • Un rapport HTML dynamique complet et prêt à être présenté.
  • Une corrélation facile grâce à la capacité d'extraire des données à partir des formats de réponse les plus populaires, HTML, JSON, XML, ou tout autre format textuel.
  • Le concept de multithreading permet l'échantillonnage simultané par de nombreux fils d'exécution et l'échantillonnage simultané de différentes fonctions par des groupes de fils d'exécution distincts**.
  • Mise en cache et analyse/lecture hors ligne des résultats des tests.

Téléchargement et configuration du Java

Si Java est installé, passez cette section, sinon, exécutez les actions suivantes :

  1. Téléchargez Java à partir de https://jdk.java.net/archive/ (choisissez n'importe quelle version de Java, de la 11 à la plus récente, en fonction des spécificités de votre système d'exploitation).
  2. Décompressez le fichier dans n'importe quel dossier de votre ordinateur.
  3. Mémorisez le nom du dossier d'installation pour l'utiliser ultérieurement.

Téléchargement et configuration de JMeter

Pour obtenir et installer JMeter, suivez les étapes ci-dessous :

  • Téléchargez JMeter à partir de https://jmeter.apache.org/download_jmeter.cgi (sélectionnez un fichier zip pour Windows et un fichier TGZ pour les autres systèmes d'exploitation).
  • Décompressez le fichier dans n'importe quel dossier de votre ordinateur.
  • Mémorisez l'emplacement du dossier d'installation car nous en aurons besoin par la suite.

Téléchargement et configuration de l'application IRIS à tester

Nous allons tester le modèle FHIR
(https://openexchange.intersystems.com/package/iris-fhir-template). Pour l'obtenir et l'installer, suivez les étapes ci-dessous :

  1. Si vous utilisez ZPM/IPM à partir de votre instance IRIS for Health actuelle, exécutez la commande à partir de la console IRIS :
     
zpm "install fhir-server"
  1. Si vous utilisez Docker (un docker desktop ou un serveur est nécessaire) :
    a. Exécutez clone/git pull du référentiel dans n'importe quel répertoire local :
     
git clone https://github.com/intersystems-community/iris-fhir-template.git

b. Ouvrez le terminal dans le répertoire suivant et exécutez :
 

docker-compose up -d

Tests manuels préalables

Avant de créer les tests automatisés, n'oubliez pas d'exécuter des tests manuels à l'aide de Postman ou d'un autre client HTTP pour vous assurer que l'API que vous souhaitez tester fonctionne. Appelez une méthode GET pour http://localhost:32783/fhir/r4/Patient/1 et observez les résultats comme illustré ci-dessous :  

 

Exécution de JMeter

Pour lancer JMeter, procédez comme suit :

  1. Modifiez le fichier jmeter.bat (pour Windows) ou jmeter.sh (pour les autres systèmes d'exploitation) et ajoutez le JAVA_HOME (dans mon cas C:\Java\jdk-20) après la ligne setlocal :

 

La ligne dont vous avez besoin est : établir "JAVA_HOME=<dossier où vous avez décompressé le Java>"

  1. Sauvegardez le fichier jmeter.bat (pour Windows) ou jmeter.sh (pour les autres systèmes d'exploitation) et exécutez-le.
  2. Dans quelques secondes, vous devriez voir l'interface graphique de JMeter :

 

Création d'un test de performance pour une API REST

To create a REST API performance test, proceed with the following steps:

  1. Sélectionnez le deuxième bouton ( templates) pour utiliser un modèle afin de tester les API REST :

 

  1. Sélectionnez la requête HTTP simple et cliquez sur le bouton Create (Créer) :

 

  1. Ne modifiez pas les valeurs par défaut et cliquez sur le bouton Create (Créer) :

 

  1. À ce stade, vous avez créé plusieurs éléments JMeter :

 

  1. Sélectionnez Variables définies par l'utilisateur et remplacez les variables par les valeurs indiquées ci-dessous :

 

  1. Choisissez la section Groupe de fils et modifiez le Nombre de fils (utilisateurs) de 1 à 5 :

 

  1. Accédez au gestionnaire d'en-têtes HTTP et créez le paramètre "Accept" avec la valeur */*:

 

  1. Une fois tous les paramètres configurés, prenez une minute pour sauvegarder notre plan de test. Cliquez sur le bouton Enregistrer ( ) et sélectionnez le nom et le dossier de votre choix :

 
 
9. Sélectionnez à nouveau le Groupe de fils et cliquez sur le bouton Start ( ) pour exécuter notre premier test :

 

  1. Vous pouvez consulter les résultats de chaque demande dans la section Voir l'arborescence des résultats > l'onglet des résultats de l'échantillonneur :

 

Vérification des résultats du test dans un tableau de bord HTML

  1. Sélectionnez la section Voir l'arborescence des résultats et définissez un Nom de fichier arbitraire :

 

  1. Ensuite, cliquez sur le bouton Configurer et cochez toutes les options, à l'exception de Save as XML (Sauvegarder en tant que XML), puis cliquez sur le bouton Done (Terminé) :

 

  1. Sauvegardez le projet (button )
  2. Exécutez à nouveau le plan de test (bouton ) pour écrire les résultats dans le fichier CSV.
  3. Consultez le fichier CSV contenant les résultats du test :

 

  1. Les résultats CSV nous aideront à générer le tableau de bord HTML.
  2. Accédez à Outils > Générer un rapport HTML, définissez les valeurs telles que citées vers le bas, et cliquez sur le bouton Générer un rapport
  • Fichier de résultats (CSV ou JTL) : chemin d'accès au fichier CSV configuré ci-dessus.
  • user.properties file: <JMeter installation folder>\bin\user.properties
  • Répertoire de sortie : n'importe quel dossier

 

  1. Au bout d'un certain temps, nous devrions avoir un message de réussite (Rapport créé) :

 

  1. À ce stade, accédez au répertoire Output et ouvrez le fichier index.html avec votre navigateur web :

 

  1. Vous devriez obtenir le graphique circulaire récapitulatif de la demande et un menu latéral pour voir les résultats du test :

 

  1. Cliquez sur le menu Graphiques et analysez les graphiques de durée (Over Time), de débit (Throughput) et de temps de réponse (Response Times) :

 

  1. Augmentez le nombre de fils, exécutez à nouveau le plan de test, générez à nouveau le rapport HTML Dashboard (n'oubliez pas de supprimer d'abord le contenu du dossier de sortie) et vérifiez l'index.html pour voir les résultats avec 100 utilisateurs simultanés :

 
13. Répétez les étapes susmentionnées pour 10 000 utilisateurs simultanés ou tout autre nombre souhaité.

Test de votre base de données

Dans cette section, vous apprendrez à tester les performances et à charger les commandes SQL. Pour ce faire, exécutez les étapes indiquées ci-dessous :
1. Téléchargez le pilote JDBC d'InterSystems IRIS à partir de l'URL suivante : https://raw.githubusercontent.com/intersystems-community/iris-driver-distribution/main/JDBC/JDK18/intersystems-jdbc-3.6.1.jar
2. Copiez le fichier illustré dans le dossier d'installation de JMeter (dans mon cas, il s'agit de C:\NJMeter\Napache-jmeter-5.5\Nlib) :

 

  1. Lorsque vous avez terminé, fermez votre fenêtre JMeter, ouvrez-la à nouveau et exécutez le dossier d'installation de JMeter (<JMeter installation folder>\bin\jmeter.bat ou jmeter.sh).
  2. Vous verrez que JMeter est prêt pour un nouveau plan de test à ce stade :

 

  1. Sélectionnez le deuxième bouton ( templates) pour utiliser un modèle afin de tester les requêtes JDBC :

 

  1. Sélectionnez Test de charge JDBC (JDBC Load Test) et cliquez sur le bouton Créer (Create) :

 

  1. JMeter devrait créer les éléments de test tels que présentés dans l'image :

 

  1. Sélectionnez Configuration de la connexion JDBC et établissez les propriétés comme indiqué ci-dessous :
  • URL de la base de données : jdbc:IRIS://localhost:32782/FHIRSERVER
  • Classe du pilote JDBC (sélectionnez Editer (Edit) et mettez la valeur) : com.intersystems.jdbc.IRISDriver
  • Nom d'utilisateur : _SYSTEM
  • Mot de passe : SYS

 
 
9. Sélectionnez la requête JDBC (JDBC Request) et définissez les propriétés suivantes :

  • Type de requête : Déclaration de sélection
  • Requête : SELECT ID1, Key, MDVersion, VersionId, _id, _lastUpdated, _profile, _security, _source, _tag, active, address, addressCity, addressCountry,addressPostalcode, addressState, addressUse, birthdate, deathDate, deceased, email, family, gender, generalPractitioner, given, identifier, "language", link, name, organization, phone, phonetic, telecom FROM HSFHIR_X0001_S.Patient
  1. Sélectionnez Voir l'arborescence des résultats et définissez les propriétés suivantes :
  • Nom de fichier (tout nom de dossier et de fichier) : C:\JMeter\Test Plans\IrisForHealthSQL.csv

 

  1. Cliquez sur le bouton Configurer (Configure) et sélectionnez toutes les options à l'exception de Sauvegarder en tant que XML (Save as XML), puis cliquez sur le bouton Terminé (Done) :

 

  1. Il est temps d'immortaliser votre projet. Cliquez sur le bouton Sauvegarder (Save) ( ) et stockez votre projet dans n'importe quel dossier et fichier :

 

  1. Sélectionnez le groupe de fils et modifiez le nombre de fils (utilisateurs) à 5 :

 

  1. Sauvegardez les modifications () et exécutez le test ( ).
  2. Accédez à Outils > Générer des rapports HTML :

 

  1. Établissez les valeurs documentées ci-dessous pour générer le rapport HTML :
  • Fichier de résultats (CSV ou JTL) : dossier et fichier pour les résultats CSV
  • Fichier user.properties : Dossier d'installation de JMeter : user.properties
  • Dossier de sortie : n'importe quel dossier

 

  1. Accédez au répertoire Output et ouvrez le fichier index.html :

 
18. Découvrez les résultats de votre test pour l'instruction SQL testée :
     

Nous pouvons inclure de nombreuses demandes d'API SQL ou REST dans les mêmes plans de test et écrire des scripts personnalisés pour effectuer des tests avancés. Pour en savoir plus, consultez la documentation de JMeter : https://jmeter.apache.org/usermanual/index.html.

Bonne lecture !

Discussion (1)0
Connectez-vous ou inscrivez-vous pour continuer

Excellent article ! Ce guide sur la réalisation de tests de performance et de charge pour les bases de données et backends est extrêmement utile. La manière dont vous détaillez l'utilisation de JMeter pour simuler des charges et analyser les performances est claire et précise.L'approche de tester sur un serveur dédié univirtual pour obtenir des mesures de performance réelles est très pertinente, surtout pour les environnements critiques. En parallèle, l’utilisation de serveur virtuel univirtual pour des tests préliminaires peut offrir une flexibilité remarquable, tout en permettant une évaluation initiale à moindre coût.Les conseils sur la configuration des tests, que ce soit pour des bases de données ou des APIs REST, montrent à quel point il est important de bien préparer et configurer ses outils pour obtenir des résultats fiables. Cette approche méthodique garantit qu'un serveur privé ou dédié, utilisé pour la production, est capable de supporter les charges prévues sans compromettre la performance ou la disponibilité.Merci pour ce partage détaillé et pratique !