delega JMeter e Java serializzazione in HTTP / POST?
-
22-09-2019 - |
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
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
.