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

JMeter JSR223预处理器根据CSV动态生成符合指定规则的XML对象

解决方法

核心思路

  • 直接在代码内加载全量CSV数据,避免依赖JMeter CSV组件单次仅读取一行的限制
  • 匹配传入的docId定位起始行下标
  • 利用取模运算实现读取到CSV末尾自动从头循环的逻辑
  • 循环生成节点时动态读取对应行的CSV数据

调整后的完整代码

// 配置参数区,根据实际情况修改
def csvFilePath = "你的CSV文件实际路径.csv"
def targetDocId = vars.get("iDocId").toString() // 传入的定位用docId变量
def numberOfNodes = 3 // 可改为 vars.get("numberOfNodes") as int 实现参数化
def pReqIDPrefix = "ID0000"

// 加载并解析CSV文件,缓存到全局属性避免每次请求重复读盘
// 如果CSV会频繁修改,可删除以下缓存判断逻辑,每次直接读取文件即可
if (!props.get("csvDataCache")) {
    def csvRows = []
    new File(csvFilePath).readLines().drop(1).each { line -> // drop(1)跳过表头
        def cols = line.split(",")*.trim()
        csvRows << [
            iDocType: cols[0],
            iDocId: cols[1],
            iName: cols[2],
            iDate: cols[3]
        ]
    }
    props.put("csvDataCache", csvRows)
}
def csvData = props.get("csvDataCache")
def totalRows = csvData.size()

// 定位起始行索引
def startIndex = csvData.findIndexOf { it.iDocId == targetDocId }
if (startIndex == -1) {
    throw new Exception("未找到docId为${targetDocId}的CSV行")
}

// 生成XML
def writer = new StringWriter()
def xml = new groovy.xml.MarkupBuilder(writer)
xml.objects {
    for (int i = 0; i < numberOfNodes; i++) {
        // 取模运算实现读到文件末尾自动循环
        def currentIndex = (startIndex + i) % totalRows
        def currentRow = csvData[currentIndex]
        // 对齐预期输出的节点属性
        object(a:'false', b:'false', c: pReqIDPrefix + (i+1).toString()) {
            al(ad:'2021-09-20', alc:'bla', dt:'2021-09-20T11:00:00.000Z', sn:'AB8912')
            // 动态填充当前行CSV数据
            doc(
                docType: currentRow.iDocType,
                docId: currentRow.iDocId,
                name: currentRow.iName,
                date: currentRow.iDate
            )
        }
    }
}

// 保存结果到JMeter变量
def nodeAsText = writer.toString()
log.info("生成的XML:\n${nodeAsText}")
vars.put('passengers3XmlObj', nodeAsText)

注意事项

  • 请替换代码中csvFilePath为你实际的CSV文件路径,支持相对JMeter bin目录的路径或者绝对路径
  • 若CSV文件会频繁修改,删除props缓存相关代码即可,每次执行会重新读取最新CSV数据
  • 已对齐你预期的XML属性配置:object节点的pReqID改为c,al节点的bla属性改为dt

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:24:03