在JMeter中如何将响应保存到变量中

21

我正在使用JMeter对我的服务器进行负载测试。在其中一个POST请求中,我会在响应中收到一个唯一标识符。我需要将此ID作为参数发送到接下来的POST请求中。我对JMeter不熟悉,不知道如何处理。非常感谢您的帮助。


1
可能是如何在JMeter中捕获使用JavaScript创建的动态值的重复问题。 - Hana Bzh
4个回答

31
如果您需要将整个响应存储到变量中,请按照以下步骤操作:
  1. Beanshell PostProcessor添加为返回所需响应的请求的子级
  2. 将以下行放入后处理器的“脚本”区域:

    vars.put("response", new String(data));
    
  3. 需要时将提取的值引用为${response}

    请参阅如何使用BeanShell:JMeter最喜爱的内置组件指南,了解有关JMeter中Beanshell脚本的更多信息


或者您也可以使用正则表达式提取器完成同样的操作,在这种情况下,相关配置将是:

  • 引用名称:response
  • 正则表达式:(?s)(^.*)
  • 模板:$1$

如果您需要响应的一部分而不是全部响应,则可以根据需要修改正则表达式,如JMeter用户手册中的正则表达式章节所述


12

如果你确实需要将整个响应存储到一个变量中,请按照以下步骤操作:

  1. JSR223 PostProcessor 添加为返回所需响应的请求的子元素。

JSR223 Post Processor

  1. 将下面这行代码放到"Script"区域:

vars.put("response", prev.getResponseDataAsString());

  1. 在需要时使用此响应 ${response}

但是,你很少需要使用整个响应,并且对于大型响应来说应避免这样做。在这种情况下,更好的方法是使用适合响应格式的提取器:


5
你可以使用 JMeter的后置处理器正则表达式提取器从响应中提取所需的值。只需将其添加到响应包含所需值的采样器下面即可。
在正则表达式提取器中,你需要定义变量名(referenceName)、正则表达式、模板等。稍后你可以使用此变量中的值。要了解如何使用正则表达式提取器,你可以参考以下教程。

https://docs.blazemeter.com/customer/portal/articles/1743642-using-regex-regular-expression-extractor-with-jmeter


0

我知道这个问题很老,但我同意@UBIK的观点,你应该使用JSON提取器。我正在处理一个每秒发送100多个请求的负载测试,并且需要重复使用特定JSON键中的值,因此我正在使用JSON提取器并将值保存在.csv文件中以供下一个请求使用。

  1. 提取JSON


  2. 这是编写它到.csv文件的Groovy脚本

 def myRandomIds = new File("randomIds.csv")
    myRandomIds << vars.get("id") + ","
    myRandomIds << System.getProperty("line.separator")
    log.info(vars.get("id") + " saved to randomIds.csv...")

  • 这是我在另一个请求中设置的CSV数据配置,该请求正在从CSV文件中读取。(在我的情况下,这些.jmx文件是使用Jenkins自动化和参数化的)


  • CSV数据集配置



  • 网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接