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

如何在JMeter JSR223预处理器中动态生成指定大小的XML对象

JMeter JSR223预处理器动态生成XML片段方案

实现工具

Groovy 自带的 XmlNodeBuilder,无需引入额外依赖,JSR223预处理器选择groovy语言即可直接使用,原生支持XML节点构造,自动处理转义字符,比字符串拼接稳定性更高。

实现步骤

  1. 先在测试计划中添加用户定义的变量,配置控制参数:

    • pa_total_count:要生成的<pa>节点总数量,比如填100就生成100个pa节点
    • req_id_prefix:reqID的前缀,默认可以填ID
    • doc_nr_start:docNr的起始数值,默认填100000001
  2. 在JSR223预处理器中粘贴如下代码:

import groovy.xml.XmlNodeBuilder
import groovy.xml.XmlNodePrinter
import java.io.StringWriter

// 读取JMeter自定义变量
def paCount = vars.get("pa_total_count") as int
def reqIdPrefix = vars.get("req_id_prefix")
def docNrStart = vars.get("doc_nr_start") as int

// 构造XML节点生成器
def writer = new StringWriter()
def xmlBuilder = new XmlNodePrinter(new PrintWriter(writer))
// 配置生成格式,保留缩进、不额外添加声明
xmlBuilder.setIndent("    ")
xmlBuilder.setOmitDeclaration(true)

def rootNodes = []
for (def i = 1; i <= paCount; i++) {
    // 格式化id为5位补0,比如1变成00001
    def seq = String.format("%05d", i)
    def currentReqId = reqIdPrefix + seq
    def currentDocNr = (docNrStart + i - 1).toString()
    def gender = i % 2 == 1 ? "f" : "m"
    def givenName = "Test" + i

    // 构造单个pa节点
    def paNode = new Node(null, "pa", [
        outOfScope: "false",
        inTransit: "false",
        reqID: currentReqId
    ])
    // 添加location子节点
    new Node(paNode, "location", [
        arrivalDate: "2021-09-20",
        code: "ASD",
        departureDatetime: "2021-09-20T11:00:00.000Z",
        scheduleNo: "AB123"
    ])
    // 添加docs子节点
    new Node(paNode, "docs", [
        dob: "1960-09-02",
        expiryDate: "2031-09-13",
        gen: gender,
        givenName: givenName,
        anotherCode: "AB",
        anotherCode2: "ABC",
        surname: "John",
        docNr: currentDocNr,
        docType: "J"
    ])
    rootNodes.add(paNode)
}

// 把生成的所有pa节点转成字符串
rootNodes.each { node ->
    xmlBuilder.print(node)
}
def xmlContent = writer.toString()

// 存入JMeter变量
vars.put("xmlObject", xmlContent)

验证要点

  • 生成的xmlObject变量已经是格式化好的<pa>节点集合,直接插入到HTTP请求的XML模板中即可正常使用
  • 可根据业务需求修改循环内的节点属性规则,比如日期、编码类字段也可以结合__time、__RandomString等JMeter函数动态生成
  • 若需要修改XML的缩进格式,调整xmlBuilder.setIndent的参数即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:45:03