在性能测试过程中,LoadRunner作为一款强大的自动化测试工具,能有效模拟大量虚拟用户并还原真实业务流程。然而,测试人员在编写脚本时常会遇到一个挑战:动态参数的变化。无论是SessionID、Token、验证码还是其他随时间或行为变化的字段,如果不正确处理这些动态值,脚本执行就会失败。
为了应对这个问题,我们需要掌握LoadRunner关联(Correlation)技术,尤其是如何提取动态参数,以及如何通过正则表达式进行灵活匹配。本文将从实战角度出发,详细讲解“LoadRunner关联如何提取动态参数”和“LoadRunner关联正则表达式设置”,助你彻底攻克动态数据难题。
一、LoadRunner关联如何提取动态参数
所谓“关联”,就是将响应中动态变化的值提取出来,并在后续请求中进行替换,使脚本逻辑保持连贯、真实。

1.为什么需要关联
比如一个登录流程中,登录请求需要附带一个“Token”,而这个Token是由前一个页面动态生成的。如果你录制的脚本中Token是写死的,那重放时就会因为Token过期或不匹配而报错。
这时候,你就需要将Token从上一个响应中提取出来,再关联到登录请求中。
2.如何设置关联
LoadRunner主要通过web_reg_save_param函数来实现参数提取:

这个函数的意思是:在响应中查找以token="开头、以"结尾的内容,并将中间的部分保存到参数Token中。后续你可以用{Token}来引用这个值。
3.操作步骤(以Web为例)
Step1:找出需提取的参数
在脚本中定位失败的请求,查看其前一个请求的响应,使用TreeView→Responsebody查找包含动态值的字段。
Step2:设置关联函数
在动态参数出现前的请求前添加web_reg_save_param代码。建议在TreeView中右键添加,也可以手动编写。
Step3:替换目标值
将后续请求中原来的硬编码值改为{参数名}的形式,如{Token}。
Step4:验证
运行脚本,开启ExtendedLog+Parametersubstitution,查看是否成功提取和替换参数。
4.多值提取(数组参数)
如果一个参数在响应中出现多次,可以添加如下选项:

这样会把所有匹配结果存入一个数组中,后续可用{Param_1}、{Param_2}来引用。
二、LoadRunner关联正则表达式设置
除了用左右边界(LB/RB)方式提取动态值,LoadRunner也支持正则表达式方式来提取更复杂的模式数据,特别适用于HTML结构复杂或字段格式不稳定的场景。
1.正则关联语法简介
从LoadRunner12.50起,引入了web_reg_save_param_regexp函数,它的语法如下:

说明:
ParamName=Token:设置提取结果变量名为Token;
RegExp=token":"([^"]+)":正则表达式,用小括号提取目标值;
Ordinal=1:表示第一个匹配值(支持ALL提取所有);
比如你要从下面这段JSON中提取token:

使用正则提取的语句将如下所示:

运行后即可用{Token}来引用这个值。
2.多组提取
支持一次提取多个字段。例如提取多个JSON字段,可以写多个web_reg_save_param_regexp:

或者利用正则中的多分组匹配:
不过这种方式提取的参数会自动命名为ParamName_1、ParamName_2。
3.正则调试技巧
建议使用在线调试器如regex101、RegExr来预览你的正则匹配效果;
用"SaveOffset=xxx"可以提取偏移后的字段;
配合日志设置"Extendedlog+Datareturnedbyserver"检查响应体格式。
4.实用案例(复杂HTML结构)
比如以下HTML内容:

使用正则表达式提取csrf_token:

三、关联提取失败的常见问题及对策
问题一:未匹配到值
检查提取函数是否放在正确位置(必须放在目标请求前);
检查响应是否真的包含目标数据;
检查正则或LB/RB是否写错或存在空格等字符未处理。
问题二:值为空或为null
多个字段重复,默认提取第一个可能为空,尝试设置"Ordinal=ALL";
HTML被压缩或混淆,勾选“Enableweb_decompression”。
问题三:正则匹配不到数据
有可能是响应返回为压缩格式,可开启"SetHeadersAccept-Encoding=gzip",或者设置:

或者启用"Convertresponsetotext"处理二进制响应内容。

总结
通过上述详尽的讲解,相信你对“LoadRunner关联如何提取动态参数”与“LoadRunner关联正则表达式设置”已经有了清晰的认识。从基本的左右边界提取,到高级的正则表达式使用,再到各种调试技巧与问题排查,LoadRunner的关联功能不但强大,而且灵活。
一个好的性能测试脚本,关键在于参数的提取是否稳定、准确。只有实现高质量的关联,才能确保脚本在各种动态业务场景中稳定运行,也为后续的大规模性能测试奠定基础。