今天在调试JMeter脚本时,发现了一个让我很困惑的问题。
userId为1001200${userId}然后运行下面的脚本,并在使用和时获取“userId”的不同值vars.get("userId")。我认为它们应该具有相同的值,但似乎并非如此。运行后vars.put("userId", "-111"),${userId}得到vars.get("userId")不同的值:所以即使它们的变量相同,它似乎${}也有一些差异,有谁知道原因吗?vars.get()
提前致谢。
@user7294900 提供的答案是指选中“缓存编译脚本”选项时的情况。但即使没有检查,您的脚本也会解析执行${varName} 前定义的变量,而在执行期间vars.get("varName")解析。
在 JMeter 即将运行任何元素(采样器、预处理器或后处理器)之前,它将获取(每个)文本字段,并解析任何变量、函数或内联代码,通过${...}评估时可用的值来标识。因此,语法${...}将变量转换为常量字符串,您的代码(对于 Groovy 或任何其他执行引擎)将如下所示:
log.info("***" + "1001200" + "***");
log.info("***" + vars.get("userId") + "***");
vars.put("userId", "-111");
log.info("***" + "1001200" + "***");
log.info("***" + vars.get("userId") + "***");
Run Code Online (Sandbox Code Playgroud)
因此,无论您在执行过程中如何更改变量,它都不会改变,因为它不再是变量。但vars.get("userId")另一方面,它是一个函数调用,每次都会检查变量值。