JMeter Proxy e serialização Java em http/post?
-
22-09-2019 - |
Pergunta
Temos uma comunicação de Applet-Servlet que gostaríamos de gravar com o proxy HTTP do JMeter. Ele funciona com as mensagens Get até que o applet envie uma mensagem de postagem HTTP, que inclui alguns objetos java serializados (tipos internos), então obtemos esse erro no applet:
TEXTO DE ALT http://img339.imageshack.us/img339/9238/AppletServletJMeterhttp.png
OK, então há algum conflito na versão da JVM em algum lugar na fila. Mas onde?
A comunicação funciona bem sem JMeter, ou seja: applet -> tomcat -> servlet. Tudo na minha máquina local.
Mas não funciona através do JMeter: Applet -> JMeter Proxy -> Tomcat -> Servlet. Também tudo na minha máquina.
É como se o JMeter estivesse modificando o conteúdo da mensagem de postagem ...
Também testei com o proxy do Apache, funcionando bem.
Ainda mais engraçado é que tenho apenas uma versão do Java instalada, um JDK e um JRE. Ambos 1.6.0_07 ...
Pensei em perguntar antes de começar a cavar mais fundo na toca do coelho ;-)
Aqui está o depósito hexadecimal dos dados postais enviados diretamente ao 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 {
E aqui estão os dados quando enviados pelo 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 {
Muitos "3F" no segundo despejo ... então esse é definitivamente algum tipo de problema de codificação. O tipo de conteúdo é definido corretamente no cabeçalho:
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
Solução
Aqui está a solução: o jmeter tem um arquivo de configuração, bin/jmeter.properties. Aqui você pode encontrar uma opção na qual possa definir os tipos de conteúdo binário:
# 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
Agora eu não sei por que Aplicação/stream de octeto Não está incluído por padrão, mas você pode simplesmente adicioná -lo à lista e terminar.
proxy.binary.types=application/x-amf,application/x-java-serialized-object,application/octet-stream
Foi assim que eu descobri:https://issues.apache.org/bugzilla/show_bug.cgi?id=44808
Fiz uma pesquisa no Jmeter fechado insetos... :-)
Outras dicas
Alguém está relatando um muito semelhante: http://markmail.org/message/pl5erin2isehm5q6. Não consigo encontrar nenhum problema relacionado a esse problema em seus rastreador de bug no entanto. Parece que você ganhou o privilégio de se aprofundar na toca do coelho :)
A resposta aceita apenas permite gravar solicitações estáticas. Isso não será realista, pois não permitirá nenhuma variabilização de solicitações (por exemplo, alterando a palavra pesquisada, ...) para que você sempre esteja testando o mesmo grupo de dados.
Para torná -lo um teste real, você precisa usar um plug -in de terceiros.
Um plugin comercial do JMeter permite isso, veja:
Para tornar seus testes realistas, você precisará variabilizar o conteúdo nos objetos serializados.
Este plug -in de serialização Java permitirá o seguinte:
Fácil gravação do tráfego com o JMeter Proxy Server, um plano de teste usando amostrador personalizado será criado
Variabilização fácil de solicitações (que aparecerão como XML) através da sintaxe tão fácil quanto, por exemplo, $ {Searchedword} onde o pesquisado pode vir de um CSV ou qualquer variável definida pelo usuário.
Extração fácil de dados de respostas usando o JMeter Standard Post Processors
Fácil depuração de solicitação/respostas através do elemento de árvore de visualização padrão do jmeter
Isenção de responsabilidade: trabalho para esta empresa.