当前位置: 首页 > 测试知识 > LoadRunner脚本参数化和关联技术
LoadRunner脚本参数化和关联技术
2026-01-14 作者cwb 浏览次数10

LoadRunner脚本的参数化和关联创建高保真、可复用性能测试脚本,解决了脚本从记录单一操作到仿真多样并发。


参数化模拟真实用户

参数化的本质是用变量替换脚本中的硬编码数据,使每个虚拟用户或每次迭代使用不同数据,避免缓存和服务器优化带来的失真。


1. 参数化数据识别和设计方法

识别数据点:系统化地扫描脚本,识别必须参数化的数据:

身份标识:用户名、用户ID、会话标识。

搜索和查询输入:产品名称、重点词、日期范围、挑选条件。

交易数据:账号、订单号、金额、收货地址。

动态表单字段:隐藏域、时间戳、防重放令牌。


数据文件设计和生成:

来源真实:数据应尽可能从生产环境脱敏导出,或使用脚本按业务规则生成。如,用户名应有前缀后缀,地址应符合真实格式。

数据量分布:数据行数需满足 (虚拟用户数 × 迭代次数) + 安全余量。对于搜索词等数据,应模拟“长尾分布”-少数热门词汇被高频访问,大量冷门词汇低频出现。

文件格式:优先使用.dat或.csv文件。在文件第一行定义列名,如:{username}, {password}, {productId}。


2. 参数配置方法

在Parameter List中,每个参数的配置都是模拟的重点:


参数类型选择:

File:最常用,用于大多数需要大量、可变数据的情形。

Table / SQL:直接从数据库实时读取数据,保证数据状态最新,常用于测试依赖实时库存或状态的流程。

Unique Number:生成唯一的数字序列,常用于生成不重复的订单号或ID。

Random:在一定范围内随机取值,适用于如浏览随机页码等情形。


数据更新和分配方式:

这两个设置的组合决定了数据怎样在虚拟用户和迭代间分配。


更新:

Each iteration:每次迭代更新参数值。这是模拟用户连续操作不同数据的标准方式。

Each occurrence:参数每次被使用时都更新。适用于一个迭代中多次使用不同值的情形。

Once:在整个运行期间,每个虚拟用户只取一次值。适用于模拟用户登录后身份不变。


分配方式:

Sequential:顺序读取。适用于需要保证数据唯一且简单的情况。

Random:随机读取。模拟真实用户的不确定性。

Unique:保证每个虚拟用户或每次迭代取到的值是全局唯一的。这是避免数据冲突的设置。必须和“Allocate X values for each Vuser”配合,预先为每个用户分配一个独立的数据块。


3. 高级参数化

数据依赖和组合:使用多个参数文件,并通过{Param1}_{Param2}的方式进行组合。如,姓和名分开参数化,再组合成完整姓名。

参数处理:在脚本中使用C语言思路对参数进行处理。如,使用 lr_save_string 函数将格式化后的日期字符串保存为新参数。

关联技术处理动态服务器响应

关联用于捕获服务器响应中的动态值,并将其作为参数提交给后续请求。


1. 动态值识别和捕获方法

识别需关联的动态值:

会话标识:JSESSIONID, ASPSESSIONID, VIEWSTATE, __RequestVerificationToken。

安全令牌:csrfToken, access_token, nonce。

服务器生成ID:订单号、流程实例ID、证实码。

方法:对比两次录制同一业务流程的脚本(使用不同数据),所有差别点一般就是需要关联的动态值。


选择关联函数:

注册型函数(推荐):如 web_reg_save_param_ex。此类函数在下一个动作函数(如web_url)执行之前,预先注册一个“钩子”,从接下来的服务器响应中捕获数据。这是LoadRunner关联的标准做法。


脚本示例:


c

// 在请求前注册,准备从响应中捕获

web_reg_save_param_ex(

    "ParamName=CorrelationParam",

    "LB=name=\"csrf_token\" value=\"", // 左边界:要捕获文本的左邻字符串

    "RB=\"",                          // 右边界:要捕获文本的右邻字符串

    "Search=Body",

    "IgnoreRedirections=Yes",

    LAST);


// 执行请求,响应中的csrf_token会被自动捕获到 `CorrelationParam` 参数中

web_submit_form("submit.php", ...);


// 在后续请求中使用捕获到的参数值

web_submit_data("process.php",

    ITEMDATA,

    "Name=csrf_token", "Value={CorrelationParam}", ENDITEM,

    ...);


2. 关联函数配置

边界定位:

LB 和 RB 必须唯一、稳定地标识出动态值。一般选择其左侧和右侧的固定字符串。

对于JSON响应,边界可能是 "orderId":" 和 "。

使用 ORD 属性处理同一响应中出现多次的相同边界,如 "ORD=All" 捕获所有一致项到数组中。

搜索范围:Search 属性可指定在 Headers、Body、NoResource(仅主资源)或 All 中搜索。

数组:当需要捕获一组动态值(如查询结果列表的所有ID)时,使用数组参数。通过 {ParamName_1}、{ParamName_2}... 访问。


3. 调试

日志:在运行时设置中开启 Extended log 并勾选 Parameter substitution。回放脚本,在日志中确定参数是不是被正确捕获和替换。

自动关联扫描:录制后使用 Scan for Correlation 功能,但不能完全依赖它。结果还需人工逐一核对,自动关联可能遗漏或误关联。

关联标准:当脚本回放失败,查看失败请求的响应。如果其中包含一个本应在上一步响应中出现的动态值,则几乎可以肯定关联遗漏或失败。


文章标签: 软件测试 测试工具
咨询软件测试