在 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 |
| EncType | Content-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