246 votes

Effectuer un test de stress sur une application Web ?

Dans le passé, j'ai utilisé Microsoft Web Application Stress Tool et Pylot pour tester les applications web. J'avais écrit une page d'accueil simple, un script de connexion, et un parcours de site (dans un site de commerce électronique ajoutant quelques articles à un panier et à la caisse).

Il suffit de frapper fort sur la page d'accueil avec une poignée de développeurs pour localiser presque toujours un problème majeur. D'autres problèmes d'évolutivité apparaîtraient à la deuxième étape, et encore plus - après le lancement.

L'URL des outils que j'ai utilisés était Microsoft Homer (alias Outil de stress pour les applications Web de Microsoft ) et Pylot .

Les rapports générés par ces outils n'avaient jamais beaucoup de sens pour moi, et je passais de nombreuses heures à essayer de déterminer quel type de charge simultanée le site pouvait supporter. Cela en valait toujours la peine, car les bugs et les goulets d'étranglement les plus stupides apparaissaient toujours (par exemple, les mauvaises configurations du serveur web).

Qu'avez-vous fait, quels outils avez-vous utilisés, et quel succès avez-vous rencontré avec votre approche ? La partie la plus intéressante pour moi est de trouver une sorte de formule significative pour calculer le nombre d'utilisateurs simultanés qu'une application peut supporter à partir des chiffres rapportés par l'application de test de stress.

112voto

Peter Bernier Points 4404

Voici un autre vote pour JMeter .

JMeter est un outil de test de charge open-source, écrit en Java. Il est capable de tester un certain nombre de types de serveurs différents (par exemple, web, services web, base de données, à peu près tout ce qui utilise des requêtes).

Il a cependant une courbe d'apprentissage abrupte une fois que vous commencez à avoir des tests compliqués, mais il en vaut la peine. Vous pouvez être opérationnel très rapidement et, selon le type de test de résistance que vous souhaitez réaliser, cela peut être suffisant.

Pour :

  • Outil libre/gratuit du projet Apache (aide à l'adhésion)
  • Facile à prendre en main, et facile à utiliser une fois que vous avez saisi les concepts de base. (Par exemple, comment créer une requête, comment créer une assertion, comment travailler avec des variables, etc.)
  • Très évolutif. J'ai effectué des tests avec 11 machines générant une charge sur le serveur de l'ordre de presque un million de hits/heure. C'était beaucoup plus facile à installer que ce à quoi je m'attendais.
  • Il dispose d'une communauté active et de bonnes ressources pour vous aider à vous lancer. Lisez d'abord les didacticiels et jouez avec pendant un certain temps.

Cons :

  • L'interface utilisateur est écrite en Swing. (ugh !)
  • JMeter fonctionne en analysant le texte de réponse renvoyé par le serveur. Donc si vous cherchez à valider des comportements en javascript, vous n'avez pas de chance.
  • La courbe d'apprentissage est raide pour les non-programmeurs. Si vous êtes familier avec les expressions régulières, vous avez déjà une longueur d'avance.
  • Il existe un grand nombre de ( insérer un juron ) des idiots dans le forum d'assistance posant des questions stupides qui pourraient être facilement résolues s'ils jetaient ne serait-ce qu'un coup d'œil à la documentation. ("Comment puis-je utiliser JMeter pour tester mon interface graphique Windows" apparaît assez fréquemment).
  • Les rapports "prêts à l'emploi" laissent beaucoup à désirer, en particulier pour les tests de grande envergure. Dans le test que j'ai mentionné ci-dessus, j'ai fini par devoir écrire une application console rapide pour effectuer certaines des conversions de "xml-logfile" en "html". C'était il y a quelques années, donc il est probable que cela ne soit plus nécessaire.

0 votes

Veuillez préciser si JMeter peut vous aider à tester une application installée sur un VPS distant ? Je ne suis pas sûr car il s'agit d'une version de bureau.

1 votes

Une autre option liée à JMeter à connaître est JMeter as a service. Ces types de SaaS fournissent un JMeter hautement évolutif ainsi que des rapports bien plus performants.

5 votes

Je ne suis pas d'accord avec le fait que JMeter soit très évolutif. Un million de requêtes par heure ne représente que 278 requêtes/seconde, ce qui - pour être exécuté sur 11 machines - est extrêmement faible par rapport à d'autres outils. En fait, je placerais l'évolutivité de JMeter du côté du contre.

36voto

Mike Stone Points 21293

J'ai utilisé Le Broyeur . Il est open source, assez facile à utiliser et très configurable. Il est basé sur Java et utilise Jython pour les scripts. Nous l'avons exécuté contre une application web .NET, donc ne pensez pas que c'est un outil uniquement Java (par nature, tout outil de stress web ne devrait pas être lié à la plateforme qu'il utilise).

Nous avons fait quelques trucs sympas avec... nous étions une application de télécommunication basée sur le web, donc une utilisation cool que j'ai mise en place était d'imiter la composition d'un numéro à travers notre application web, puis d'utiliser un outil de réponse automatique que nous avions (qui était essentiellement un tutoriel de Microsoft pour se connecter à leur serveur RTC LCS... qui est ce à quoi Microsoft Office Communicator se connecte sur un réseau local... puis modifié pour simplement prendre les appels automatiquement). Cela nous a permis d'utiliser cette application au lieu d'un outil de téléphonie coûteux appelé The Hammer (ou quelque chose comme ça).

Quoi qu'il en soit, nous avons également utilisé l'outil pour voir comment notre application se comportait sous une charge élevée, et il s'est avéré très efficace pour trouver les goulets d'étranglement. L'outil est doté d'un système de rapports intégré qui indique le temps que prennent les requêtes, mais nous ne l'avons jamais utilisé. Les journaux peuvent également stocker toutes les réponses et autres, ou une journalisation personnalisée.

Je recommande fortement cet outil, très utile pour le prix... mais attendez-vous à faire une certaine configuration personnalisée avec lui (il a un proxy intégré pour enregistrer un script, mais il peut avoir besoin de personnalisation pour capturer quelque chose comme des sessions.... Je sais que j'ai dû le personnaliser pour utiliser une session unique par thread).

1 votes

+1 pour le broyeur. J'ai particulièrement apprécié l'option de scriptage par procuration.

0 votes

Y a-t-il une chance que cela puisse être utilisé pour simuler un navigateur inactif ? Les requêtes du serveur sont faites à partir d'un navigateur inactif toutes les deux secondes pour notre application. J'aimerais savoir ce qui se passe lorsque nous avons trente navigateurs inactifs simultanés.

1 votes

+1 pour grinder. Associé à EC2, nous l'avons utilisé avec succès pour faire tourner 100 000 utilisateurs simultanés.

23voto

Patrick Lightbody Points 2402

Je suis un peu en retard pour cette fête. Je suis d'accord que Pylot est le meilleur outil open source en devenir. Il est simple à utiliser et est activement travaillé par un gars formidable ( Corey Goldberg ). En tant que fondateur de OpenQA Je suis également heureux que Pylot figure désormais sur notre page d'accueil et utilise certaines de nos infrastructures (notamment les forums).

Cependant, j'ai aussi récemment décidé que le concept même de test de charge était erroné : émuler le trafic HTTP, avec des applications aussi complexes qu'elles le sont devenues, est une véritable corvée. C'est pourquoi j'ai créé l'outil commercial BrowserMob. Il s'agit d'un service de test de charge externe qui utilise Sélénium pour contrôler les navigateurs web réels lors de la lecture de chargement.

Cette approche nécessite évidemment un tonne plus de matériel que les techniques normales de test de charge, mais le matériel est en fait assez bon marché lorsque vous utilisez le cloud computing. Et un effet secondaire agréable de ceci est que le scripting est beaucoup plus facile que les tests de charge normaux. Il n'est pas nécessaire d'effectuer des recherches avancées (comme celles de JMeter) pour extraire les cookies, l'état de la session .NET, les paramètres de la requête Ajax, etc. Puisque vous utilisez de vrais navigateurs, ils font simplement ce qu'ils sont censés faire.

Désolé de présenter de manière flagrante un produit commercial, mais j'espère que le concept est intéressant pour certaines personnes et qu'il les fera au moins réfléchir à de nouvelles façons de gérer les tests de charge lorsque vous avez accès à un tas de matériel supplémentaire !

2 votes

L'auteur de Pylot a également créé un autre outil de test web : code.google.com/p/multi-mechanize

2 votes

Le lien vers pylot.org redirige vers un site Web suspect.

15voto

grom Points 8057

J'ai utilisé JMeter . Outre le test du serveur web, vous pouvez également tester le backend de votre base de données, les services de messagerie et les serveurs de courrier électronique.

12voto

Tyronomo Points 840

La politique de mon lieu de travail actuel...

Faites-le vivre et espérez le meilleur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X