LoadRunner之VuGen参数化
程序员文章站
2022-05-27 09:09:55
...
一、什么是参数化
概念:根据需求动态的获取数据的过程
二、为什么要参数化?
1. 减少重复代码
2. 数据代码进行分离,方便维护
需求1
说明:由于虚拟机运行速度原因,我们使用lr_output_message()函数练习学习使用参数化
要求:
1. 输出 我要去北京;我要去上海;我要去广州;我要去深圳;
三、参数化操作
3.1 打开参数化菜单
选中要参数化的文本->鼠标右键->Replace with a Parameter
或者
菜单【Insert】>【New Parameter...】
3.2 Replace with a Parameter 打开的窗口
1. Parameter name:参数化引用名称(参数化时使用)
2. Parameter type:File 【推荐-File】
3. Properties:属性-点击此按钮,可直接设置参数化引用名称对应的值;【点击】
提示:
1). 点击OK;参数化引用名称具体的值,需要再次设置;
3.3 Properties 设置面板
1. Parameter type: 参数类型 File 【重点】
2. File:参数保存的文件类型及位置,一般为txt;【推荐】
3. Add Row:添加行,在当前表格编辑数据;【可选】
4. Edit with Notepad:在记事本内编辑数据;【推荐】
5. Select next row:运行或迭代时对行的选择方式
1).
6. Update value on:运行或迭代时对值的选取方式
提示:
1). Select next row与Update value on为组合关系,不同组合效果不同,我们单独来学习
需求1 解决方案
1. 创建指定路径及txt文本格式 如:C:\lr11\scripts\city.txt
2. 使用Edit with Notepad 编辑数据:北京、上海、广州、深圳
3. 编写脚本
4. 迭代次数 4
问题:如何把设置好的参数读取打印出来?
为了更好学习使用参数化,我们必须先了解个函数
函数:lr_eval_string()
为什么要了解lr_eval_string()函数?
1. lr_output_message(“str”):函数为把str字符串输出到日志,它自身并不能解析读取参数。
2. 为了日志记录详细我们必须学习个能读取参数,在通过lr_output_message()函数来输出到日志
函数 lr_eval_string()
功能:读取变量的值,并以Char类型返回
示例:
lr_eval_string("{parameter}")
提示:
1). 参数名称使用花括号{}包括
2). 参数使用双引号包括
需求1 代码示例
1. 代码:
Action()
{
lr_output_message("我要去%s",lr_eval_string("{NewParam}"));
return 0;
}
3.4 Select next row与Update value on
Select next row(选择下一行)
说明:读取参数文件行的方式
方式:
1. Sequential:顺序,按照行的顺序读取数据,如果迭代次数大于行数,再次从第一行开始读取
2. Random:随机,随机读取行
3. Unique:唯一,每次读取唯一行,不重复;如果行数读完,立即停止迭代;
Update value on(更新值的时间)
说明:参数值更新的方式
方式:
1. Each iteration:每次迭代以后更新
2. Each occurrence:每次出现参数时更新
3. Once:每出现一个虚拟用户(线程)更新一次
组合
1. 行顺序+每次迭代更新值 Sequential + Each iteration
2. 行顺序+每次参数出现更新值 Sequential + Each occurrence
3. 行顺序+更新一次(单用户) Sequential + Once
说明:
1. 组合我们在这里就不穷举了,以行的顺序配合值的3中更新方式做演示
2. 因为组合内含occurrence,所以必须要两个Action,我们新增两个(Action、Action2)两个代码相同
代码
Action()
{
lr_output_message("我要去%s",lr_eval_string("{NewParam}"));
return 0;
}
Action2()
{
lr_output_message("我要去%s",lr_eval_string("{NewParam}"));
return 0;
}
Sequential + Each iteration
说明:行为顺序,值为迭代更新一次;
预期:
1. 第一次迭代:Action:北京;Action2:北京
2. 第二次迭代:Action:上海;Action2:上海
3. 第三次迭代:Action:广州;Action2:广州
4. 第四次迭代:Action:深圳;Action2:深圳
Sequential + Each occurrence
说明:行为顺序,值为出现一次更新一次
预期:
1. 第一次迭代:Action:北京;Action2:上海
2. 第二次迭代:Action:广州;Action2:深圳
3. 第三次迭代:Action:北京;Action2:上海
4. 第四次迭代:Action:广州;Action2:深圳
Sequential + Once
说明:行为顺序,值为单用户只更新一次
预期:
1. 第一次迭代:Action:北京;Action2:北京
2. 第二次迭代:Action:北京;Action2:北京
3. 第三次迭代:Action:北京;Action2:北京
4. 第四次迭代:Action:北京;Action2:北京
选择下一行中的Same line as xxx的使用方式:
(1)创建username1,添加数据
(2)创建password1,文件路径为username1的路径,添加密码数据,关联username1列
username1中的数据得到更新
代码:
Action()
{
//参数化
//lr_output_message("%s",lr_eval_string("{city}加油"));
// 两列关联使用
lr_output_message("用户名为:%s",lr_eval_string("{username1}"));
lr_output_message("密码为:%s",lr_eval_string("{password1}"));
return 0;
}
运行为:
Action.c(7): 用户名为:dpl
Action.c(8): 密码为:12132
Action.c(7): 用户名为:ddd
Action.c(8): 密码为:12313
Action.c(7): 用户名为:jojo
Action.c(8): 密码为:41244
Vuser Terminated.
扩展 批量获取参数时,如果保证参数不重复?
思路:添加时间戳
说明:web_save_timestamp_param("time_stamp",LAST) 为时间戳函数,返回:1970到现在的毫秒数;
(time_stamp:参数为获取值后保存的参数名称,被引用时使用)
代码
Action()
{
//参数化
//lr_output_message("%s",lr_eval_string("{city}加油"));
// 两列关联使用
lr_output_message("用户名为:%s",lr_eval_string("{username1}"));
lr_output_message("密码为:%s",lr_eval_string("{password1}"));
//添加时间戳
web_save_timestamp_param("time_stamp",LAST);
lr_output_message("时间为:%s",lr_eval_string("{time_stamp}"));
return 0;
}
运行结果为:
Action.c(7): 用户名为:dpl
Action.c(8): 密码为:12132
Action.c(11): 时间为:1580013750556
Action.c(7): 用户名为:ddd
Action.c(8): 密码为:12313
Action.c(11): 时间为:1580013750651
Action.c(7): 用户名为:jojo
Action.c(8): 密码为:41244
Action.c(11): 时间为:1580013750702
Vuser Terminated.
上一篇: LoadRunner之VuGen的使用
下一篇: LoadRunner之VuGen集合点