VuGen-参数化
目标
- 理解参数化的使用场景
- 掌握参数化的使用方式
一、什么是参数化
根据需求动态的获取数据的过程
二、为什么要参数化?
- 减少重复代码
- 数据代码进行分离,方便维护
需求1
说明:由于虚拟机运行速度原因,我们使用 lr_output_message() 函数,来学习如何使用参数化
要求:输出 我要去北京;我要去上海;我要去广州;我要去深圳;
三、参数化操作
3.1 打开参数化菜单
选中要参数化的文本 -> 鼠标右键 -> Replace with a Parameter
或者
菜单 Insert -> New Parameter...
3.2 Replace with a Parameter 打开的窗口
1. Parameter name:参数化引用名称(参数化时使用)
2. Parameter type: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:运行或迭代时对行的选择方式
6. Update value on:运行或迭代时对值的选取方式
提示:
1). 其中5.Select next row 与 6.Update value on为组合关系,不同组合效果不同,我们单独来学习
需求1 解决方案
- 创建指定路径及txt文本格式 如:C:\lr11\scripts\city.txt
- 使用 Edit with Notepad 编辑数据:北京、上海、广州、深圳
- 编写脚本
- 迭代次数 4
问题
lr_output_message(“str”):函数为把str字符串输出到日志,但它自身并不能解析读取参数;
函数(设置参数、读取参数)
- lr_save_string()
- lr_eval_string()
1. lr_save_string()
把字符串保存到指定的参数中
格式:lr_save_string("字符串","参数名")
示例:lr_save_string("北京","city");
2. lr_eval_string()
读取变量的值,并以Char类型返回;
格式:lr_eval_string("{参数名}");
示例:lr_eval_string("{city}");
提示:
1). 参数名称使用花括号{}包括
2). 参数使用双引号包括
需求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:唯一,每次读取唯一行,不重复;
4. Same line as xxx 取参数同行(需要两个以上参数,才能显示和使用)
注意:
使用 Unique 选项时会激活 When out of values:
1) Abort Vuser:中止虚拟用户
2) Continue in a cyclic manner:以循环的方式继续
3) Continue with last value:继续使用最后一个值
Update value on
参数值更新的方式
方式:
1. Each iteration:每次迭代以后更新
2. Each occurrence:每次出现参数时更新
3. Once:每出现一个虚拟用户(线程)更新一次
组合
- 行顺序 + 每次迭代更新值 Sequential + Each iteration
- 行顺序 + 每次参数出现更新值 Sequential + Each occurrence
- 行顺序 + 更新一次(单用户) Sequential + Once
说明:
1. 组合我们在这里就不穷举了,以行的顺序配合值的3种更新方式做演示
2. 因为组合内含occurrence,所以必须要两个Action,我们新增两个(Action1、Action2)两个代码相同
代码
Action1()
{
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. 第一次迭代:Action1:北京;Action2:北京
2. 第二次迭代:Action1:上海;Action2:上海
3. 第三次迭代:Action1:广州;Action2:广州
4. 第四次迭代:Action1:深圳;Action2:深圳
Sequential + Each occurrence
行为顺序,值为出现一次更新一次
预期:
1. 第一次迭代:Action1:北京;Action2:上海
2. 第二次迭代:Action1:广州;Action2:深圳
3. 第三次迭代:Action1:北京;Action2:上海
4. 第四次迭代:Action1:广州;Action2:深圳
Sequential + Once
行为顺序,值为单用户只更新一次
预期:
1. 第一次迭代:Action1:北京;Action2:北京
2. 第二次迭代:Action1:北京;Action2:北京
3. 第三次迭代:Action1:北京;Action2:北京
4. 第四次迭代:Action1:北京;Action2:北京
批量获取参数时,如果保证参数不重复?(扩展)
思路:添加时间戳
说明:web_save_timestamp_param("time_stamp",LAST) 为时间戳函数,返回:1970到现在的毫秒数;
(time_stamp:参数为获取值后保存的参数名称,被引用时使用)
示例:
Action()
{
web_save_timestamp_param("time_stamp",LAST);
lr_output_message("我要去%s",lr_eval_string("{NewParam}_{time_stamp}"));
return 0;
}
其他常用参数类型(了解)
parameter type:
1. Date/Time
2. Random Number