Tester les performances de son API

Réaliser des tests de performances sur une application n’est jamais simple. Il est en effet assez complexe de simuler une montée en charge réaliste, ainsi qu’une activité utilisateur cohérente. Nous allons explorer quelques pistes pour y parvenir
Pierre LISERONMis à jour le 13 Juin 2018
Test-performance-API.jpg

Réaliser des tests de performances sur une application nest jamais simple. Il est en effet assez complexe de simuler une montée en charge réaliste, ainsi quune activité utilisateur cohérente. Nous allons explorer quelques pistes pour y parvenir.

video: https://www.youtube.com/embed/tiViq4PrghI

Test de performances API Quest-ce quon mesure ?

Premièrement, lorsquon parle de performance, il faut sentendre sur ce que lon mesure. Ici, nous nous consacrerons uniquement à la mesure des performances brutes dune application web (de son API) et/ou dun service unitaire. Nous passerons donc volontairement outre le temps de chargement des pages côté client et les temps de transfert pour nous focaliser sur le temps de sortie ou de réponse de lAPIUne API est un programme permettant à deux applications distinctes de communiquer entre elles et d’échanger des données.. Nous partons du principe que votre application est notamment composée dune API de services RESTREST (REpresentational State Transfer) est un style d'architecture logicielle qui fonctionne sous un certain nombre de contraintes. (le raisonnement reste le même pour des services SOAPSOAP (Simple Object Access Protocol) est un protocole de communication. ).

Performance API Etape 1 : Mesure et enregistrement des appels

La première étape consiste à mesurer et enregistrer les appels réalisés par votre application. Parmi la kyrielle doutils disponibles sur le marché, nous vous conseillons dutiliser jMeter en mode proxy pour enregistrer lintégralité des appels à votre API. Il existe de nombreux tutoriaux sur internet pour réaliser ceci. Une fois votre flux dappels créé, il convient de le paramétrer.

Pour cela, nous vous conseillons lapproche suivante (facile à réaliser sur jMeter, mais qui peut se réaliser sur tout outil de benchmark) :

  • 1 Variabiliser les utilisateurs : ceci se fait simplement via un fichier CSV.
  • 2 Créer plusieurs scénarios utilisateurs : en effet, vos utilisateurs ne vont pas tous réaliser les mêmes actions au même moment.
  • 3 Rajouter un thinktime important entre chaque appel à lAPI : un changement de page côté utilisateur va surement déclencher un ou plusieurs appels à lAPI, mais entre deux pages, il ne faut pas oublier que votre utilisateur réfléchit (si si, cest vrai ! jen vu un faire une fois). Il faut compter au moins 4/5 secondes entre deux interactions dun utilisateur.
  • 4 Varier les écritures et les lectures : vos scénarios doivent comporter un ratio écriture / lecture denviron 80/20. Pourquoi ? Car la majorité des applications passent 80% du temps en lecture dinformations depuis la base, et environ 20% en écriture. Essayez donc de garder ce ratio entre les différents scénarii.
  • 5 Si possible, variabiliser les lectures : souvent les BDD mettent en cache les requêtes que vous avez effectuées. Ainsi, si vous répétez souvent le même scénario, il est probable que vous serveur de BDD accélère grandement les choses, mais ce nest pas un cas réel dutilisation.

Performance API Etape 2 : Test !

Lorsque vous avez paramétré votre outil, vous êtes prêt pour lancer vos tests de performances.

Avant toute chose, il convient de réaliser une phase de warmup du serveur. Quentend-t-on par là ? Si vous souhaitez tester avec 100 utilisateurs en simultané, ne les faites pas démarrer tous en même temps ! Vous allez écrouler les performances de votre serveur et ceci ne sera pas du tout réaliste. Nous vous conseillons donc de les faire démarrer de manière progressive, par exemple 1 toutes les 30 secondes oui, cest sûr que cest plus lent pour réaliser ses tests, mais cest plus infiniment plus réaliste. De plus, en réalisant ceci, les utilisateurs se répartiront naturellement sur les différentes étapes de votre scénario.

Petit conseil supplémentaire : réaliser avant toute autre chose un test de performance unitaire de chaque service, afin de mesurer le temps unitaire de chaque appel. Ceci vous permettra davoir un point de comparaison et de mesurer la dégradation de la performance en fonction de la montée en charge.

Pour vous donner un ordre de grandeur, un serveur correctement dimensionné doit être capable de gérer 500 utilisateurs. Si ce nest pas le cas, soit votre test est mal fait, soit votre application présente un problème de performance.