2009-11-11 13 views
2

J'ai été chargé de rechercher une solution de test de performance pour l'une de nos applications Java fonctionnant sur un serveur Weblogic. L'exigence consiste à enregistrer les demandes de production (GET et POST, y compris les données POST), puis à exécuter ces demandes dans un environnement de test de performances avec une copie de la base de données de production.Application de test de performance pour goulots d'étranglement utilisant des données de production

Les raisons d'utiliser des demandes de production au lieu d'un script de test sont:

  1. Il est une grande application avec pas de scripts de test existants de sorte qu'il serait aa grande quantité de travail pour écrire des scripts pour couvrir l'ensemble de l'application .
  2. Certains problèmes de performances apparaissent uniquement lorsque les utilisateurs effectuent un certain nombre d'actions dans un ordre particulier.
  3. Pour tester en utilisant l'interaction réelle de l'utilisateur avec le système pas une estimation de la façon dont les utilisateurs peuvent interagir avec le système. Nous savons tous que les utilisateurs feront des choses auxquelles nous n'avons pas pensé.
  4. Je souhaite pouvoir résoudre les problèmes de performances et réexécuter les requêtes par rapport au code fixe avant de passer en production.

J'ai regardé en utilisant JMeters Access Log Sampler avec les journaux d'accès au serveur mais les journaux d'accès ne contiennent pas de données POST et l'échantillonneur de journal d'accès ne porte que sur l'URL de la requête ne peut donc pas simuler les utilisateurs qui soumettent des données de formulaire.

J'ai également examiné l'utilisation du serveur proxy HTTP JMeter mais cela peut enregistrer les actions d'un seul utilisateur et nécessite que l'utilisateur configure son navigateur pour utiliser le proxy. Cette même limitation existe avec Tsung et The Grinder.

J'ai examiné Wireshark et TCReplay mais l'enregistrement au niveau du paquet est excessif et ne donnera aucun rapport utile au niveau de la requête. Y at-il un meilleur moyen d'analyser les performances de production, étant donné que je dois être en mesure de tester les correctifs avant de passer à la production?

Répondre

0

Cela va être une question difficile. Je travaille avec Visual Studio Test Edition pour tester mes applications et nous ne pouvons que "estimer" l'activité des utilisateurs sur le site.

Il est possible de regarder les journaux et de recueillir des informations sur la probabilité de certains chemins à travers votre application. Vous pouvez ensuite regarder la base de données de production pour examiner les valeurs probables entrées dans les demandes de publication. À partir de là, vous devrez effectuer des tests de chargement qui s'approchent des modèles d'utilisation de votre site de production.

Avec tous les outils actuels, je ne pense pas qu'il soit possible d'enregistrer et de lire l'interaction réelle de l'utilisateur.

Il est possible de modifier votre application Web de sorte que les enregistrements et les journaux chaque demande et la publication contre la session et datetime. Cette journalisation personnalisée peut ensuite être utilisée pour générer des demandes de test de charge sur un site Web de test. Ce serait un changement de code sérieux à votre site existant et aurait probablement des impacts sur les performances. Cela dit, j'ai travaillé avec des applications Web qui font ce niveau de journalisation et la capacité d'analyser la série exacte de messages de page/demandes qui ont causé une erreur est très précieuse pour un développeur. Donc, en résumé: C'est possible, mais je n'ai pas entendu parler d'outils disponibles dans le commerce qui le font.

+0

Merci pour la bonne réponse Nat. Je pense que la meilleure option est d'utiliser un filtre de servlet Weblogic. Cela me donne accès à l'objet ServletRequest que je peux ensuite extraire les données POST et d'autres détails et les écrire dans un journal. Je peux ensuite utiliser les données du journal en entrée de l'application. Cela aura un impact sur les performances inconnu. Heureusement, il suffira de fonctionner pendant une courte période pour obtenir un échantillon d'interaction de production. – JosephL

0

S'il vous plaît vérifier ce livre blanc par Impetus Technologies sur cette page .. http://www.impetus.com/plabs/sandstorm.html

+0

Dans la section d'enregistrement de papier blanc « enregistrement de script est effectuée à l'aide d'outils d'enregistrement de SandStorm. L'enregistrement Tool est un serveur proxy qui capture la communication entre la réelle application client et le serveur Après. le processus d'enregistrement, un script de test est généré, qui peut ensuite être affecté à des utilisateurs virtuels. " Cela sonne exactement comme le serveur proxy JMeter HHTP où il rocorde les actions d'un utilisateur. Mon exigence est de capturer le trafic vers le serveur de tous les utilisateurs. – JosephL

0

Honnêtement, je ne suis pas sûr que la tâche que vous demande de faire est même possible, et encore moins une bonne idée. En fonction de la complexité du backend de l'application et de la perfection de l'état (ie: jusqu'aux SOA externes ou à l'heure/horloge), il peut ne pas être possible de reproduire ces requêtes GET et POST comportement. Cela dit, les tests de performance contre la production data sont toujours excellents, mais ils nécessitent généralement des connaissances spécifiques à l'application qui sollicitent ces données. Répéter simplement les GET et les POST HTTP ne produira presque certainement pas de résultats utiles.

Bonne chance!

0

je suggère ce qui suit pour obtenir les demandes de production et de simuler la charge de travail précise:

1) Utilisez Coremetrics: Coremetrics fournit ces solutions à l'aide que vous pouvez connaître les habitudes d'utilisation des applications. Cela aiderait à trouver un modèle de charge de travail précis. Ce modèle peut ensuite être converti en scripts de test et exécuté sur une copie masquée de la base de données de production. Cela vous fournira des résultats précis sur les performances de l'application en temps réel.

2) Une autre option serait de créer un petit utilitaire en utilisant AOP (Asporach orienté vers l'aspect) afin qu'il puisse tracer toutes les demandes et les traces de méthodes correspondantes. Cela aiderait à identifier le modèle d'utilisation de la production et, à son tour, à simuler avec précision la charge de travail. Les frameworks AOP tels que AspectJ peuvent être utilisés. Cela ne nécessiterait aucun changement de code. L'instrumentation peut être faite à la volée. L'autre avantage serait que thi cna ne soit activé que pour une fenêtre de temps spécifique, puis il peut être désactivé.

Cordialement, batterywalam