在另一个JMeter线程

时间:2016-02-04 15:01:31

标签: jmeter

首先,让我开始这个问题,我只使用JMeter 36个小时。

我已经能够成功创建一个执行POST(json主体)的线程来生成新记录。

{  
   "id":1257697771,
   "displayName":"TERM2",
   "functionName":"f_1257697771",
   "displayableSourceExpression":"TRUE",
   "typeId":200,
   "groupId":300,
   "clobObjId":1257697772,
   "typeCode":5,
   ..........
}

我需要获取新记录的ID(1257697771)值,以便在其他线程中对此记录执行更新,获取ID,删除等。

经过多次阅读,我创建了一个正则表达式提取器,其中:

  • 申请:仅限主要样本
  • 要检查的字段:正文作为文档
  • 参考名称 newRecord
  • 正则表达式:“id”:(。+?)\,“displayName”
  • 模板:$ 1 $
  • 匹配否:1
  • 默认值:无

此时,我不确定我的正则表达式是否在(。+?)有效的情况下正确格式化。

另外,如果我可以在另一个线程的HTTP请求的参数中指定新引用( newRecord )或者使用BeanShell后处理器或响应断言等,我会感到困惑。 ..

对于“传递”的相同功能有很多答案。 不是程序员,我试图按照“how to extract json response data in jmeter using regular expression extractor?”进行讨论,但我还不清楚。

任何见解都表示赞赏。感谢。

3 个答案:

答案 0 :(得分:2)

要在线程之间传递值,您需要使用jmeter property函数。

在使用groovy的jsr223后处理器中获取值的代码如下:

 def userProperty = props.get('propertyToGet')
vars.put('userProperty', String.valueOf(userProperty))

然后,您将使用以下命令访问线程中的变量:

${userProperty}

或者你可以直接使用速记:

${__P('propertyToGet')}

jmeter中的变量是特定于线程的。

答案 1 :(得分:2)

JMeter变量是Thread Group的本地变量,您需要将变量转换为JMeter Property。

使用:

  1. __setProperty()函数在线程组中,您可以在其中定义newRecord变量,如:

     ${__setProperty(newRecord,${newRecord},)}
    
  2. __P()函数可以访问属性值,如:

    ${__P(newRecord,)}
    
  3. Passing variable between thread groups

    有关详细说明,请参阅Knit One Pearl Two: How to Use Variables in Different Thread Groups文章。

    还要注意Function Helper Dialog,因为看起来JMeter函数语法是由外星人开发的。

答案 2 :(得分:0)

谢谢大家。我能在你的帮助下解决它!

在第一个帖子中:

  • 设置Reg Expression Extractor 正则表达式 =" id" :(。+?)\," displayName"

    < / LI>
  • 添加了一个Bean断言,其中参数 = $ {__ setProperty(newRecord,$ {newRecord},)}

在第二个帖子中:

  • 使用$ {__ P(newRecord,)}
  • 添加了路径网址

执行第一个线程(POST)会产生一个具有唯一ID的新记录。 (1257698108)

执行第二个线程(GET)显示

GET http://server/.../.../.../.../1257698108

并返回第一个帖子中生成的确切数据。

感谢大家的帮助!