织雀教育灵活运用LR函数编写测试脚本.doc_第1页
织雀教育灵活运用LR函数编写测试脚本.doc_第2页
织雀教育灵活运用LR函数编写测试脚本.doc_第3页
织雀教育灵活运用LR函数编写测试脚本.doc_第4页
织雀教育灵活运用LR函数编写测试脚本.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

灵活运用LR函数编写测试脚本想获取更多测试资料,请访问织雀教育官网。对于一些刚学loadrunner的朋友来说,会经常遇到这样一些问题:(1)对于服务器返回的动态数据,不知道如何使用关联函数进行取值。(2)正确关联动态数据后,不知道如何对关联的数据进行字符串操作。(3)脚本回放不成功,不知道到底是哪里出现了问题,无法去进行有效的脚本调试。至于第一个问题,如果你不懂,建议去网上下载相关的资料读上一百遍。本文将针对后面二个问题,结合笔者以前做过的实际案例,使用两种方法实现一些相对较复杂的动态数据关联,并如何灵活运用LR函数对这些关联后的数据进行随心所欲的操作。1 案例背景银行的内部评级系统,其中有一个页面,如图:开发人员在设计查询条件时,没有唯一识别表格记录的客户编号字段,而且表格中的记录使用一次后,就会自动删除,这样就直接导致代码回放失败。如果换成其他的客户编号,那么它在表格中的位置可能与录制时不同,关联的数据可能错误,并不是该客户对应的数据,代码也会运行失败。但是我通过查看页面源文件,注意到这样一个特点:每个客户编号对应代码中的动态数据(需要关联的数据)都是有规律的出现。有了这个特点,我们可以通过以下步骤实现正确取值:(1)利用关联函数,设置函数属性Ord均为ALL,取出所有满足边界值的数据。(2)利用for循环和if判断语句,找出我们需要的客户编号在页面列表的第几行。(3)利用客户编号与其对应的数据的规律(关联函数中的Ord值规律),找出客户编号对应的关联数据值,如图:关联函数中的Ord值规律对应表格中第几行数据KeHuBianHao_tempTYPE_tempPROCESSINSTID _tempSS_tempChuShenYuan_temp第一行 10 1 2 22 61第二行8*1+103*1+13*1+24*1+2212*1+61第三行8*2+103*2+13*2+24*2+2212*1+61.(4)利用sprinf函数和lr_save_string函数,将找出的关联数据变量转化成LR参数。2 步骤实现的部分代码(建议:文中的代码使用VuGen查看)根据案例背景中分析的步骤,下面我使用两种方法实现。方法一:充分利用函数sprintf、lr_save_string、lr_eval_string进行字符串操作。代码如下:web_reg_save_param(KeHuBianHao_SUM,LB=,RB=客户评级,Snapshot=t9.inf,Mode=HTML,ITEMDATA,Name=VD_WFList_FP/DEPTCODE/criteria/value, Value=, ENDITEM,Name=VD_WFList_FP/FIRCODE/criteria/value, Value=, ENDITEM,Name=VD_WFList_FP/PRESTATE/criteria/value, Value=, ENDITEM,Name=VD_WFList_FP/OPERATORNAME/criteria/value, Value=KHJL, ENDITEM,Name=VD_WFList_FP/OPERATORNAME/criteria/operator, Value=like, ENDITEM,Name=VD_WFList_FP/OPERATORNAME/criteria/likeRule, Value=center, ENDITEM,Name=Submit, Value=查询, ENDITEM,LAST);for( xunhuan = 10;xunhuan atoi(lr_eval_string(KeHuBianHao_SUM _count);)sprintf(buffer, KeHuBianHao_SUM _%d,xunhuan);if ( strcmp( buffer ,lr_eval_string(KeHuBianHao) ) /diedai初始值为0TYPE_SUM_diedai = 3 * diedai + 1; PROCESSINSTID _SUM _diedai = 3 * diedai + 2;SS_SUM _diedai = 4 * diedai + 22;ChuShenYuan_SUM _diedai = 12 * diedai + 61;elselr_error_message(分派员在第%s次循环时无法找到待分派的客户编号:%s, lr_eval_string(Itetation),lr_eval_string(KeHuBianHao);lr_exit(LR_EXIT_ITERATION_AND_CONTINUE,LR_FAIL);diedai += 1;xunhuan += 8;sprintf(TYPE_temp, TYPE_SUM _%d, TYPE_SUM _diedai );lr_save_string(lr_eval_string(TYPE_temp),TYPE_VAL);sprintf(PROCESSINSTID _temp, PROCESSINSTID _SUM _%d, PROCESSINSTID _SUM _diedai); lr_save_string(lr_eval_string(PROCESSINSTID _temp),PROCESSINSTID_Val);sprintf(SS_temp, SS_SUM_%d, SS_SUM_diedai); lr_save_string(lr_eval_string(SS_temp),SS_VAL);sprintf(ChuShenYuan_temp, ChuShenYuan_SUM _%d, ChuShenYuan_SUM _diedai); lr_save_string(lr_eval_string(ChuShenYuan_temp),ChuShenYuan);/*选择初审员,点击分发*/web_submit_data(irs_workflow2.pr.prWF_FP_ToNext.do, Action=49:9085/irs_workflow2.pr.prWF_FP_ToNext.do?PROCESSINFO/OPERATE=-1,Method=POST,TargetFrame=,RecContentType=text/html,Referer=49:9085/irs_workflow2.pr.prWFWorkList.do,Snapshot=t10.inf,Mode=HTML,ITEMDATA,Name=VD_WFList_FP/PRESTATE/criteria/value, Value=, ENDITEM,Name=VD_WFList_FP/FIRCODE/criteria/value, Value=, ENDITEM,Name=VD_WFList_FP/OPERATORNAME/criteria/value, Value=KHJL, ENDITEM,Name=VD_WFList_FP/OPERATORNAME/criteria/operator, Value=like, ENDITEM,Name=VD_WFList_FP/OPERATORNAME/criteria/likeRule, Value=center, ENDITEM,Name=VD_WFList_FP/DEPTCODE/criteria/value, Value=, ENDITEM,Name=VD_WFList_FP/PREVALID, Value=1, ENDITEM,Name=processinfolist/PROCESSINFOtype=TYPE_VAL/PROCESSINSTID, Value=PROCESSINSTID_Val, ENDITEM,Name=processinfolist/PROCESSINFOtype=TYPE_VAL/WORKITEMID, Value=TYPE_VAL, ENDITEM,Name=SS_VAL, Value=0 , ENDITEM,Name=processinfolist/PROCESSINFOtype=TYPE_VAL/OPERATORID, Value= ChuShenYuan , ENDITEM,LAST);从以上代码,我们可以看出:(1)先通过for循环,遍历所有的客户编号关联值,在每次循环时,使用sprintf函数将客户编号(KeHuBianHao_SUM _xunhuan)转化成LR变量buffer。(2)然后使用if判断buffer与正确的客户编号是否相等,找出正确的客户编号需要的迭代次数(daidie)。(3)根据if判断出的daidie值,以及各关联值Ord的规律,确定出各参数的Ord值。(4)再使用sprintf、lr_save_string函数,将各关联变量值转化成LR参数为TYPE_VAL、PROCESSINSTID_Val、SS_VAL、ChuShenYuan。方法二:充分利用函数sprintf、lr_eval_string进行字符串操作。代码如下:for( xunhuan = 10;xunhuan atoi(lr_eval_string(KeHuBianHao_SUM _count);)sprintf(buffer, KeHuBianHao_SUM _%d,xunhuan);if ( strcmp( buffer ,lr_eval_string(KeHuBianHao) ) /diedai初始值为0TYPE_SUM_diedai = 3 * diedai + 1; PROCESSINSTID _SUM _diedai = 3 * diedai + 2;SS_SUM _diedai = 4 * diedai + 22;ChuShenYuan_SUM _diedai = 12 * diedai + 61;elselr_error_message(分派员在第%s次循环时无法找到待分派的客户编号:%s, lr_eval_string(Itetation),lr_eval_string(KeHuBianHao);lr_exit(LR_EXIT_ITERATION_AND_CONTINUE,LR_FAIL);diedai += 1;xunhuan += 8;sprintf(TYPE_temp, TYPE_SUM _%d, TYPE_SUM _diedai ); sprintf(PROCESSINSTID,Name=processinfolist/PROCESSINFOtype=%s/PROCESSINSTID, lr_eval_string(TYPE_temp);sprintf(WORKITEMID,Name=processinfolist/PROCESSINFOtype=%s/WORKITEMID, lr_eval_string(TYPE_temp);sprintf(WORKITEMID_Value, Value=%s, lr_eval_string(TYPE_temp);sprintf(PROCESSINSTID _temp, PROCESSINSTID _SUM _%d, PROCESSINSTID _SUM _diedai); sprintf(PROCESSINSTID_Value, Value=%s, lr_eval_string(PROCESSINSTID _temp); sprintf(SS_temp, SS_SUM_%d, SS_SUM_diedai); sprintf(SSVal, Name=%s, lr_eval_string(SS_temp); sprintf(ChuShenYuan_temp, ChuShenYuan_SUM _%d, ChuShenYuan_SUM _diedai); sprintf(OPERATORID_Value, Value=%s, lr_eval_string(ChuShenYuan_temp);/*选择初审员,点击分发*/ web_submit_data(irs_workflow2.pr.prWF_FP_ToNext.do, Action=49:9085/irs_workflow2.pr.prWF_FP_ToNext.do?PROCESSINFO/OPERATE=-1, Method=POST, TargetFrame=, RecContentType=text/html, Referer=49:9085/irs_workflow2.pr.prWFWorkList.do, Snapshot=t10.inf, Mode=HTML, ITEMDATA, PROCESSINSTID , PROCESSINSTID_Value, ENDITEM, WORKITEMID , WORKITEMID_Value, ENDITEM, SSVal , Value=0 , ENDITEM, OPERATORID , OPERATORID_Value, ENDITEM, LAST);从以上代码,我们可以看出:方法二没有使用lr_save_string将LR变量转化成参数,而是两次使用sprintf函数构造LR变量PROCESSINSTID、PROCESSINSTID_Value、WORKITEMID、WORKITEMID_Value、SSVal、OPERATORID、OPERATORID_Value,并直接作为web_submit_data函数中的ITEMDATA。3 知识总结(1) 关联函数web_reg_save_param的使用方法,重点理解其中一个属性Ord值。它表示第几次出现的左边界子串的匹配项才是需要的内容。该属性可有可无,缺省值是1。如为All,则将所有找到的内容储存起来。本文中的全部关联Ord设置为All,因为Ord不确定。只有先全部取出,然后通过判断取出我们需要的值。(2) 如何找出各关联值之间的联系,即本文中的Ord值规律。其实找出这个规律很简单:第一步:大家可以先设置关联函数的Ord值为All, 第二步:在调试代码之前,设置run-time setting中的Log为Extended Log及parameters substitution, 第三步:运行代码,从Replay log中记录每一个有效的关联值的Ord值, 通过以上三步,就可以找出Ord值规律。不信,您可以试试,会有惊喜!(4)lr_save_string函数的使用方法。它的功能是将LR代码中的常量或变量保存为lr中的参数。具体的函数用法,我就不讲了,详见LR中help文档。(5)LR中常用的字符串操作的函数。具体有以下几个常见的函数:strcpy、strcat、strcmp、itoa、atoi、atof、atol。这里值得注意的是atof、atol在使用之前一定要先对其进行声明,具体使用方法,请参考LR中help文档。(6)lr_eval_string函数的使用方法。任何C的变量都不能被LR的函数直接调用,应该用lr_eval_string来取值。(7)sprintf函数的使用方法。它是一个格式化输出函数,格式化输出到字符串中。(8)在文中的第二种方法中,我们将多个LR变量值直接运用到web_submit_data函数的ITEMDATA中,这样大大简化了代码,使得代码有更强的可读性。(9)从文中关于关联函数的使用,我们可以延伸出其他用法:第一种延伸:可以通过关联取出满足左边界值的最后一个值,具体代码如下 web_reg_save_param(Param , LB= , RB= , Ord=ALL , LAST); web_url(HomePage, URL=, LAST);Sprintf( Last_Param , ”Param_%s” , lr_eval_string(“Param _count”);lr_output_string(“Param的最后一个值为:%s” , Last_Param); 第二种延伸:可以通过关联取出满足左边界值的随机值,具体代码如下: char i = NULL; int j = 0; web_reg_save_param(Par

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论