HTTP/POST中的JMeter代理和java序列化?

HTTP/POST中的JMeter代理和java序列化?,java,jmeter,applet-servlet,Java,Jmeter,Applet Servlet,我们有一个小程序servlet通信,我们想用JMeter的HTTP代理记录它。 它使用GET消息,直到小程序发送HTTP POST消息,其中包含一些序列化Java对象(内置类型),然后小程序中出现以下错误: 好的,队列中的某个地方有JVM版本冲突。但是在哪里呢 没有JMeter,通信运行正常,即:Applet->Tomcat->Servlet。都在我的本地机器上 但是它不能通过JMeter工作:Applet->JMeter代理->Tomcat->Servlet。也都在我的机器上 就好像JMet

我们有一个小程序servlet通信,我们想用JMeter的HTTP代理记录它。 它使用GET消息,直到小程序发送HTTP POST消息,其中包含一些序列化Java对象(内置类型),然后小程序中出现以下错误:

好的,队列中的某个地方有JVM版本冲突。但是在哪里呢

没有JMeter,通信运行正常,即:Applet->Tomcat->Servlet。都在我的本地机器上

但是它不能通过JMeter工作:Applet->JMeter代理->Tomcat->Servlet。也都在我的机器上

就好像JMeter正在修改POST消息内容

我也用Apache代理进行了测试,运行良好

更有趣的是,我只安装了一个Java版本,一个JDK和一个JRE。都是1.6.0_07

我想在开始挖兔子洞之前先问问;-)

以下是直接发送到Tomcat的POST数据的十六进制转储:

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                                               {
以下是通过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                                               {
第二个垃圾场有很多“3f”。。。 所以这肯定是某种编码问题。 标题中的内容类型设置正确:

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

其他人正在报告一个非常类似的:。我在他们的网站上找不到任何与这个问题相关的问题。看起来你赢得了在兔子洞里挖得更深的特权:)

其他人报告了一个非常类似的:。我在他们的网站上找不到任何与这个问题相关的问题。看起来你赢得了在兔子洞里挖得更深的特权:)

以下是解决方案: JMeter有一个配置文件,bin/JMeter.properties。 在这里,您可以找到一个选项,用于设置二进制内容类型:

# 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
现在我不知道为什么默认情况下不包括应用程序/octet流,但是您可以简单地将其添加到列表中,就完成了

proxy.binary.types=application/x-amf,application/x-java-serialized-object,application/octet-stream
我就是这样发现的:

对JMeter关闭的bug进行了搜索…:-)

以下是解决方案: JMeter有一个配置文件,bin/JMeter.properties。 在这里,您可以找到一个选项,用于设置二进制内容类型:

# 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
现在我不知道为什么默认情况下不包括应用程序/octet流,但是您可以简单地将其添加到列表中,就完成了

proxy.binary.types=application/x-amf,application/x-java-serialized-object,application/octet-stream
我就是这样发现的:


对JMeter关闭的bug进行了搜索…:-)

接受的答案只允许记录静态请求。 这是不现实的,因为它不允许请求的任何变化(例如更改搜索的单词…),所以您将始终对同一组数据进行压力测试

要使其成为真正的测试,您需要使用第三方插件

商业JMeter插件允许这样做,请参阅:

为了使测试真实,您需要对序列化对象中的内容进行变量化

此Java序列化插件将允许以下操作:

  • 使用JMeter代理服务器轻松记录流量,将创建使用自定义采样器的测试计划

  • 通过像${searchedWord}这样简单的语法,可以轻松地对请求进行变量化(将显示为XML),其中searchedWord可以来自CSV或任何用户定义的变量

  • 使用JMeter标准后处理器从响应中轻松提取数据

  • 通过标准JMeter视图结果树元素轻松调试请求/响应


免责声明:我在这家公司工作。

接受的答案只允许记录静态请求。 这是不现实的,因为它不允许请求的任何变化(例如更改搜索的单词…),所以您将始终对同一组数据进行压力测试

要使其成为真正的测试,您需要使用第三方插件

商业JMeter插件允许这样做,请参阅:

为了使测试真实,您需要对序列化对象中的内容进行变量化

此Java序列化插件将允许以下操作:

  • 使用JMeter代理服务器轻松记录流量,将创建使用自定义采样器的测试计划

  • 通过像${searchedWord}这样简单的语法,可以轻松地对请求进行变量化(将显示为XML),其中searchedWord可以来自CSV或任何用户定义的变量

  • 使用JMeter标准后处理器从响应中轻松提取数据

  • 通过标准JMeter视图结果树元素轻松调试请求/响应


免责声明:我在这家公司工作。

谢谢你的链接,但那是两年前的事了!我真的希望能以某种方式解决这个问题。也将检查Jmeter邮件列表存档。感谢链接,但那是2年前的事了!我真的希望能以某种方式解决这个问题。还将检查Jmeter邮件列表存档。