首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >线程本地缓存连接

线程本地缓存连接
EN

Stack Overflow用户
提问于 2022-07-12 08:04:53
回答 1查看 28关注 0票数 1

我使用JMeter属性来存储threadLocalCachedConnection对象。我确保使用唯一的属性名作为属性。

在线程组1中,我有一个JSR223 PostProcessor来抓取每个线程的会话(VU),然后将它存储在一个名为sessionID的属性中。

我在Thread Group1中添加了另一个PostProcessor,作为最后一个采样器的一个子程序。

代码语言:javascript
复制
def connection = sampler.threadLocalCachedConnection
props.put("presenterConnection" + ctx.getThreadNum(), connection.get())

在线程组2中,我添加了一个JSR223 PreProcessor作为第一个采样器的子程序。

代码语言:javascript
复制
def presenterConnection = props.get('presenterConnection' + ctx.getThreadNum())
sampler.threadLocalCachedConnection.set(presenterConnection)

代码语言:javascript
复制
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);

我用两个线程(VUs)进行了测试。为什么两个线程都使用最后一个sessionId而不是每个线程使用一个sessionId?

EN

回答 1

Stack Overflow用户

发布于 2022-07-12 08:20:48

根据JMeter文档

属性与变量不相同。变量是线程的本地变量;属性是所有线程的公共属性()。

所以你的台词

代码语言:javascript
复制
props.put('sessionId', vars.get('sessionUUID'))

创建一个全局sessionId程序,即:

  • 对于所有线程来说都是通用的,无论它们在哪个螺纹组
  • 直到关闭JMeter/JVM为止。

你需要和presenterConnection玩同样的把戏,比如:

代码语言:javascript
复制
props.put('sessionId_'+ ctx.getThreadNum(), vars.get('sessionUUID'))

然后在需要的地方阅读:

代码语言:javascript
复制
def sessionId =  props.get('sessionId_'+ ctx.getThreadNum())

更多信息::Groovy用于什么?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72948930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档