2010-01-21 7 views
1

Nous avons une communication applet-servlet que nous aimerions enregistrer avec le proxy HTTP de JMeter. Il fonctionne avec des messages GET jusqu'à ce que l'applet envoie un message HTTP POST qui comprend des objets Java sérialisés (types intégrés), nous obtenons cette erreur dans le Applet:JMeter proxy et la sérialisation java dans HTTP/POST?

alt text http://img339.imageshack.us/img339/9238/appletservletjmeterhttp.png

OK, donc il y a un certain La version de la JVM est en conflit quelque part dans la file d'attente. Mais où?

La communication s'exécute correctement sans JMeter, c'est-à-dire: Applet -> Tomcat -> Servlet. Tout sur ma machine locale.

Mais cela ne fonctionne pas via JMeter: Applet -> JMeter proxy -> Tomcat -> Servlet. Aussi tout sur ma machine.

Il est comme si JMeter modifiait le contenu du message POST ...

Je l'ai testé avec le proxy Apache ainsi, fonctionne très bien.

Encore plus drôle est que je n'ai qu'une seule version de Java installée, un JDK et un JRE. Les deux 1.6.0_07 ...

Je pensais que je demanderais avant de commencer à creuser plus profondément dans le trou du lapin ;-)

Voici le vidage hexadécimal des données POST envoyées directement à Tomcat:

00000348 ac ed 00 05 73 72 00 11 6a 61 76 61 2e 6c 61 6e ....sr.. java.lan 
00000358 67 2e 49 6e 74 65 67 65 72 12 e2 a0 a4 f7 81 87 g.Intege r....... 
00000368 38 02 00 01 49 00 05 76 61 6c 75 65 78 72 00 10 8...I..v aluexr.. 
00000378 6a 61 76 61 2e 6c 61 6e 67 2e 4e 75 6d 62 65 72 java.lan g.Number 
00000388 86 ac 95 1d 0b 94 e0 8b 02 00 00 78 70 00 00 01 ........ ...xp... 
00000398 7b            { 

Et voici les données envoyées par JMeter quand:

00000128 ac ed 00 05 73 72 00 11 6a 61 76 61 2e 6c 61 6e ....sr.. java.lan 
00000138 67 2e 49 6e 74 65 67 65 72 12 e2 a0 a4 f7 3f 3f g.Intege r.....?? 
00000148 38 02 00 01 49 00 05 76 61 6c 75 65 78 72 00 10 8...I..v aluexr.. 
00000158 6a 61 76 61 2e 6c 61 6e 67 2e 4e 75 6d 62 65 72 java.lan g.Number 
00000168 3f ac 3f 1d 0b 3f e0 3f 02 00 00 78 70 00 00 01 ?.?..?.? ...xp... 
00000178 7b            { 

beaucoup de s « 3f » dans la deuxième décharge ... donc, ce est certainement une sorte d'un problème de codage. Le type de contenu est correctement défini dans l'en-tête:

POST /ABCOrder/ABCServlet?cmd=getNetworkConnection HTTP/1.1 
Connection: keep-alive 
Content-Type: application/octet-stream 
Host: 109.107.148.164:8443 
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 
User-Agent: Mozilla/4.0 (Windows Vista 6.0) Java/1.6.0_14 
Content-Length: 81 

Répondre

4

Voici la solution: JMeter a un fichier de configuration, bin/jmeter.properties. Ici vous pouvez trouver une option où vous pouvez définir les types de contenu binaire:

# Binary content-type handling 
# These content-types will be handled by saving the request in a file: 
proxy.binary.types=application/x-amf,application/x-java-serialized-object 

Maintenant, je ne sais pas pourquoi application/octet-stream n'est pas inclus par défaut, mais vous pouvez simplement ajouter à la liste, et vous avez terminé.

proxy.binary.types=application/x-amf,application/x-java-serialized-object,application/octet-stream 

Voici comment je l'ai trouvé sur: https://issues.apache.org/bugzilla/show_bug.cgi?id=44808

fait une recherche sur JMeter fermé insectes ... :-)

0

Une autre personne signale une très similaire: http://markmail.org/message/pl5erin2isehm5q6. Je ne trouve pas de problème lié à ce problème dans leur bug tracker cependant. Il semble que vous avez gagné le privilège de creuser plus profondément dans le trou de lapin :)

+0

Merci pour le lien, mais c'était il y a 2 ans! J'espère vraiment que cela pourra être résolu d'une manière ou d'une autre. Va également vérifier l'archive de la liste de diffusion Jmeter. – egbokul

+0

J'espère pour vous que vous avez raison. Bonne chance. –

0

La réponse acceptée ne permet d'enregistrer les demandes statiques. Cela ne sera pas réaliste car il ne permettra aucune variabilisation des requêtes (par exemple changer le mot recherché, ...) Ainsi, vous serez toujours stressé par le même tas de données. Pour en faire un véritable test, vous devez utiliser un plugin tiers.

Un plugin JMeter commerciale permet, voir:

Pour faire vos tests réalistes, vous aurez besoin de variabiliser contenu dans les objets sérialisés.

Ce plugin Java sérialisation permettra les suivantes:

  • Enregistrement facile du trafic avec JMeter Proxy Server, un plan de test à l'aide Sampler personnalisé sera créé

  • variabilisation facile des demandes (qui apparaissent comme XML) grâce à une syntaxe aussi simple que par exemple $ {searchingWord} où seekWord peut provenir d'un CSV ou d'une variable définie par l'utilisateur.

  • Extraction aisée des données à partir des réponses standards à l'aide Post Processeurs JMeter

  • débogage facile de la demande/réponses par affichage standard JMeter Résultats élément Arbre

Disclaimer: Je travaille pour cette entreprise.