在另一个JMeter线程中使用提取的JSON值

在另一个JMeter线程中使用提取的JSON值,jmeter,Jmeter,首先,让我先回答这个问题,我只使用JMeter 36个小时 我已经成功地创建了一个线程,该线程执行POST(json主体)来生成新记录 { "id":1257697771, "displayName":"TERM2", "functionName":"f_1257697771", "displayableSourceExpression":"TRUE", "typeId":200, "groupId":300, "clobObjId":1257697

首先,让我先回答这个问题,我只使用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后处理器,或者响应断言等等,我也会感到困惑

对于“传递”的相同功能,有很多答案我不是一名程序员,我试着按照“讨论”进行,但我仍然不清楚


任何见解都值得赞赏。谢谢。

要在线程之间传递值,需要使用该函数

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

 def userProperty = props.get('propertyToGet')
vars.put('userProperty', String.valueOf(userProperty))
然后,您可以使用以下命令访问线程中的变量:

${userProperty}
或者您可以直接使用速记:

${__P('propertyToGet')}

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

要在线程之间传递值,需要使用函数

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

 def userProperty = props.get('propertyToGet')
vars.put('userProperty', String.valueOf(userProperty))
然后,您可以使用以下命令访问线程中的变量:

${userProperty}
或者您可以直接使用速记:

${__P('propertyToGet')}

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

jmeter变量是线程组的本地变量,您需要将变量转换为jmeter属性

使用:

  • 在线程组中定义
    newRecord
    变量的函数,如:

     ${__setProperty(newRecord,${newRecord},)}
    
  • 函数访问属性值,如:

    ${__P(newRecord,)}
    
  • 请参阅文章以获得更详细的解释


    还要注意的是,JMeter函数语法看起来是由外星人开发的

    JMeter变量是线程组的本地变量,您需要将变量转换为JMeter属性

    使用:

  • 在线程组中定义
    newRecord
    变量的函数,如:

     ${__setProperty(newRecord,${newRecord},)}
    
  • 函数访问属性值,如:

    ${__P(newRecord,)}
    
  • 请参阅文章以获得更详细的解释


    还要注意的是,JMeter函数语法看起来是由外星人开发的

    谢谢大家。在你的帮助下,我解决了这个问题

    在第一个线程中:

    • 设置Reg表达式提取器Regular Expression=“id”:(.+?)\,“displayName”

    • 添加了一个Bean断言,其中参数=${uuuu setProperty(newRecord,${newRecord},)}

    在第二个线程中:

    • 在路径url后面追加${uuu P(newRecord,)}
    执行第一个线程(POST)产生一个具有唯一ID的新记录。(1257698108)

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

    GEThttp://server/.../.../.../.../1257698108

    并返回在第一个线程中生成的确切数据


    谢谢大家的帮助

    谢谢大家。在你的帮助下,我解决了这个问题

    在第一个线程中:

    • 设置Reg表达式提取器Regular Expression=“id”:(.+?)\,“displayName”

    • 添加了一个Bean断言,其中参数=${uuuu setProperty(newRecord,${newRecord},)}

    在第二个线程中:

    • 在路径url后面追加${uuu P(newRecord,)}
    执行第一个线程(POST)产生一个具有唯一ID的新记录。(1257698108)

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

    GEThttp://server/.../.../.../.../1257698108

    并返回在第一个线程中生成的确切数据


    谢谢大家的帮助

    Regexp最好是:“id”:(\d+?),您可以使用${newRecord}在每隔一个samper和beanshell中使用新记录。在beanshel中,您还可以使用字符串s=vars.get(“newRecord”)获取值;Regexp最好是:“id”:(\d+?),您可以使用${newRecord}在每隔一个samper和beanshell中使用新记录。在beanshel中,您还可以使用字符串s=vars.get(“newRecord”)获取值;谢谢你的回答。事实上,我看了BlazeMeter的视频,读了他们的很多帖子,才走到了这一步。我觉得我离得很近,但我错过了一些东西。对于_setProperty(),在“generating”线程中创建BeanShell断言,并将函数放入脚本中,使参数和脚本文件字段为空。这是正确的吗?在第二个线程的HTTP请求中,路径是我需要用第一个线程中生成的变量附加这个路径。因此,我应该将“${uu P(newRecord,)}”放在Send参数1中。您可以在任何地方使用
    \uuu setProperty()
    函数,不一定在断言中使用。2.如果需要将其添加到路径-
    \up()
    函数,请直接添加到路径,谢谢您的回答。事实上,我看了BlazeMeter的视频,读了他们的很多帖子,才走到了这一步。我觉得我离得很近,但我错过了一些东西。对于_setProperty(),在“generating”线程中创建BeanShell断言,并将函数放入脚本中,使参数和脚本文件字段为空。这是正确的吗?在第二个线程的HTTP请求中,路径是我需要用第一个线程中生成的变量附加这个路径。因此,我应该将“${uu P(newRecord,)}”放在Send参数1中。您可以在任何地方使用
    \uuu setProperty()
    函数,不一定在断言中使用。2.如果需要将其添加到路径-
    \up()
    函数直接