在请求之前操纵httpsampler的帖子主体

时间:2013-05-21 09:03:52

标签: jmeter

我正在使用JMeter测试Eclipse-RAP应用程序 在RAP中,客户端(浏览器中的javascript-framework)通过基于json的协议与服务器通信。

消息如下所示:

{"head":{"requestCounter":3,"uiSessionId":"832834"},"operations":[["set","w1",{"bounds":    [0,0,1680,893],"cursorLocation":[1262,-1]}]]}

如您所见,uiSessionId. I extracted this id using a "Regular Expression Extractor" and stored it in a variable named UI_SESSION_ID`中存储了会话ID 然后我编辑了记录的HTTP-Request的原始“Post Body”:

{"head":{"requestCounter":3,"uiSessionId":"${UI_SESSION_ID}"},"operations":[["set","w1",{"bounds":    [0,0,1680,893],"cursorLocation":[1262,-1]}]]}

它有效。

但我必须改变每个HTTP-Request的每个Post-Body,这可能很多。 经过一些研究后,我认为使用“BeanShell PreProcessor”是正确的,但是:

var sampler = ctx.getCurrentSampler();

会给我一个HTTPSampler,我没有找到任何允许我检索post-body的方法,用变量替换session-id并设置更改的post-body。 JavaDoc:http://jmeter.apache.org/api/org/apache/jmeter/protocol/http/sampler/HTTPSampler.html

您是否知道我可以使用变量替换uiSessionId而无需手动更改每个请求?

1 个答案:

答案 0 :(得分:0)

你不必。在里程碑版本中引入了uiSessionId标头,为RAP中的多个浏览器选项卡支持做准备,但它已被另一个不再使用此标头参数的机制所取代。

从RAP 2.1 RC1开始,客户端现在为URL参数cid中的每个POST请求附加“连接ID”。此参数不会影响负载测试,您也不必将其从录制中删除。由于每个jmeter线程都有自己的HttpSession,因此所有线程都具有相同的cid并不是问题。

这种变化的一个原因是能够加载测试RAP应用程序,而不会遇到您一直在努力解决的问题。