-->

JMeter的代理服务器和Java序列化的HTTP / POST?(JMeter proxy and

2019-10-19 05:11发布

我们有我们愿意与JMeter的HTTP代理记录一个applet-servlet的通信。 它的工作原理与GET消息,直到小程序发送一个HTTP POST消息,其中包括一些序列化的Java对象(内建类型),那么我们得到的小程序此错误:

替代文字http://img339.imageshack.us/img339/9238/appletservletjmeterhttp.png

OK,所以有一些JVM版本冲突的地方在队列中。 但是哪里?

通信运行正常,而不JMeter的,那就是:小程序 - > Tomcat的 - > Servlet的。 我所有的本地机器上。

但它不通过JMeter的工作:小程序 - > 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” S在第二倾倒......所以这肯定是某种类型的编码问题。 内容类型设置正确的报头:

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

Answer 1:

这里是解决方案:JMeter的有一个配置文件, 斌/ 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

现在,我不知道为什么应用程序/八位字节流默认情况下不包括在内,但你可以简单地把它添加到列表中,就大功告成了。

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

这是我发现了这件事: https://issues.apache.org/bugzilla/show_bug.cgi?id=44808

做了JMeter的修正 bug搜索... :-)



Answer 2:

别人在报告非常相似: http://markmail.org/message/pl5erin2isehm5q6 。 我无法找到自己的与此问题相关的任何问题, bug跟踪系统虽然。 它看起来像你赢得了特权在兔子洞越挖越深:)



Answer 3:

接受答案只允许记录静态请求。 因为它不会允许任何请求variabilisation(例如改变搜索词,...),所以你永远是压力测试相同的一堆数据,这是不现实的。

要使它成为一个真正的考验,你需要使用第三方插件。

商业JMeter的插件允许此,请参阅:

  • http://ubikloadpack.com/

为了让你的测试现实,你需要在序列化对象variabilize内容。

这个Java序列插件将允许如下:

  • 交通方便记录与JMeter的代理服务器,使用测试计划定制的采样将被创建

  • 请求的容易variabilization(其将显示为XML)通过简单的语法,例如$ {searchedWord}其中searchedWord可以来自CSV或任何用户定义的变量。

  • 从反应使用JMeter的标准后置处理数据的提取方便

  • 通过标准JMeter的查看请求/响应的简单调试结果树元素

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



文章来源: JMeter proxy and java serialization in HTTP/POST?