如何在JMeter的JSR223 Sampler中使用JS函数并在HTTP请求采样器调用?
嘿,我来帮你理清这个问题~先给你个明确结论:直接在HTTP Request Sampler里调用JSR223 Sampler中定义的sum(a,b)函数是不可行的。原因很简单:每个JSR223 Sampler的脚本都运行在独立的上下文环境里,你在其中定义的函数、局部变量默认只在当前Sampler内部有效,HTTP Request Sampler没法直接访问另一个Sampler里的函数对象。
不过别担心,有几个实用的替代方案可以实现类似需求,下面给你逐个演示:
方案1:把函数存入全局属性,跨Sampler调用
如果你希望这个sum函数能被多个Sampler复用,可以把它存入JMeter的全局属性props中,这样所有Sampler都能获取并调用它。
步骤1:在前置JSR223 Sampler中定义并存储函数
创建一个JSR223 Sampler,放在HTTP Request Sampler前面,脚本内容如下:
// 定义求和函数 function sum(a, b) { return a + b; } // 将函数存入全局属性props,key自定义即可 props.put("sumFunction", sum);
步骤2:在HTTP Request Sampler中调用函数
给你的HTTP Request Sampler添加一个JSR223 PreProcessor(用来在请求发送前执行脚本),脚本内容:
// 从全局属性中取出函数 var sumFunc = props.get("sumFunction"); // 调用函数计算结果 var calculationResult = sumFunc(3, 5); // 将结果存入JMeter变量,供HTTP Request使用 vars.put("calculatedTotal", calculationResult.toString());
之后在HTTP Request Sampler的参数、路径或请求体中,就可以用${calculatedTotal}来引用这个计算结果了。
方案2:直接在HTTP Request的前置处理器中定义并调用函数
如果这个函数只需要给当前HTTP Request用,没必要全局存储,直接在请求的前置处理器里定义函数并计算更高效。
给HTTP Request Sampler添加JSR223 PreProcessor,脚本内容:
// 直接在前置处理器里定义函数 function sum(a, b) { return a + b; } // 计算并把结果存入变量 var total = sum(2, 4); vars.put("total", total.toString());
然后在HTTP Request里直接用${total}即可,完全不需要额外的独立JSR223 Sampler。
方案3:用JMeter内置函数替代(适合简单计算)
如果只是简单的数值求和,甚至不用写JavaScript函数,JMeter自带的__intSum或__longSum函数就能搞定。
比如在HTTP Request Sampler的参数中,直接用:
${__intSum(2,4,total)}
这个函数会计算2+4的结果,并存入名为total的变量,之后你就能用${total}引用结果了。这种方式适合逻辑简单的场景,省去写脚本的麻烦。
内容的提问来源于stack exchange,提问作者shank087

