首页 > 解决方案 > JMeter对所有线程使用相同的提取值

问题描述

我有两个示例请求,一个请求响应生成一个带有日期、付款参考(每次运行唯一)和状态的第一个 json(客户验证)。下一个请求(MakePayment)是使用第一个请求中的付款参考作为正文,然后发布付款。我已经使用正则表达式和 bean Shell 来提取和发布 . 当我在执行时使用一个线程运行时,这是有效的。

现在的问题是……我想对 50 个线程进行负载测试,每个线程都将返回唯一的付款参考,并且每个线程都应该在下一个请求中使用。目前我所写的是为所有下一个线程使用第一个提取的值,这使得只有一个工作作为参考不能用于 2 个请求。49 会失败。

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

如果我使用 50 个线程运行,则第一个请求将生成 1 个唯一引用,每个引用作为响应。我想在“付款”线程中使用它们中的每一个。目前它只是使用所有付款请求的参考之一

标签: jmeter

解决方案


  1. JMeter 属性对于整个 JVM 都是全局的,您需要使属性特定于线程
  2. 从 JMeter 3.1 开始,您应该使用 JSR223 测试元素和 Groovy语言编写脚本
  3. 永远不要将 JMeter 函数或变量内联到脚本中
  4. 最好使用JSON Extractor从 JSON 响应中获取值

  1. 将您的 Beanshell 断言更改为JSR223 断言并在此处使用以下代码:

    props.put('payment_reference_' + (ctx.getThreadNum() + 1), vars.get('payment_reference'))
    
  2. 在您的“付款请求”中,使用__P()__threadNum()函数组合以获得特定于线程的值,例如:

    ${__P(payment_reference_${__threadNum},)}
    

推荐阅读