我使用JMeter属性来存储threadLocalCachedConnection对象,并确保使用唯一的属性名作为属性。
在线程组1中,我有一个JSR223后处理器来抓取每个线程的会话(VU),然后将其存储在一个名为sessionID的属性中。
我添加了另一个JSR223后处理器,作为线程组1中最后一个采样器的子级。
def connection = sampler.threadLocalCachedConnection
props.put("presenterConnection" + ctx.getThreadNum(), connection.get())
在线程组2中,我添加了一个JSR223预处理器作为第一个采样器的子级。
def presenterConnection = props.get('presenterConnection' + ctx.getThreadNum())
sampler.threadLocalCachedConnection.set(presenterConnection)
String sendCommand = "SEND\n" +
"content-type:application/json;charset=UTF-8\n" +
"destination:/v1/session/${__property(sessionId)}/command\n" +
"id:perftest01-presenter-${__property(sessionId)}\n" +
"\n" +
"{\"type\": \"go-to-slide\", \"data\": {\"index\": 0}}\n" +
'\0' // note: NULL char at end
;
vars.put("wsStompSendCommand", sendCommand);
我用2个线程(VU)进行了测试。为什么两个线程都使用最后一个sessionId,而不是每个线程使用一个sessionId?
1条答案
按热度按时间4xrmg8kj1#
根据JMeter Documentation:
属性与变量不同。变量是线程的局部变量;属性对所有线程通用
所以你的台词
创建一个全局
sessionId
属性,该属性为:您需要使用与
presenterConnection
相同的技巧,即:然后在需要时阅读:
更多信息:Apache Groovy: What Is Groovy Used For?