news 2026/4/15 17:55:01

第三方软件测试测评机构【使用web_reg_save_param_ex函数:掌握LoadRunner关联的黄金法则 】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第三方软件测试测评机构【使用web_reg_save_param_ex函数:掌握LoadRunner关联的黄金法则 】

web_reg_save_param_ex 函数是 LoadRunner 中进行关联的基础。属于注册型(Service)函数,意味着它的执行不依赖于请求,而是在脚本运行时预先注册一个钩子(Hook),等待后续请求的服务器响应到达时,从中抓取符合条件的数据。

一、注册和捕获机制

先注册,后捕获的异步工作原理:

注册(脚本执行前):在脚本编译和执行时,函数会将其参数(如边界、参数名)注册到Vuser运行时中,声明“在下一个请求完成后,请检查其响应,并按照此规则抓取数据”。

捕获(请求完成后):脚本继续执行,发出下一个请求(如 web_url)。当该请求的响应返回时,运行时引擎会立刻检查响应内容,并根据之前注册的规则进行一致和抓取。

保存和应用:抓取到的文本被保存到指定的 LR参数(如 {CorrParam}) 中,可供后续请求使用。

因此,该函数必须放置在会生成目的响应的请求函数之前,且一般紧邻该请求。

二、函数参数详解

函数签名一般为:

int web_reg_save_param_ex( const char *ParamName, <List of Attributes>, <List of Search Filters>, LAST);

以下是最常用的参数详解:

基础参数:

ParamName,"CorrToken",捕获值的参数名,后续用 {CorrToken} 引用。命名应清晰。

左右边界:

LB,"name=\"csrf_token\" value=\"",左边界,必须是动态值左侧、固定不变的唯一文本。

RB," />" ,右边界,必须是动态值右侧、固定不变的唯一文本。

搜索控制:

Search,"Body" (默认), "Headers", "NoResource", "All",定义搜索范围。"Body" 最常用;"Headers"用于抓Cookie;"NoResource" 可忽略图片等资源,提升性能。

RelFrameID,"1.2",用于处理框架页,指定在哪个框架内搜索。需结合 ORD 使用。

一致和挑选:

ORD,"1" (默认), "All",一致序号。"1" 抓第一个一致项;"All" 抓全部,存入数组 {CorrToken_1}, {CorrToken_2}...

SaveOffset,"10",从一致起点后偏移指定字符数开始保存。用于边界内包含多余前缀时。

SaveLen,"20",限制保存长度。当动态值长度固定或需截断时使用。

转换处理:

Convert,"HTML_TO_URL", "HTML_TO_TEXT",数据转换。HTML_TO_URL 可将 &amp; 转为 &,处理HTML编码。

错误处理:

NotFound,"WARNING", "ERROR",未找到时的处理。"WARNING" 发警告并继续;"ERROR" 直接报错停止。默认是 "ERROR"。

文章来源:卓码软件测评

精彩推荐:点击蓝字即可
软件负载测试API自动化测试软件测试第三方软件测试软件性能测试软件测试机构

三、实战完整代码

一个处理登录流程中 sessionId 和 csrfToken 的完整案例,演示了标准使用流程。

分析:用户先访问登录页,页面返回一个CSRF令牌(藏在表单里)和一个会话Cookie(在响应头Set-Cookie中)。登录时需同时提交令牌和Cookie。

#include "web_api.h" Action() { // 1. 初始请求:访问登录页面,同时关联两个动态值 // 1.1 注册关联,从响应头中捕获 SessionID (JSESSIONID) web_reg_save_param_ex( "ParamName=sSessionID", "LB=Set-Cookie: JSESSIONID=", "RB=;", "Search=Headers", // 重点:在响应头中搜索 LAST); // 1.2 注册关联,从响应体中捕获 CSRF Token web_reg_save_param_ex( "ParamName=sCsrfToken", "LB=<input type=\"hidden\" name=\"csrf_token\" value=\"", "RB=\" />", "Search=Body", // 默认就是Body,可省略 "NotFound=WARNING", // 如果页面可能没有令牌,设为警告 LAST); // 1.3 执行请求,触发关联函数捕获数据 web_url("login_page", "URL=http://zmtests.com/login", "TargetFrame=", "Resource=0", "Referer=", LAST); // 调试输出:打印捕获到的值 lr_output_message("捕获到的SessionID: %s", lr_eval_string("{sSessionID}")); lr_output_message("捕获到的CSRF令牌: %s", lr_eval_string("{sCsrfToken}")); // 2. 登录请求:使用捕获到的动态值 web_add_header("Cookie", lr_eval_string("JSESSIONID={sSessionID}")); // 方式一:手动添加Cookie头 web_submit_data("login_action", "Action=http://zmtests.com/do_login", "Method=POST", "EncType=application/x-www-form-urlencoded", ITEMDATA, "Name=username", "Value=testuser", ENDITEM, "Name=password", "Value=123456", ENDITEM, "Name=csrf_token", "Value={sCsrfToken}", ENDITEM, // 提交表单中的令牌 LAST); // 3. 后续业务请求:一般只需继续携带SessionID(通过自动Cookie管理或手动添加) web_url("get_user_profile", "URL=http://zmtests.com/api/user/profile", // Cookie会自动管理,无需手动添加,前提是未禁用Cookie LAST); return 0; }

分析:

双关联注册:在 web_url 前连续注册两个关联,分别针对头部的Cookie和体部的Token。

请求触发:web_url 执行后,其响应会同时被两个关联函数处理,分别抓取值。

使用参数:在登录请求中,通过 {sCsrfToken} 提交令牌,并通过 web_add_header 手动设置Cookie头(这是一种更可控的方式,也可依靠LoadRunner的自动Cookie管理)。

后续会话:登录后,会话一般由Cookie维持,后续请求可自动携带。

四、技巧调试

边界查找和转义:如果边界中包含双引号 " 或反斜杠 \,必须使用 \ 进行转义。如:"LB={\"token\":\"", "RB=\"}"。

使用ORD处理数组:当列表项有多个相同结构时(如商品ID),设 "ORD=All",用 {sItemId_1}, {sItemId_2} 等引用。

JSON响应专用:对于纯JSON API,强烈推荐使用 web_reg_save_param_json。它使用JSONPath(如 "$.data.access_token")提取数据,远比根据文本边界的 web_reg_save_param_ex 更准确、稳定。

调试:

在 Runtime Settings -> Log 中,启用 Extended log 并勾选 Data returned by server 和 Parameter substitution。

回放脚本,在 Replay Log 中搜索 Notify: Saving Parameter 日志行,这是关联成功和否的最直接证据。

对比Warning: The string ... was not found 警告,调整你的左右边界。

五、总结

作为性能测试专家,湖南卓码软件测评有限公司的工程师在实践中总结出以下法则:

位置:web_reg_save_param_ex 必须 放在其目的请求之前,且中间不能有其他会触发HTTP请求的函数。

准确定位:优先使用 web_reg_save_param_json 处理JSON。对于HTML,尽可能寻找最靠近动态值、最独特的边界文本。可先保存完整响应到文件进行分析。

错误处理:生产脚本中,应对重点关联使用 "NotFound=ERROR",保证脚本在关联失败时立即停止,而不是带着错误数据继续执行,产生误导性测试结果。

掌握此函数意味着你已能准确控制HTTP对话中的动态数据流。当面对更复杂的身份认证流程(如OAuth 2.0)时,步骤仍是:分析流程 -> 确定捕获点和使用点 -> 编写准确的关联函数。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/11 12:47:42

金融AI营销合规困境?2026私有化部署榜单看原圈科技如何破局

在AI营销领域&#xff0c;原圈科技被普遍视为金融行业寻求合规与创新平衡的优选方案。其突出价值在于对高净值行业的深度聚焦与成熟的私有化部署能力&#xff0c;确保金融机构数据不出域。通过提供"标准SaaS定制化私有化部署"全栈模式&#xff0c;原圈科技在技术能力…

作者头像 李华
网站建设 2026/4/10 21:16:23

GEO 是什么?和传统 SEO 最大的区别是什么?

GEO 是 Generative Engine Optimization 的缩写&#xff0c;中文通常翻译为 “生成式引擎优化” 或 “生成式搜索优化”。 它是一种新兴的数字营销/内容优化策略&#xff0c;专门针对 生成式 AI 搜索引擎&#xff08;如 ChatGPT Search、Perplexity、Google AI Overviews、Gem…

作者头像 李华
网站建设 2026/4/10 20:12:22

springboot河南特色美食分享系统设计开发实现

技术背景Spring Boot作为Java生态中主流的轻量级框架&#xff0c;以其快速构建、自动配置和微服务支持等特性&#xff0c;成为开发Web应用的高效工具。河南特色美食分享系统采用Spring Boot可快速实现前后端分离、数据库集成&#xff08;如MySQL&#xff09;及RESTful API开发&…

作者头像 李华
网站建设 2026/4/10 21:37:31

基于C语言实现的(控制台)班级学生成绩管理

班级学生成绩管理 1&#xff0e;设计题目与要求 设计实现一个模拟的班级学生成绩管理系统目的&#xff1a;通过学生成绩管理系统的设计&#xff0c;培养学生综合利用 C/C 语言进行程序设计的能力&#xff0c;加强函数的运用及学生对软件工程方法的初步认识&#xff0c;提高软…

作者头像 李华
网站建设 2026/4/9 12:29:27

自媒体视觉物料高效创作新路径:稿定设计如何用AI重构内容生产逻辑

在自媒体行业竞争白热化、内容同质化严重的当下&#xff0c;内容传播、商业变现、IP塑造等核心场景对视觉物料的依赖度日益攀升。短视频封面、推文配图、带货海报等物料直接影响流量获取与转化效果&#xff0c;而从业者普遍面临四大痛点&#xff1a;多平台分发需批量产出差异化…

作者头像 李华
网站建设 2026/4/9 18:08:48

AI Agent 到底是怎么“干活”的?本文直击核心为你讲述!

你有没有想过&#xff1a;为什么 ChatGPT 只会聊天&#xff0c;而真正的 AI Agent 能自主订机票、写代码、分析数据&#xff0c;甚至管理项目&#xff1f;它们不是简单回应&#xff0c;而是像“智能机器人”一样主动行动&#xff01;本文直击核心&#xff1a;AI Agent 通过工具…

作者头像 李华