我正在使用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
而无需手动更改每个请求?
答案 0 :(得分:0)
你不必。在里程碑版本中引入了uiSessionId
标头,为RAP中的多个浏览器选项卡支持做准备,但它已被另一个不再使用此标头参数的机制所取代。
从RAP 2.1 RC1开始,客户端现在为URL参数cid
中的每个POST请求附加“连接ID”。此参数不会影响负载测试,您也不必将其从录制中删除。由于每个jmeter线程都有自己的HttpSession,因此所有线程都具有相同的cid并不是问题。
这种变化的一个原因是能够加载测试RAP应用程序,而不会遇到您一直在努力解决的问题。