Domanda

Abbiamo una comunicazione applet-servlet che vorremmo registrare con il proxy HTTP di JMeter. Funziona con messaggi GET fino alla applet invia un messaggio HTTP POST che comprende alcuni oggetti Java serializzati (tipi built-in), allora otteniamo questo errore nel Applet:

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

OK, quindi c'è qualche versione JVM conflitto da qualche parte nella coda. Ma dove?

La comunicazione corre OK senza JMeter, vale a dire: Applet -> Tomcat -> Servlet. Tutto sulla mia macchina locale.

Ma non funziona tramite JMeter: Applet -> JMeter delega -> Tomcat -> Servlet. Inoltre tutto sulla mia macchina.

E 'come se JMeter stava modificando il contenuto del messaggio POST ...

L'ho provato con il proxy Apache così, lavorando bene.

cosa ancora più divertente è che ho solo una versione di Java installata, un JDK e JRE uno. Entrambi 1.6.0_07 ...

Ho pensato di chiedere prima di iniziare a scavare più in profondità nella tana del coniglio; -)

Ecco il dump esadecimale dei dati POST inviati direttamente a 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                                               {

Ed ecco i dati quando inviati attraverso JMeter:

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                                               {

Un sacco di s "3f" nella seconda discarica ... Quindi questo è sicuramente una sorta di un problema di codifica. Il tipo di contenuto è impostato correttamente nell'intestazione:

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
È stato utile?

Soluzione

Ecco la soluzione: JMeter ha un file di configurazione, bin / jmeter.properties . Qui potete trovare un'opzione in cui è possibile impostare i tipi di contenuto binario:

# 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

Ora io non so perché application / octet-stream non è incluso di default, ma si può semplicemente aggiungere alla lista, e si è fatto.

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

Questo è come l'ho trovato fuori: https://issues.apache.org/bugzilla/show_bug.cgi?id= 44808

fatto una ricerca su JMeter ha chiuso bug ...: -)

Altri suggerimenti

Qualcun altro sta riportando una molto simile: http://markmail.org/message/pl5erin2isehm5q6 . Non riesco a trovare qualsiasi argomento relativo a questo problema nel loro bug tracker però. Sembra che hai vinto il privilegio di scavare più a fondo nella tana del coniglio:)

La risposta accettata permette solo la registrazione di richieste statiche. Questo non sarà realistico in quanto non consente alcuna variabilisation di richieste (ad esempio cambiando la parola cercata, ...) in modo da sarà sempre prove di stress lo stesso gruppo di dati.

Per renderlo un vero banco di prova, è necessario utilizzare una terza parte plug-in.

Un plugin commerciale JMeter permette questo, si veda:

Per fare i test realistico, è necessario variabilize contenuti negli oggetti serializzati.

Questo plugin Java serializzazione consentirà il seguente:

  • la registrazione facile di traffico con JMeter Proxy Server, verrà creato un campionatore personalizzato piano di test utilizzando

  • Facile variabilization di richieste (che apparirà come XML) attraverso il più semplice sintassi per esempio $ {} dove searchedWord searchedWord può venire da un file CSV o qualsiasi variabile definita dall'utente.

  • Facile estrazione dei dati dalle risposte utilizzando JMeter standard di post processor

  • Facile messa a punto di Richiesta / risposte attraverso standard di JMeter vista Risultati elemento Albero

Disclaimer: io lavoro per questa azienda

.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top