Publié le Sep 26, 2019
Comparaison entre JMeter et Locust : Découvrir les avantages et les inconvénients pour une assurance qualité efficace des produits. Trouvez l'outil de test de charge le mieux adapté !
Apache JMeter est un outil formidable et très populaire.
De mon point de vue, JMeter peut avoir certaines limites en termes de liberté totale pour les tests de charge. Voyons maintenant comment Locust se compare à cet aspect. Dans cet article, nous allons faire une comparaison directe entre JMeter et Locust pour comprendre leurs différences et leurs capacités.
JMeter est un outil de test de charge très répandu, connu pour sa polyvalence dans le test des performances des applications et services web. Il offre un ensemble complet de fonctionnalités, mais certains utilisateurs peuvent rencontrer des contraintes et une courbe d'apprentissage plus raide en raison de son interface utilisateur et de sa configuration complexes.
En revanche, Locust est un outil de test de charge moderne, basé sur Python, qui privilégie la simplicité et la facilité d'utilisation. Il permet aux utilisateurs d'écrire des scénarios de test sous forme de code, ce qui s'avère bénéfique pour les développeurs qui préfèrent plus de contrôle et de flexibilité dans leurs tests. Grâce à son approche simple et intuitive, Locust a gagné en popularité auprès des développeurs et des équipes d'assurance qualité.
Alors que JMeter dispose d'une large gamme de plugins et de fonctionnalités intégrées pour l'extensibilité et la personnalisation, l'approche basée sur le code de Locust offre aux développeurs une plus grande flexibilité dans la personnalisation des scénarios de test et l'intégration avec d'autres outils et bibliothèques.
En fin de compte, le choix entre JMeter et Locust dépendra des besoins spécifiques et des préférences de l'équipe de test, ainsi que de la nature des scénarios de test de charge qu'elle souhaite mener.
La programmation de scripts n'est pas autorisée dans JMeter. En outre, l'exécution d'un grand nombre de services et d'API sur une seule machine présente des limites. Pour utiliser efficacement le plugin d'auto-corrélation, il est fortement recommandé d'exécuter un test de charge en mode non-GUI et de s'assurer que toutes les instances de JMeter sont fermées pendant le test. En outre, la copie d'éléments, tels qu'un extracteur Regex, entre différentes versions de JMeter peut entraîner une erreur.
Pas besoin d'interfaces utilisateur encombrantes ou de XML volumineux - il suffit de coder comme vous le feriez normalement. Basé sur des coroutines au lieu de callbacks, votre code ressemble et se comporte comme du code Python normal et bloquant.
Locust permet d'exécuter des tests de charge répartis sur plusieurs machines. Étant basé sur les événements, même un nœud Locust peut gérer des milliers d'utilisateurs dans un seul processus. Cela s'explique en partie par le fait que même si vous simulez autant d'utilisateurs, tous n'utilisent pas activement votre système. Souvent, les utilisateurs sont inactifs et cherchent à savoir ce qu'ils doivent faire ensuite. Requêtes par seconde != nombre d'utilisateurs en ligne.
Il dispose d'une interface utilisateur HTML+JS soignée qui affiche les détails pertinents du test en temps réel. Et comme l'interface est basée sur le web, elle est multiplateforme et facilement extensible.
Locust est petit et très facile à hacker et nous avons l'intention de le garder ainsi. Toutes les tâches lourdes des E/S événementielles et des coroutines sont déléguées à l'événement. La fragilité des outils de test alternatifs est la raison pour laquelle nous l'avons créé.
Une solution intéressante en a découlé :
Locust a toujours démontré sa remarquable capacité à simuler efficacement des millions d'utilisateurs simultanés, ce qui en fait un choix exceptionnellement fiable pour les tests de charge. En outre, Battlelog, l'application web pour les jeux Battlefield, s'appuie notamment sur Locust pour ses tests de charge, fournissant ainsi une preuve concrète de ses performances et de sa fiabilité à l'épreuve du feu.
Essayons cela :
Première étape : Locust est disponible sur PyPI et peut être installé avec pip.
pour python 2.7
$ python -m pip install locustio
pour Python 3 :
python3 -m pip install locustio
Si vous voulez la version la plus récente, vous pouvez utiliser pip pour l'installer directement depuis notre dépôt Git. Par exemple, pour installer la branche master avec Python 3 :
$ python3 -m pip install -e git://github.com/locustio/locust.git@master#egg=locustioL
pour s'assurer que vous êtes bien entré dans
locust --help
Faisons une fonction de connexion simple pour vous faciliter la tâche.
Mission : Fonction de connexion via Rest Services
from locust import HttpLocust, TaskSet, taskfrom locust import clientsfrom locust.clients import HttpSessionimport requestsglobal BaseUrlclass auth():BaseUrl = 'https://[Votre-serveur]-api.domain.co' #Définitions de l'API d'authentification def login( self,userName,passWord):s = HttpSession('https://[Votre-serveur]-api.domain.co') response = s.post('https://[Votre-serveur]-api.domain.co/auth/login', {'username':userName, 'password':passWord}) return response def getLogUser( self,accress_token):s = HttpSession('https://[Votre-serveur]-api.domain.co') response = s.get('https://[Votre-serveur]-api.domain.co/profile', headers={'access_token':accress_token}) return response
-Demande de connexion (Post) avec les paramètres Username et password
-Demande (Get) pour obtenir les informations du profil de l'utilisateur.
Ce dont nous avons besoin ensuite, c'est d'envoyer les paramètres à cette API et de créer une certaine charge 🙂 .
Tout d'abord, nous avons besoin d'un gestionnaire de données externe pour les informations d'identification. Dans mon cas, j'ai conservé un fichier CSV pour stocker les différentes informations d'identification des utilisateurs. Essayons de lire et de pousser les données vers les APIs
class runnerAgent(TaskSet) :global json_data global accress_token global path global ccLogin global API_KEY global getAr global VarCD @task def Login(self): #Objet du fichier global conf = config.config() path = conf.getLocation() #objet de Admin Authlogin = authAgent.authAgent() PWConbv = util.util() #radis Cache InitializationRcache = redis.Redis(host='127.0.0.1', port=6379, db=0) with open('//oadTestv0.1/globe/credentials.csv') as csv_file :csv_reader = csv.reader(csv_file, delimiter=',') for row in csv_reader :print(' Login Agent with Username--->'+row[0]+' Who has Password --->'+row[1]) #login Request Loginresponse=login.login(row[0],row[1]) print Loginresponse --> (*) assert Loginresponse.status_code is 200, 'Unexpected response code : ' + Loginresponse.status_code json_data =json.loads(Loginresponse.text) accress_token =json_data['content']['access_token'] ccLogin =json_data ['content']['ccLogin'] agentID=json_data['content']['id'] print agentID ObjectAgent =json.dumps({ 'UserName':row[0],'PassWord':row[1],'ccLogin':ccLogin,'id':agentID,'accress_token':accress_token}) Rcache.set(row[0],ObjectAgent) API_KEY = conf.getAPI_key() print API_KEY if Loginresponse.status_code==200: login.AutoLog(accress_token) else :login.login(row[0],EncriptedPW)class LoginWithUniqueUsersTest(HttpLocust) :task_set = runnerAgent
Pour le premier essai, ne nous préoccupons pas du cache #radis ou d'autres lectures JSON. Essayons simplement d'affirmer le code de réponse - > (*)
Exécuter le test : Il y a deux méthodes pour exécuter le test
-Avec l'interface graphique
$ locust -f locust_files/my_locust_file.py --host=https://example.com
Vous obtiendrez le port en cours d'exécution sur votre machine locale :
Une fois que vous avez démarré Locust en utilisant l'une des lignes de commande ci-dessus, vous devriez ouvrir un navigateur et le diriger vers http://127.0.0.1:8089 (si vous exécutez Locust localement), et en même temps, les salutations seront quelque chose comme ceci :
Dans le contexte des tests de charge, une classe de criquets représente un utilisateur individuel ou, au sens figuré, un criquet en essaim. Locust engendre ou fait éclore une instance de la classe de criquets pour chaque utilisateur.
Au cours du processus de test de charge, la classe de criquets joue un rôle important dans la caractérisation efficace de chaque utilisateur et de son comportement. Pour ce faire, la classe de criquets doit définir plusieurs attributs qui représentent et simulent avec précision les actions et les interactions des utilisateurs avec le système.
Vous pouvez également consulter les statistiques en temps réel.
-Sans interface graphique
locust -f my_locust_file.py --clients=02 --hatch-rate=01 --host=http://example.com --no-web
La console affichera le résumé pour vous.
Références:Gevent : https://www.gevent.org/
Criquet pèlerin : https://docs.locust.io/en/stable/what-is-locust.htmlhttps://locust.io/https://docs.locust.io/en/stable/index.html
Plus de sujets liés à ZIWO :
>
Rapport de test d'automatisation de l'interface utilisateur : Protractor/BDD
>
>
Lectures
Dernières News
Interviews, conseils, guides, meilleures pratiques du secteur et actualités.
Strategies for a Productive First Contact with Clients
Take time to focus on the First Contact with Clients, so you can adjust the customer experience (CX) strategy to provide the best service.
Lire la suiteThe Power of WhatsApp Business with ZIWO Conversations
ZIWO Conversations is recognized as the premier WhatsApp Business Companion, elevating both customer experiences and team collaboration to a higher standard.
Lire la suitePause and Resume Call Recording – Benefits & Industries
agents can manually pause and resume call recordings, Once an administrator has enabled the feature, agents will see a button on the dialpad
Lire la suiteOutbound IVR (Interactive Voice Response) – Definition, Components, Benefits & Practices
Outbound IVR feature is a contact center tool that is used to proactively distribute communications to customers with a predefined IVR menu.
Lire la suiteHow to Become a Customer-Centric Organization
Ways to Build a customer-centric culture in your company, customer-centricity needs to be part of your philosophy, values, and mission daily.
Lire la suiteMultilingual Contact Centers: Bridging Language Gaps
Discover how multilingual contact centers overcome language barriers to deliver outstanding assistance, thereby elevating customer experience
Lire la suite