导读:本期聚焦于小伙伴创作的《LoadRunner如何进行XML上传性能测试?web_custom_request函数该怎么写?》,敬请观看详情。做接口压测时,遇到需要把XML报文作为请求体直接上传的服务端,录制脚本经常只能抓到二进制或空 body,导致压测结果失真。web_custom_request 允许手动构造方法、URL、Content-Type 与完整报文,是这类场景的关键函数。本文说明如何用该函数拼装带 XML 内容的 POST 请求,解释 body 参数转义规则、字符集设置与超时配置,并给出可复用的脚本模板。掌握这些要点,就能在 Controller 中稳定跑出真实的上传吞吐与响应曲线,避免因为脚本层封装错误而误判系统容量。

在 LoadRunner 的 Web 协议脚本里,如果被测系统要求客户端把一段 XML 文本作为请求体上传,单纯靠录制往往得不到可用的脚本。很多接口使用 text/xml 或者 application/xml 类型接收数据,录制工具可能只记录下资源名而丢失正文。这时候就必须用 web_custom_request 自己组装请求,才能真实模拟多用户并发上传 XML 的行为。

为什么要用 web_custom_request 而不是 web_submit_data

web_submit_data 适合表单键值对提交,它会自动按 application/x-www-form-urlencoded 方式编码参数。但 XML 上传通常是一个完整的报文主体,不是分散的表单项,用 web_submit_data 很难把整段 XML 准确塞进 body,而且特殊字符容易被错误转义。

web_custom_request 则开放了 Method、URL、Body 或 BodyFilePath 等字段,你可以明确指定 POST 方法、目标地址以及原始报文内容。它在性能测试中更底层,也更适合 RESTful、SOAP 这类以 XML 为负载的接口。当压测目标就是 XML 上传接口时,这个函数几乎是唯一干净的做法。

web_custom_request 的核心参数说明

下面列出写 XML 上传脚本时最关键的几个参数。理解它们可以避免绝大多数脚本错误。

参数名作用XML上传注意点
URL请求地址写完整路径,含协议与端口
Method请求方法一般填 POST
EncTypeContent-Type填 text/xml 或 application/xml
Body请求体放转义后的 XML 字符串
Snapshot快照名可省略或留空

其中 Body 里的 XML 如果含有双引号、小于号、大于号,在 C 语言风格的脚本里要做转义,比如双引号前加反斜杠,小于号写成 x3C 或直接用 LR 支持的转义方式。若 XML 较长,也可改用 BodyFilePath 指向参数化文件。

一个可直接运行的脚本示例

假设我们要向 http://192.168.0.1:8080/upload 提交一段订单 XML,下面这段 Action 代码展示了标准写法。

Action()
{
    web_custom_request("UploadXML",
        "URL=http://192.168.0.1:8080/upload",
        "Method=POST",
        "EncType=text/xml; charset=utf-8",
        "Body=<?xml version="1.0" encoding="UTF-8"?>"
              "<order>"
              "<id>1001</id>"
              "<amount>250.5</amount>"
              "</order>",
        "TargetFrame=",
        "Referer=",
        LAST);

    return 0;
}

上面代码中,XML 的尖括号都写成了 < 和 >,双引号用反斜杠转义,这样 LoadRunner 在拼装报文时不会把结构符号误认成脚本语法。如果服务端要求特定字符集,务必在 EncType 里写明 charset=utf-8,否则中文节点可能乱码。

当 XML 内容特别大,比如几 MB 的报文,建议先把文件放到脚本目录,用 BodyFilePath 引用:

Action()
{
    web_custom_request("UploadBigXML",
        "URL=http://192.168.0.1:8080/upload",
        "Method=POST",
        "EncType=application/xml",
        "BodyFilePath=order_big.xml",
        LAST);

    return 0;
}

参数化与并发压测要点

真实性能测试不会只发一份固定 XML。我们可以通过参数把 id、amount 等节点值替换掉,让每个虚拟用户发不同数据。在 LoadRunner 参数列表中建一个 file 类型参数,再在 Body 字符串里用 {param_name} 占位即可。

另外要注意思考时间与集合点。XML 上传通常消耗服务端解析资源,如果并发瞬间打满,需观察 CPU 与内存曲线。可在 Controller 里设置逐步加压,并结合 web_set_timeout 调整连接与接收超时,防止脚本因默认超时过短而误报失败。

常见错误与排查思路

第一类错误是 Content-Type 没配对,导致服务端返回 415。确认 EncType 与接口文档一致。第二类是 Body 转义不全,脚本编译报错或发出畸形报文。第三类是用了 https 却没配证书,需在运行时设置里忽略证书校验或导入证书。

若回放日志里看到收到的响应不是预期成功码,可打开 Extended Log 的 Data returned by server,把返回 XML 打印出来比对。只要请求体与服务端契约一致,web_custom_request 就能稳定支撑上千并发的 XML 上传性能测试。

LoadRunnerweb_custom_requestXML上传性能测试修改时间:2026-08-05 21:15:37

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。