录制脚本中更多操作:
检查点、关联、参数化输入、函数
1.文本检查、插入检查点:
在进行压力测试时,为了检查Web 服务器返回的网页是否正确,VuGen 允许我们插入Text 检查点,这些检查点验证网页上是否存在指定的Text,还可以测试在比较大的压力测试环境中,被测的网站功能是否保持正确。检查点的含义和unittest中的断言功能基本上一致。
通过菜单—查看—快照,可以查看到http数据视图,选择检查的文本,选择添加文本检查步骤,即可添加一个检查点。
- step1:在快照中找到需要检查的文字
- step2:插入检查点
- step3:生成检查点
web_reg_find("Search=Body",
"Text=Welcome, <b>zxy</b>, to the Web Tours reservation pages.",
LAST);
- step4:编译Compile,并重演Replay查看是否成功。
若编译失败,说明在登录成功前进行检查,需添加参数,先等待登陆成功,后进行检查。“SaveCount=reservation_Count” 类似等待。
web_reg_find("Search=Body",
"Text=Welcome, <b>zxy</b>, to the Web Tours reservation pages.",
"SaveCount=reservation_Count",
LAST);
2.关联:
参数化时需要关联。很多时候,一个项目的请求所以带的参数会来源于前面请求返回的结果,而我们录制的内容,则只是完整地记录当时的请求参数,这通常不是我们想要的。
例检查点文本中的zxy。就是根据输出来显示的,我们可以获取该值来供后续使用。选择test,通过创建关联,可以创建一个关联,创建完毕。
- step1:在快照中找到需要关联的文字
- step2:创建关联
/*Correlation comment - Do not change! Original value='zxy'
Name ='CorrelationParameter' Type ='Manual'*/
web_reg_save_param_ex(
"ParamName=CorrelationParameter",
"LB=blockquote>Welcome, <b>",
"RB=<",
SEARCH_FILTERS,
"Scope=Body",
"RequestUrl=*/login.pl*",
LAST);
3.参数化输入
需要先进行关联。如果用户在录制脚本过程中,填写提交了一些数据,如要增加数据库录。这些操作都被记录到了脚本中。当多个虚拟用户运行脚本时,都会提交相同的记录,这样不符合实际的运行情况,而且有可能引起冲突。为更真实的模拟实际环境,需要各种各样输入。参数化输入是不错的方法。
用参数表示用户的脚本有两个优点:
① 可以使脚本的长度变短。
② 可以使用不同的数值来测试你的脚本。
例如,如果你企图搜索不同名称的图书,你仅仅需要写提交函数一次。
在回放的过程中,你可以使用不同的参数值,而不只搜索一个特定名称的值。
参数化包含以下两项任务:
① 在脚本中用参数取代常量值。
② 设置参数的属性以及数据源。
参数化仅可以用于一个函数中的参量。你不能用参数表示非函数参数的字符串。
例如在上面的注册的例子中,我们已经注册了test用户,那么再次注册就会失败。也就是说Loadrunner脚本再次运行就会失败。找到以下的代码块,在username中选中“zxy”字符串点击右键选择“使用参数替换”,就可以进行参数设置。
-
step1:选择需要参数化的输入值
-
step2:填写参数化输入名,确定使用参数替换。允许替换所有zxy为参数化输入名。
参数化输入结果如下:
-
step3:添加参数
两种添加方式如下,勾选Select next row、Upadate value on。
-
step4:编译Compile,并重演Replay查看是否成功。
若编译失败,需添加参数。“NotFound=warning” 。
/*Correlation comment - Do not change! Original value='{username}'
Name ='CorrelationParameter' Type ='Manual'*/
web_reg_save_param_ex(
"ParamName=CorrelationParameter",
"LB=blockquote>Welcome, <b>",
"RB=<",
SEARCH_FILTERS,
"Scope=Body",
"RequestUrl=*/login.pl*",
"NotFound=warning" ,
LAST);
- step5:output中,若只一个参数运行一次,需修改设置。
参数列表zxy,test1,test2。
另外,参数化设置中两个选项:
Select next row(Sequential、Random、Unique),
Update value on(Each iteration、Each occurrence、Once)。
Each iteration:按照参数顺序依次取,zxy,test1,test2。
Each occurrence:每次随机选取参数,test1,zxy,test2
Once:每次只取第一个参数,zxy。
4.插入函数
VuGen 中可以使用C 语言中比较标准的函数和数据类型,语法和C 语言相同。下面简单介绍一下比较常用的函数和数据类型。
在脚本页面,通过右键-插入-新建步骤可以查看函数列表
运行时输出参数名zxy,test1,test2。
if( strcmp( lr_eval_string ("{username}"),"zxy" ) ==0 ){
lr_log_message("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
lr_output_message("username=%s",lr_eval_string("{username}"));
lr_log_message("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
}else{
lr_log_message("this user is not zxy!!!!!!!!!!");
}
字符串函数,由于在 VuGen 脚本中使用最多的还是字符串,所以字符串函数在脚本中使用非常频繁。具体的语法请参考帮助说明。
strcmp 比较两个字符串
strcat 连接两个字符串
strcpy 拷贝字符串
输出函数,输出函数在调试脚本时非常有用。
lr_output_message ( );
lr_log_message( );
控制脚本流程
if { } else { }
⭐LoadRunner 提供的标准函数
lr_eval_string
该函数功能是得到参数(参数化输入中)当前的值
exg: lr_output_message("temp = %s", lr_eval_string("{WCSParam2}"));
lr_save_string
该函数功能是把一个字符串保存到参数中
exg: lr_save_string("439","WCSParam3");
web_reg_save_param("BODY",
"LB=\"MESSAGE\":{\"",
"RB=\":",
LAST);
- 控制脚本流程
if { } else { } for{ } while{ }
if(strcmp(lr_eval_string("{BODY}"),"msginfo")==0)
{
lr_end_transaction("柜员登陆",LR_PASS);
}
else
{
lr_output_message("BODY=[%s]",lr_eval_string("{BODY}"));
lr_end_transaction("柜员登陆",LR_FAIL);
}
📄最终Action.c
Action()
{
web_url("WebTours",
"URL=http://127.0.0.1:1080/WebTours",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTML",
LAST);
lr_think_time(5);
lr_start_transaction("login_transaction");
lr_rendezvous("login_zvous");
web_reg_find(
"Search=Body",
"Text=Welcome, <b>{username}</b>, to the Web Tours reservation pages.",
"SaveCount=reservation_Count",
LAST);
/*Correlation comment - Do not change! Original value='{username}'
Name ='CorrelationParameter' Type ='Manual'*/
web_reg_save_param_ex(
"ParamName=CorrelationParameter",
"LB=blockquote>Welcome, <b>",
"RB=<",
SEARCH_FILTERS,
"Scope=Body",
"RequestUrl=*/login.pl*",
"NotFound=warning" ,
LAST);
web_submit_form("login.pl",
"Snapshot=t2.inf",
ITEMDATA,
"Name=usern"
"ame", "Value={username}", ENDITEM,
"Name=password", "Value=12"
"3", ENDITEM,
"Name=login.x", "Value=76", ENDITEM,
"Name=login.y", "Value=8", ENDITEM,
LAST);
if( strcmp( lr_eval_string ("{username}"),"zxy" ) ==0 ){
lr_log_message("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
lr_output_message("username=%s",lr_eval_string("{username}"));
lr_log_message("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
}else{
lr_log_message("this user is not zxy!!!!!!!!!!");
}
lr_end_transaction("login_transaction",LR_AUTO);
lr_think_time(5);
web_image("SignOff Button",
"Alt=SignOff Button",
"Snapshot=t3.inf",
LAST);
return 0;
}
运行时设置
当完善了测试脚本后,需要对VuGen 的“运行时设置” 进行配置。在“解决方案资源管理器”视图中选择“运行时设置”,常用的设置内容如下:
1、常规-其他-错误处理:一般不需要改动,但是在Controller运行时,可以设置“出现错误时仍继续”,来统计错误率
2、常规-其他-自动事务:当我们手工设置了事务时,建议取消该项,以免Controller运行时事务太多
3、常规-运行逻辑-迭代数:根据需要变动,一般在调试脚本时可以设置为多次迭代
4、常规-日志:在调试阶段可勾选“启动日志记录”,脚本稳定时可取消该项
5、常规-思考时间:忽略时会对服务器造成更大的压力,而增加思考时间可以更好的模拟用户使用
6、internet协议-首选项-启用图像或文本检查:不勾选“启用图像或文本检查”,web_find和web_image_check设置的检查点在运行时无效
7、工具-选项-脚本-回放:如果勾选“回放期间显示运行时查看器”,则在运行时会启动浏览器
单机运行测试脚本
经过以上的各个步骤后,脚本就可以运行了。运行脚本可以通过菜单或者工具栏来操作。
执行“运行”命令后,VuGen 先编译脚本,检查是否有语法等错误。如果有错误,VuGen将会提示错误。双击错误提示,VuGen 能够定位到出现错误的那一行。为了验证脚本的正确性,我们还可以调试脚本,比如在脚本中加断点等。
如果编译通过,就会开始运行。然后会出现运行结果。