测试步骤之脚本优化(Script)
看到这里,是不是疑惑录制好的脚本还需要优化吗,答案是肯定的。
优化概要
脚本优化包括插入注释(Comment),插入事务(Transaction),插入检查点(Check),插入集合点(Rendezvous),脚本参数化(Parameter),关联技术(Correlation)等等。
打开VuGen,相关设置如下
进入到脚本页(顶部的Script按钮),就能看到录制到action部分的脚本了,如下图所示
上面是我录制优化的登陆模块脚本,学过编程语言就大概能知道,LR脚本里都是些函数组成的,lr_output_message(日志中打印输出,类似C中printf函数),web_custom_request(请求函数,就是模拟用户点击按钮操作,点击一次就提交一次这种请求),web_reg_save_param_ex(注册函数,通俗点就是在服务器返回数据中查找并保存特定的数据)等。
不管怎样,录制成功后,首先得回放脚本一下,看看有没有问题,没问题就根据需求,真实环境进行脚本优化。
插入注释(Comment)
插入注释为了使脚本方便易懂,很简单,单行在前面加上//即可,多行注释用/* ....(此处是脚本).....*/。
插入事务(Transaction)
插入事务也很快,就是判断一段操作的时间,记住事务插入在集合点之后并且是成对出现的,如lr_start_transaction("登录")和lr_end_transaction("登录",LR_AUTO),事物名要相同,一般情况下结束事物的LR_AUTO为自动判断事物是否成功,没遇到报错的页面基本都是成功的,所以需要通过检查点加以判断。
插入集合点(Rendezvous)
插入集合点(lr_rendezvous),一般做并发测试是需要集合点的,如做并发登陆,插入后可在场景设计中设置,当设置的虚拟用户数全部运行至集合点后,再同时运行,脚本如下图:
插入检查点(Check)
上面说过事物需要检查点来加以判断,拿登录来说,一般登录成功就会在首页显示“欢迎你,XX用户”,是不是找到"欢迎你"三个字就说明登录成功了呢,于是检查点就这么来了。自动添加我就不说了,手动插入如下:
web_reg_find(
"Text=\"respCode\": \"0\"",
"SaveCount=Ok_Count",
LAST);
web_custom_request(
………… //内容省略
LAST);
lr_output_message(lr_eval_string ("Ok_count查找respCode值并计数"));
if(atoi(lr_eval_string("{Ok_Count}"))>0)
lr_output_message("-----------------------------成功登录!-----------------------------",LR_PASS);
else
lr_output_message("-----------------------------登录失败!------------------------------",LR_FAIL);
检查点常用函数:web_reg_find,从服务器返回的数据查找,Text是查找的内容,SaveCount是计数变量名,此处判断SaveCount的值是否大于0,大于0就表示找到了返回值,执行LR_PASS,事物成功,即表示登录成功。
注:lr_eval_string("{Ok_Count}")获取返回参数Ok_Count的值,类型为char,atoi(lr_eval_string("{Ok_Count}"))把字符型转换成整型。
手动关联(Correlation)
在回放脚本总是不成功,查找原因,是登录验证码的问题,这个是服务器返回过来的,错了就不能登录了。不能自己输,开发又不能屏蔽,该怎么处理呢?对于服务器返回的动态数据,进行查找并保存在一个参数中,就叫关联技术。同样的自动关联就不说了,手动关联如下:
web_reg_save_param_ex(
"ParamName=CSRule_1",
"LB=\"code\":",
"RB=}}}",
"Ordinal=1",
"SaveOffset=1",
"SaveLen=6",
SEARCH_FILTERS,
LAST);
查看响应日志如下:"mobileRespHeader": {"respCode": "2000","respDesc": "鎴愬姛"},"mobileRespBody": {"data": {"code":"MKLJ39"}}}
查找的结果为CSRule_1= MKLJ39,后面就用CSRule_1代替验证码了。
常用关联函数:web_reg_save_param_ex,CSRule_1就是自定义的参数名,LB,RB为左边界和右边界,用于定位查找的那个数据,Ordinal指第几次内容出现的位置,SaveOffset指从找到的字符串中第几个开始截取,SaveLen指取多少长度的值,其他就算固定的格式了,注意!!!冒号 ” 前需要加反斜杠“\”
脚本参数化(Parameter)
此处是对登录账号进行的参数化,直接在账号处点右键—Replace with a parameter 输入名称即可,类型可以参照资料,一般是File。
参数化的数据可以手动输入,也可以导入dat文件,还可以从数据库导入。
对账号参数化后,点击右键—Parameter Properties… 进入参数化设置界面,具体参数参考资料,要注意图中标注的取值顺序和策略设置,组合起来共有9种方式。
只要记住Select next row行是针对场景运行的虚拟用户设置的,VuGen回放不起作用,选择Sequential,每个用户都从第一行参数开始顺序去;Update Value on行是针对脚本的参数设置的,选择Each iteration,单个用户的参数在同一次迭代中取值是相同的,不管你有相同的几个参数。
以上就是脚本优化的大概流程,写的不算仔细,可供参考,最后保存前不要忘记再回放一下脚本哦!