
1. LoadRunner VuGen 创建 Web Services 测试脚本踩坑实录做性能测试的同学大概率都遇到过这种场景接口是 SOAP 协议用 Web(HTTP/HTML) 协议录完脚本回放时直接卡死或者报server returned an incorrectly formatted SOAP response翻遍日志也找不到 SOAP 报文在哪。这时候就得换 Web Services 协议重新录制。但换完协议你会发现VuGen 的录制向导、WSDL 配置、回放校验又是另一套逻辑跟 HTTP 协议完全不是一回事。这篇内容聚焦 LoadRunner VuGen 里 Web Services 协议脚本的完整创建流程从工程配置、协议参数填写到脚本录制、回放校验、协议层报错定位都会给出可复制的操作步骤。同时我会把 TaoToken 统一 Key 接入 VuGen 的方式讲清楚——很多同学在调试 Web Services 接口时需要频繁切换不同模型的 API 通道来对比响应用统一 Key 能省掉反复改配置的麻烦。适合正在做多协议接口性能测试、需要快速定位协议层报错的测试工程师。先说清楚 Web Services 协议在 VuGen 里的定位。它和 Web(HTTP/HTML) 最大的区别在于Web 协议录的是浏览器行为脚本里是一堆web_url、web_submit_formWeb Services 协议录的是 SOAP 请求脚本里是web_service_call、soap_request这类函数直接操作 XML 报文。所以当你发现 HTTP 协议录出来的脚本回放时找不到 SOAP 文件字样或者响应体里全是 XML 但脚本解析不了就该考虑换协议了。VuGen 创建 Web Services 脚本的核心步骤其实就四步选协议、配录制向导、录脚本、回放调试。但每一步都有坑。选协议时要注意双协议 Web/Web Services 的引擎用的是不同机制得当成单协议处理不能和多协议类型混用。配录制向导时Record Client Application和Scan WSDL file两种方式的区别直接决定你后面能不能正常回放。录脚本时事务和集合点的插入位置有讲究集合点只能在 Action 里插放 vuser_init 或 vuser_end 里不生效。回放调试阶段超时、乱码、HTTP 状态码、请求找不到这几类错误各有各的解法。下面按实际操作顺序展开每一步都给到具体的配置项和参数值。2. TaoToken 统一 Key 前置配置VuGen 多协议调试的 API 通道准备在正式录 Web Services 脚本之前先把 TaoToken 的 API 通道配好。这一步不是必须的但如果你需要在 VuGen 里调试的 Web Services 接口涉及调用大模型能力或者你想用统一的 Key 管理多个模型的 API 调用那提前配好能省很多事。TaoToken 的定位是统一 API 通道一个 Key 可以走多个模型的请求。官网地址是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 入口是 https://taotoken.net/api 。注意 API 地址后面不加 UTM 参数直接访问就行。2.1 获取 API Key 与模型 ID登录后进控制台在 API Keys 页面创建一个新的 Key。创建时建议给 Key 起个有意义的名字比如lr-webservice-test方便后面在 VuGen 里区分不同测试场景用的 Key。创建完 Key 之后记下两样东西Key 本身一串以sk-开头的字符串和你要调用的模型 ID。模型 ID 在模型列表里能看到比如claude-sonnet-4-20250514这种格式。这两个值后面配 VuGen 的 Web Services 请求时都要用到。如果你用的是 Claude Code 或者 Cline 这类工具做接口调试TaoToken 也支持 Coding Plan 模式适合长期编码和 Agent 场景。但 VuGen 这边主要是走 API 通道所以重点记 Base URL 和 Key 就行。2.2 VuGen 运行环境中的网络配置VuGen 录制 Web Services 脚本时如果目标接口需要走特定的 API 通道得在 VuGen 的 Runtime Settings 里配好网络参数。具体路径是Run-time Settings→Internet Protocol→Preferences→Advanced。这里有个关键点VuGen 默认用 socket 方式回放但某些 API 通道对 socket 的支持不稳定会出现local proxy failed或者连接超时。解决办法是勾选winlnet replay instead of sockets选项。这个选项在Advanced区域里勾上之后回放会走 WinINet 栈兼容性更好。另外如果你在 VuGen 里配了代理但代理地址填错了或者代理服务没起来回放时会报local proxy failed。这时候先检查Recording Proxy标签页里的设置确认代理地址和端口跟实际一致。如果不需要代理直接清空就行。2.3 统一 Key 在 VuGen 脚本中的引用方式VuGen 的 Web Services 脚本里API Key 一般作为 SOAP 请求的 header 或者参数传递。有两种引用方式第一种是直接写在脚本里适合调试阶段。比如在soap_request函数里加一个 headersoap_request(StepNameModelCall, URLhttps://taotoken.net/api/v1/chat/completions, MethodPOST, SOAPEnvelope ?xml version\1.0\ encoding\UTF-8\? soap:Envelope xmlns:soap\http://schemas.xmlsoap.org/soap/envelope/\ soap:Header AuthorizationBearer sk-你的Key/Authorization /soap:Header soap:Body Request Modelclaude-sonnet-4-20250514/Model Prompttest/Prompt /Request /soap:Body /soap:Envelope, LAST);第二种是用参数化把 Key 存在参数文件里脚本里引用参数名。这种方式适合多环境切换比如测试环境和生产环境用不同的 Key。参数化在 VuGen 里通过Parameter List配置脚本里用{ApiKey}这种占位符引用。实测下来调试阶段直接用第一种方式最快等脚本稳定了再改成参数化。但要注意Key 直接写在脚本里有泄露风险提交到版本库之前记得改成参数引用。3. VuGen Web Services 协议脚本可复制配置从工程创建到录制向导这一节是核心操作部分按步骤给出可复制的配置。每一步都对应 VuGen 里的具体界面和参数值。3.1 新建 Web Services 单协议脚本启动 VuGen在File菜单里选New弹出New Virtual User对话框。在Category列表里找到Web Services选中后点OK。这里注意不要选Web (HTTP/HTML)也不要选多协议模式。Web Services 协议在 VuGen 里是单协议类型选多协议反而会出问题。如果你之前用过最近使用的协议列表确认一下选的是Web Services而不是Web。新建完成后VuGen 主界面会显示脚本编辑区默认有vuser_init、Action、vuser_end三个部分。Web Services 脚本的录制内容默认放在Action1里初始化操作放vuser_init退出操作放vuser_end。3.2 配置 Web Services 录制向导点工具栏的Start Record按钮弹出录制配置对话框。Web Services 协议的录制向导比 HTTP 协议多几个步骤按顺序配置第一步选择录制方式。有两个选项Record Client Application和Scan WSDL file。如果你要录的是客户端直接发起的 SOAP 请求选Record Client Application。如果你有 WSDL 文件想基于 WSDL 生成请求选Scan WSDL file。大多数性能测试场景选前者因为更贴近真实用户行为。第二步配置 WSDL 文件。如果上一步选了Record Client Application这里选Do not use WSDL file during recording。如果选了Scan WSDL file这里要指定 WSDL 文件的路径VuGen 会解析 WSDL 并生成对应的请求模板。第三步配置应用访问地址。在URL里填被测 Web Services 的地址比如http://192.168.1.100:8080/services/OrderService。Record into action选Action1除非你有特殊的分段需求。第四步高级选项。点Advanced Details按钮可以配置录制时的思考时间、字符集等。字符集这里建议选UTF-8避免后面回放时出现中文乱码。思考时间默认就行后面在 Runtime Settings 里还能调。配置完成后点完成VuGen 会自动启动应用程序并显示Recording...工具栏开始录制。3.3 录制过程中的事务与集合点插入录制过程中在需要定义事务的操作前点录制工具栏的Start Transaction按钮输入事务名称。事务名要有意义比如SubmitOrder、QueryInventory后面分析结果时能直接对应到业务操作。事务名命名规则必须以字母或数字开始可以包含字母、数字和!$%-[^_{}|~ 这些字符。不要用中文和空格。集合点的插入位置要注意只能在Action里插不能在vuser_init或vuser_end里插。因为集合点的作用是让多个 Vuser 在同一时刻执行某个操作而vuser_init和vuser_end只执行一次插集合点没意义。插入集合点的操作在需要同步的位置点录制工具栏的Rendezvous按钮输入集合点名称。名称最好能说明同步的动作比如SyncBeforeSubmit。录制完成后点StopVuGen 自动生成脚本。保存脚本时起个跟业务相关的名字比如OrderService_WS存到指定目录。3.4 脚本结构说明与关键函数录制生成的 Web Services 脚本结构上跟 HTTP 协议脚本类似但函数不一样。核心函数是web_service_call和soap_request。web_service_call用于调用 Web Services 操作参数里包含 SOAP 请求的 XML 内容。soap_request用于发送原始的 SOAP 请求适合需要精细控制报文内容的场景。脚本里还会出现lr_start_transaction和lr_end_transaction这是事务的开始和结束标志。集合点对应的是lr_rendezvous函数。一个典型的 Web Services 脚本片段长这样Action() { lr_start_transaction(QueryOrder); web_service_call(StepNameQueryOrder_101, SOAPMethodOrderService|OrderServiceHttpPort|queryOrder, ResponseParamresponse, ServiceOrderService, ExpectedResponseSoapResult, Snapshott123.inf, BEGIN_ARGUMENTS, orderId10001, END_ARGUMENTS, BEGIN_RESULT, orderStatusParamOrderStatus, END_RESULT, LAST); lr_end_transaction(QueryOrder, LR_AUTO); return 0; }这段脚本里web_service_call的参数需要根据实际的 WSDL 来填。SOAPMethod的格式是服务名|端口名|操作名BEGIN_ARGUMENTS和END_ARGUMENTS之间是请求参数BEGIN_RESULT和END_RESULT之间是响应参数的提取。3.5 Runtime Settings 关键配置脚本录完后打开Run-time Settings重点配这几项Internet Protocol→Preferences→Advanced勾选winlnet replay instead of sockets避免 socket 回放时的兼容性问题。Internet Protocol→Preferences→Options把HTTP-request connect timeout和HTTP-request receive的值调大默认 120 秒可以改成 300 秒避免大报文传输时超时。Internet Protocol→Recording确认Recording Level是HTML-based scriptScript Type选A script containing explicit。如果回放时出现Requested form not found错误改成URL-based script再试。Log标签页把日志详细级别调到Extended回放时能看到完整的请求和响应报文方便定位协议层错误。Preferences→Check勾选Enable Image and text check这样脚本里的检查点才会生效。默认是关闭的不勾的话web_find这类检查函数不会执行。4. 验证请求与成功结果脚本回放与响应校验脚本录完、配置调好后先别急着放进场景跑负载单机回放一遍确认脚本能跑通。4.1 编译检查点工具栏的Compile按钮VuGen 会检查脚本语法。如果脚本里有语法错误或者乱码编译会报错。编译通过的话执行日志里显示No error detected。编译阶段常见的错误是中文乱码导致的语法错误。如果脚本里有中文注释或者中文参数值而字符集没配对编译就会失败。解决办法是在Recording Options的Advanced里勾选Support Charset然后选UTF-8。4.2 单机回放点工具栏的Run按钮VuGen 开始执行脚本。执行期间可以通过View→Output Window→Execution Log查看日志。回放成功后VuGen 会显示结果页。结果页左侧是脚本的树型结构每个控件前面有绿色对号表示执行成功。点某个控件右侧会显示对应的请求和响应内容。如果某个控件执行失败前面会显示红色叉号。点这个控件右侧会显示具体的错误原因和出错位置。双击错误提示VuGen 能直接定位到脚本里出错的那一行。4.3 响应校验Web Services 脚本的响应校验主要看两点HTTP 状态码和 SOAP 响应体。HTTP 状态码在Execution Log里能看到。200 表示请求成功404 表示资源找不到500 表示服务器内部错误。SOAP 响应体在结果页的右侧能看到。重点检查soap:Body里的内容是否符合预期。如果响应体里有soap:Fault节点说明服务端返回了错误需要根据 Fault 里的错误码和错误信息定位问题。对于需要提取响应参数的场景在web_service_call的BEGIN_RESULT和END_RESULT之间配置参数提取。提取出来的参数可以在后续请求里引用实现接口间的数据传递。4.4 用 TaoToken 统一 Key 验证模型调用类接口如果你的 Web Services 接口涉及调用大模型能力可以用 TaoToken 的 API 通道做验证。在 VuGen 里发一个 SOAP 请求到https://taotoken.net/api请求体里带上模型 ID 和 Prompt看响应是否正常返回。验证请求的配置如下soap_request(StepNameVerifyModelCall, URLhttps://taotoken.net/api/v1/chat/completions, MethodPOST, SOAPEnvelope ?xml version\1.0\ encoding\UTF-8\? soap:Envelope xmlns:soap\http://schemas.xmlsoap.org/soap/envelope/\ soap:Header AuthorizationBearer sk-你的Key/Authorization Content-Typeapplication/json/Content-Type /soap:Header soap:Body ModelRequest Modelclaude-sonnet-4-20250514/Model Messages[{\role\:\user\,\content\:\ping\}]/Messages /ModelRequest /soap:Body /soap:Envelope, LAST);回放后检查响应里是否有正常的模型返回内容。如果返回 401说明 Key 不对或者没带上如果返回local proxy failed检查 VuGen 的代理设置和winlnet replay选项。验证通过后说明 API 通道是通的可以把这个请求模式复制到正式的 Web Services 脚本里。5. 本篇常见错排查VuGen Web Services 协议报错对照这一节把 VuGen 录制和回放 Web Services 脚本时最常见的几类错误列出来对照着排查。5.1 401 错误认证失败报错信息HTTP 401 Unauthorized或者Authentication failed。原因API Key 没带、Key 过期、或者 Key 的权限不够。排查步骤先检查脚本里Authorizationheader 有没有正确带上 Key。如果 Key 是参数化的检查参数文件里的值是不是最新的。如果 Key 没问题去 TaoToken 控制台确认 Key 的状态和权限范围。5.2 local proxy failed代理配置错误报错信息Error -27728: Step download timeout或者local proxy failed。原因VuGen 的代理设置跟实际网络环境不匹配或者代理服务没起来。排查步骤打开Run-time Settings→Internet Protocol→Preferences→Advanced勾选winlnet replay instead of sockets。然后检查Recording Proxy标签页确认代理地址和端口正确。如果不需要代理清空代理设置。5.3 reading choices 错误响应解析失败报错信息Error: server returned an incorrectly formatted SOAP response或者reading choices failed。原因VuGen 解析 SOAP 响应时XML 格式不符合预期。常见于服务端返回的 XML 头里字符集声明跟实际编码不一致。排查步骤在Execution Log里查看完整的响应报文确认 XML 头的encoding属性值。如果是zh_cn这种非标准值需要服务端改成UTF-8。客户端这边可以在Recording Options的Advanced里把字符集强制设为UTF-8。5.4 OAuth 相关错误令牌获取失败报错信息OAuth token request failed或者invalid_client。原因如果 Web Services 接口需要 OAuth 认证VuGen 脚本里需要先获取 token再带着 token 发请求。token 获取失败通常是 client_id 或 client_secret 不对或者 token 端点地址填错了。排查步骤先用 curl 或 Postman 单独测一下 token 获取接口确认能拿到 token。然后把同样的请求配置搬到 VuGen 里。注意 VuGen 的web_custom_request函数可以用来发 OAuth token 请求。5.5 超时错误请求响应时间过长报错信息Error -27728: Step download timeout (120 seconds) has expired。原因服务端响应太慢或者网络延迟大超过了 VuGen 默认的 120 秒超时。排查步骤在Run-time Settings→Internet Protocol→Preferences→Options里把HTTP-request connect timeout和HTTP-request receive的值调大比如改成 300 秒。如果调大后还是超时检查服务端是否有性能问题。5.6 请求找不到录制模式不匹配报错信息Error -27979: Requested form not found。原因录制时用的HTML-based script模式但回放时某些表单元素找不到。常见于页面里有 JavaScript 动态生成的表单。排查步骤打开Recording Options→Internet Protocol→Recording把Recording Level改成URL-based script重新录制脚本。URL-based 模式录的是原始 URL 请求不依赖页面元素解析兼容性更好。5.7 检查点不执行检查功能未开启报错信息脚本里插了web_find检查点但回放时没执行。原因LoadRunner 默认关闭了文本和图像检查功能需要手动开启。排查步骤打开Run-time Settings→Internet Protocol→Preferences→Check勾选Enable Image and text check。勾上之后重新回放检查点就会生效。5.8 中文乱码字符集配置错误报错信息脚本里中文显示为乱码回放时停在乱码位置。原因录制时字符集没配对或者脚本文件保存的编码跟 VuGen 读取的编码不一致。排查步骤在Recording Options→Advanced里勾选Support Charset选UTF-8。然后重新录制脚本。如果脚本已经录好了可以手动把脚本文件转成 UTF-8 编码再打开。6. 从 VuGen 到场景Web Services 脚本的后续接入脚本在 VuGen 里回放通过后下一步是放到 Controller 里跑场景。但在那之前还有几件事要做。第一参数化。把脚本里写死的值改成参数比如订单号、用户 ID 这些。参数化在 VuGen 的Parameter List里配置脚本里用{ParamName}引用。参数文件可以用 CSV 或 DAT 格式每行一组值。第二关联。Web Services 脚本里有些值是从上一个响应里提取出来传给下一个请求的。这种动态值需要做关联。VuGen 支持自动关联和手动关联。自动关联在录制时就能配手动关联需要自己写提取函数。第三事务和集合点的最终确认。事务名要有业务含义集合点的位置要跟实际并发场景匹配。事务和集合点的配置直接影响后面场景执行的结果分析。第四Runtime Settings 的最终检查。确认winlnet replay instead of sockets勾上了超时时间调够了日志级别设对了检查功能开启了。这些都确认完之后把脚本保存然后在 Controller 里新建场景把脚本加进去配置 Vuser 数量和加压策略就可以跑负载了。如果你在调试过程中需要频繁调用模型接口做对比测试TaoToken 的 API Keys 页面可以管理多个 Key接入文档里有详细的参数说明。模型对话功能适合快速验证单个请求的响应Coding Plan 适合长期编码和 Agent 场景。根据实际测试需求选对应的入口就行。最后说一个实际踩过的坑VuGen 录制 Web Services 脚本时如果目标接口的 WSDL 文件里定义了多个端口录制向导里选的端口跟实际调用的端口不一致回放时会报SOAPMethod not found。解决办法是打开 WSDL 文件确认service节点下的port名称然后在web_service_call的SOAPMethod参数里用正确的端口名。这个错误在日志里不会直接提示端口不匹配只会说方法找不到排查起来比较费时间。