为啥 $var 和 vars.get('var') 没有返回相同的值?

Posted

技术标签:

【中文标题】为啥 $var 和 vars.get(\'var\') 没有返回相同的值?【英文标题】:Why $var and vars.get('var') didn't return same value?为什么 $var 和 vars.get('var') 没有返回相同的值? 【发布时间】:2020-06-16 06:45:11 【问题描述】:

你能解释一下为什么我用同一个变量得到两个不同的结果吗?

代码

def sql_req = "select message from messages where message_timestamp like '" + vars.get('todayDate') + "%' and message_content like '" + vars.get('msg_id') + "%'"

log.info('Req 1 : ' + sql_req)

log.info("Req 2 : select message from messages where message_timestamp like '$todayDate%' and message_content like '$msg_id%'")

结果

Req 1 : select message from messages where message_timestamp like '16/06/20%' and message_content like '132656787653545454%'
Req 2 : select message from messages where message_timestamp like '16/06/20%' and message_content like '878765654556467677%'

我在Thread Group 中设置了几个循环。但是$msg_id 保留第一个循环的值。没有更新……

所以我被阻止了,因为我想在 JDBC Request 中使用此请求(select message from messages where message_timestamp like '$todayDate%' and message_content like '$msg_id%'),但由于值永远不会更新,每个循环都会执行相同的请求。

你能解释一下为什么吗? 提前谢谢你

【问题讨论】:

见***.com/questions/46418275/… 【参考方案1】:

根据JSR223 Sampler 文档:

JSR223 测试元素有一个特性(编译)可以显着提高性能。

使用此功能时,请确保您的脚本代码不会直接在脚本代码中使用 JMeter 变量或 JMeter 函数调用,因为缓存只会缓存第一个替换。而是使用脚本参数。

因此,要么将您的 $msg_id 放入“参数”部分,并在需要时将其引用为 Parametersargs[0]

或者使用vars 简写JMeterVariables 类实例,它提供对当前线程范围内所有JMeter 变量的读/写访问。如果需要,请参阅Top 8 JMeter Java Classes You Should Be Using with Groovy 文章了解更多详细信息

【讨论】:

以上是关于为啥 $var 和 vars.get('var') 没有返回相同的值?的主要内容,如果未能解决你的问题,请参考以下文章

jmeter 小脚本 BeanShell PreProcessor vars.get

从未知对象获取属性和值

对象修改属性查询获取

jmeter常见参数 varsprevctx props 类的api

jmeter 常用内置变量

jmeter beanshell里面写了函数怎么调用