jmeter - JMeter对所有线程使用相同的提取值
问题描述
我有两个示例请求,一个请求响应生成一个带有日期、付款参考(每次运行唯一)和状态的第一个 json(客户验证)。下一个请求(MakePayment)是使用第一个请求中的付款参考作为正文,然后发布付款。我已经使用正则表达式和 bean Shell 来提取和发布 . 当我在执行时使用一个线程运行时,这是有效的。
现在的问题是……我想对 50 个线程进行负载测试,每个线程都将返回唯一的付款参考,并且每个线程都应该在下一个请求中使用。目前我所写的是为所有下一个线程使用第一个提取的值,这使得只有一个工作作为参考不能用于 2 个请求。49 会失败。
如果我使用 50 个线程运行,则第一个请求将生成 1 个唯一引用,每个引用作为响应。我想在“付款”线程中使用它们中的每一个。目前它只是使用所有付款请求的参考之一
解决方案
- JMeter 属性对于整个 JVM 都是全局的,您需要使属性特定于线程
- 从 JMeter 3.1 开始,您应该使用 JSR223 测试元素和 Groovy语言编写脚本
- 永远不要将 JMeter 函数或变量内联到脚本中
- 最好使用JSON Extractor从 JSON 响应中获取值
将您的 Beanshell 断言更改为JSR223 断言并在此处使用以下代码:
props.put('payment_reference_' + (ctx.getThreadNum() + 1), vars.get('payment_reference'))
在您的“付款请求”中,使用__P()和__threadNum()函数组合以获得特定于线程的值,例如:
${__P(payment_reference_${__threadNum},)}
推荐阅读
- azure - 命令执行失败时 Azure devops 不会失败
- terraform - 何时/何地初始化或注入数据 aws_availability_zones?
- flutter - Flutter中的底部导航栏设计在单击时会展开一个图标
- javascript - 如果匹配到另一个列值,则返回 json 数组的列唯一值
- jestjs - 使用窃取作为其捆绑器(如 canjs v2.3)的 npm 包的 Jest 返回错误
- javascript - 删除默认排序“顺序”表单 DataTable
- ts-node - 仅带有 ts-node 的 npm 脚本失败
- java - 如何仅打印 Java 2D 数组的特定元素?
- python - 使用'f2py'从python调用Fortran代码,而fortran代码使用C++代码
- html - svg 响应与背景大小的图像封面