You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jmeter JSR223预处理器读取外部CSV文件报错求助

解决JMeter中JSR223预处理器Groovy脚本解析错误问题

问题概述

需求为从外部CSV文件读取ItemID并传入JSR223预处理器,本地Groovy执行器中可运行的脚本在JMeter中执行时抛出解析错误,环境配置为Java 19.0.1、JMeter 5.4.3、Groovy 4.0.2。

原脚本(本地可运行)

def items = []
    List<String> lines = new File("C:\Users\854986\itemid.csv").readLines()
    def itemNo = RandomUtils.nextInt(5, 10) 

    1.upto(itemNo) { index ->
        def item = [:]
        def lineFromCsv = lines.get(index as int)
        item.put('itemId', lineFromCsv)

报错信息

2022-11-15 12:34:14,398 ERROR o.a.j.m.JSR223PreProcessor: Problem in JSR223 script, JSR223 PreProcessor 3
javax.script.ScriptException: org.apache.commons.jexl2.JexlException$Parsing: JsonBuilder@1:20 parsing error near '... ment, miss ...'
at org.apache.commons.jexl2.scripting.JexlScriptEngine.compile(JexlScriptEngine.java:237)

报错原因

  1. 脚本引擎不匹配:JMeter默认可能使用JEXL2引擎执行脚本,而非Groovy引擎,JEXL2不兼容Groovy语法导致解析失败。
  2. 脚本语法不完整:原脚本存在未闭合的循环代码,且未将创建的item对象添加到items列表中。
  3. 路径转义错误:Windows路径中的反斜杠未转义,会被解析为特殊字符,导致文件路径无效。
  4. 索引越界风险:随机生成的itemNo可能超过CSV文件的行数,引发索引越界异常。

修复方案

1. 指定Groovy脚本引擎

在JSR223预处理器的配置界面:

  • 选择Language为groovy(默认可能是jexl2,需手动切换)
  • 勾选Cache compiled script if available,提升脚本执行性能

2. 修正Groovy脚本

以下是完整修复后的脚本:

import org.apache.commons.lang3.RandomUtils

def items = []
// Windows路径需转义反斜杠,或使用正斜杠替代
def csvFile = new File("C:\\Users\\854986\\itemid.csv")
List<String> lines = csvFile.readLines()

// 确保随机数不超过CSV文件行数,避免索引越界
def maxCount = Math.min(10, lines.size())
def itemNo = RandomUtils.nextInt(5, maxCount)

1.upto(itemNo) { index ->
    def item = [:]
    // CSV行索引从0开始,此处index从1起始,需减1获取正确行数据
    def lineFromCsv = lines.get(index - 1 as int)
    item.put('itemId', lineFromCsv)
    items.add(item) // 将item对象添加到列表中
}

// 将items列表存入JMeter变量,供后续请求调用
vars.putObject("itemsList", items)

3. 验证文件访问权限

可添加日志输出验证文件是否可访问:

def csvFile = new File("C:\\Users\\854986\\itemid.csv")
log.info("文件存在状态:" + csvFile.exists())
log.info("文件绝对路径:" + csvFile.getAbsolutePath())

通过JMeter的日志查看输出,确认文件路径正确且JMeter有读取权限。

内容的提问来源于stack exchange,提问作者Raxon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 17:55:31