LoadRunner参数化是使用数据源的值替换脚本中的常量,让每个虚拟用户使用不同数据,从而更真实地模拟并发操作。作用是减小脚本体积,更是防止缓存和服务器优化(如查询结果缓存)导致测试结果失真。
基础参数配置
参数化配置是理解三种设置方式的组合效果,这直接决定了数据怎样被虚拟用户(Vuser)使用。
Select next row(选择下一行数据的方式):
Sequential (顺序):按行顺序取数据。数据用尽后,默认从第一行重新开始。
Random (随机):每次从数据表中随机选取一行。
Unique (唯一):保证每个Vuser或每次迭代取到全局唯一的值。必须配合“Allocate X values for each Vuser”为每个Vuser预分配数据块,否则数据耗尽会报错。
Update value on(何时更新参数值):
Each iteration (每次迭代):每次脚本迭代更新一次值。这是模拟用户连续操作不同数据的标准方式。
Each occurrence (每次出现):参数每次在脚本中出现时都更新。适用于一次迭代内多次使用不同值的情况。
Once (一次):在整个情形运行中,每个Vuser只取一次值。适用于模拟用户登录后身份不变。
参数类型:(数据来源) File (文件) 最常用。数据存放在.dat或.csv文件中,适用于大量、可变的测试数据。
Table / SQL:直接从数据库实时读取,保证数据状态最新。适用于测试依赖实时库存或状态的交易流程。
Unique Number (唯一数):LoadRunner自动生成唯一的数字序列,常用于生成不重复的订单号、ID。
Random Number (随机数):在指定范围内生成随机数,适用于浏览随机商品、随机页码等。
Date/Time (日期/时间):用当前日期/时间替换参数,需注意格式一致。
这三者组合使用效果复杂,但非常重要。如:
Sequential + Each iteration:所有Vuser在同一次迭代中取相同的值,下一次迭代集体取下一个值。
Unique + Each iteration:每个Vuser在每次迭代中都会取到一个全新的、唯一的值,是模拟完全独立用户行为的常用组合。
Random + Once:每个Vuser在开始时随机取一个值,并在整个运行中保持不变。
高级参数化和业务分布模拟
要模拟真实业务,需超过基础配置,进行高级设计。
高级参数化技巧
数据依赖和组合:将复合数据拆分参数化再组合。如,将“姓名”拆分为{LastName}和{FirstName}两个参数文件,在脚本中使用 lr_save_string(lr_eval_string("{LastName}_{FirstName}"), "FullName") 生成完整姓名。
参数处理函数:在脚本中使用C语言思路处理参数。如,用lr_save_datetime生成特定格式的日期字符串,并保存为新参数供后续使用。
模拟真实业务分布
数据来源真实化:尽可能从生产环境脱敏导出数据,或按业务规则生成。如,用户名应有合理的前后缀,地址需符合真实格式。
模拟长尾分布:对于搜索词、商品浏览等行为,数据设计应模拟现实:少数热门数据被高频访问,大量冷门数据低频出现。这需要预先准备好具有不同权重或访问概率的数据集。
动态数据关联:这是模拟有状态业务流程(如登录-下单)的重点。必须使用关联技术捕获服务器返回的动态值(如Session ID、订单号、CSRF令牌),并将其作为参数提交给后续请求。
识别动态值:对比两次录制同一流程的脚本,差别点一般就是需要关联的值。
使用注册型函数:在发起请求前,使用如web_reg_save_param_ex函数注册,从接下来的服务器响应中捕获数据。
定位边界:关联函数中的左右边界(LB/RB)必须能唯一、稳定地标识出动态值。
实战指南从数据准备到脚本调试
数据准备和参数创建
识别参数化点:系统化扫描脚本,识别必须参数化的数据,如用户身份标识、查询输入、交易数据、动态表单字段等。
准备数据文件:为File类型参数准备.dat或.csv文件,第一行建议定义列名。数据量必须充足,需满足:(虚拟用户数 × 迭代次数) + 安全余量。
创建参数:在脚本中选中常量值,右键选择 “Replace with a Parameter” 或通过菜单 “Insert” -> “New Parameter” 创建。
配置和调试
打开参数列表:按 Ctrl+L 或点击菜单 “Vuser” -> “Parameter List”,在此集中管理所有参数。
设置参数属性:在参数列表中,为每个参数选择正确的类型、文件、数据列以及上述的 “Select next row” 和 “Update value on” 方法。
调试步骤:在 Run-time Settings 中,开启 Extended log 并勾选 “Parameter substitution”。回放脚本,在输出日志中检查参数是不是被正确替换,这是证实参数化是不是生效的最直接方法。
在场景中运行
将脚本放入Controller中创建情形后,参数的分配思路(尤其是Unique方式)会和情形调度设置(如迭代次数、运行时长)共同作用。必须在场景设计时统筹考虑。
参数化是LoadRunner模拟真实负载的基础,而模拟真实业务分布的重点,是对业务思路的深度理解,并转化为精心的数据设计和准确的参数配置组合。