5.2 脚本优化之参数化
5.2.1 脚本所谓的真实感
在5.1章节中我们成功录制了一个名为“signup”的注册脚本,在脚本回放中我们手动将用户名改为了“tester002”。性能测试的目的是为了模拟大量的并发操作,看系统能否正常处理,我们不能总是注册“tester002”,实践告诉我们这是不允许的,而手动修改的办法并不符合实际需要,所以我们需要引入参数化的概念来解决以上难题。
参数化的目的是模拟真实的用户操作和创建现实的结果,就算系统不对用户名进行注册限制,那么在现实的场景中,也不可能出现全部注册同一个用户名的情况,除非有提前告知或借助神力感应,如图5-32所示。
图5-32 为何要参数化
当我们利用VuGen生成Vuser Script,脚本中的数据是固定不变的,只有借助参数化手段才能模拟真实用户场景,以百度为例,当录制脚本的时候在百度中输入“软件测试”作为搜索条件,如图5-33所示。
图5-33 百度搜索条件
图5-33中录制的脚本,每次运行都会输入同一组数据“软件测试”,而实际用户的输入千差万别,就算是同一个用户也会有不同的搜索需求,所以该输入条件就是我们需要参数化的对象。
如何才能实现参数化呢?具体的操作方法并不复杂,我们跟着Lucy一起来学习。
步骤1:首先确定脚本中需要被参数化的数据。数据依实际情况可能是一个,也可能是多个。
步骤2:选中数据,鼠标右键选择替换为参数“Replace with Parameter”->“Create New Parameter”,在弹出的对话框中选择参数类型,并对参数命名。参数的命名一定要便于理解,一眼就能看出该参数的用途,不至于同其他参数混为一谈。
步骤3:选中数据,鼠标右键查看参数列表“Replace with Parameter”-> “Parameter List”中设置参数的取值和参数的更新方式。
【特别说明】:参数的更新方式由两部分组成“Select next row”和“Update Values on”,每个部分都有3个选项,理论上共有九种组合,在5.2.2章节的操作演练中请跟着Lucy一起动手。
学习笔记
笔记一:参数化是测试脚本中非常重要的功能,性能测试数据仿真度越高越接近真实用户体验,测试结果也就越精确。LR提供了各种参数化的组合方式,也是为了解决仿真的 问题。
笔记二:LR脚本中有许多右键辅助功能,目的是帮助使用者快速调整脚本。论坛上有人对这种右键操作十分不屑,认为脚本都应该是纯手工编写才显专业。实际上并非如此,打个比方来说,如果你家离公司的距离很远,你乘公交车到达公司需要30分钟,那么你走路一定需要更长的时间(堵车情况除外),而最终无论是步行还是乘车都是从家里出发到达指定地点,只是手段不同,效率不同,结果并没有本质的区别。
5.2.2 参数化操作演练1
理解了参数化的基本原理,下面我们尝试对注册脚本“signup”进行参数化,参数化要求将用户名和密码进行唯一性匹配,具体要求如表5-4所示。
根据要求我们打开signup脚本,下面是具体操作步骤。
步骤1:找到用户名和密码相关Value,这里需要注意确认密码和原密码必须一致,所以password参数会在脚本中出现两次。以下为signup脚本部分代码段落。
//填写并提交注册信息 web_submit_form("login.pl", "Snapshot=t3.inf", ITEMDATA, "Name=username", "Value=tester002", ENDITEM, "Name=password", "Value=123456", ENDITEM, "Name=passwordConfirm", "Value=123456", ENDITEM, "Name=firstName", "Value=tester", ENDITEM, "Name=lastName", "Value=002", ENDITEM, "Name=address1", "Value=chengdu", ENDITEM, "Name=address2", "Value=610000", ENDITEM, "Name=register.x", "Value=43", ENDITEM, "Name=register.y", "Value=9", ENDITEM, LAST); |
步骤2:选中相应字段后单击鼠标右键,选择“Replace with Parameter”->“Create New Parameter”,对参数命名并选择参数类型。如图5-34、图5-35所示。
图5-34 创建参数
图5-35 参数命名
填写好参数名称,并选择File类型后系统会弹出提示“你是否想用参数替换该字符串的所有出现位置?”的对话框,如图5-36所示。
图5-36 参数替换确认窗口
【特别说明】:因username在该脚本中只出现了一次,可以选择“No”,而password在该脚本中会出现两次,可以选择“Yes”,在实际项目中处于谨慎我们最好选择“No”,并自行检查脚本对应字段。
步骤3:进入参数列表,设置参数的取值和参数的更新方式,选中参数点鼠标右键进入“Parameter Properties…”窗口,如图5-37所示。
图5-37 参数属性窗口
参数设置有四种方式。
第一种:以在页面中直接添加行(Add Row)或列(Add Column)的方式实现;
第二种:选中用记事本编辑,单击参数设置区域左下角“Edit with Notepad”按钮;
第三种:选择导入参数,单击参数设置区域左下角“Import Parameter”按钮;
第四种:选择模拟参数,单击参数设置区域右下角“Simulate Parameter”按钮。
【特别说明】:在日常参数设置中,第一种参数添加方式需要逐个添加,用起来相对繁琐;第二种方式最为直观,使用率最高;第三种则是从外部文件导入,数据之间的格式要求比较严格,使用时要特别注意;第四种模拟数据用于判断参数取值方式是否符合预期。
Lucy经过考虑决定选用记事本编辑的方式进行参数设置,username的设置如图5-38所示。
图5-38 username参数设置
按相同的方法对password字段也进行了参数设置,如图5-39所示。
图5-39 password参数设置
设置好参数后我们同Lucy一起来认识参数取值方式设置区域,该区域分为三个部分,对列的取值、文件格式和取值方式进行了说明。
列的取值(Select column):说明参数取值的位置,从哪一列进行取值,取值方式分两种,按编号取值(By number),或者按名称取值(By name),如图5-40所示。
图5-40 列的取值方式
文件格式(File format):默认以“,”逗号作为数据的分隔符,也可选择其他分隔符(不推荐更改),如图5-41所示。
图5-41 文件格式
取值方式,选择下一行(Select next row),包括三个固定选项,如图5-42所示。
图5-42 选择下一行的方式
(1)Sequential:顺序取值,表示此参数从第一行开始取值,依次序取后面的每一行;
(2)Random:随机取值,表示每次参数取值都是随机取值,有重复的可能;
(3)Unique:唯一取值,按Vuser分配的参数要求和自身的取值规则进行取值。
取值方式,更新值的时间(Update Values on),也包括三个固定选项,如图5-43所示。
图5-43 选择更新值的方式
(1)Each iteration:每次循环取新值,表示该参数在同一个脚本中取相同的值;
(2)Each occurrence:每次遇到就取新值,表示该参数在同一个脚本中如果出现两次或两次以上都会按照选择下一行的方式重新取值;
(3)Once:一次取值,无论参数出现几次,按照选择下一行的方式,取一次即可。
通过观察,Lucy发现如果在signup的脚本中,username/password参数,选择下一行的取值方式选择Random,更新值的时间选择Each iteration,那么最终username和password的对应关系将不复存在。
取值方式的多样化是LoadRunner的重要特征,如何才能让username和password的对应关系不受取值方式的制约呢?Lucy决定修改password参数属性的设置,让username和password来自于同一个数据文件:
首先修改File的数据来源,password.dat->username.dat,然后在新的数据文件下增加password的列名,如图5-44所示。
图5-44 修改数据来源
然后以记事本的方式(Edit with Notepad)打开数据文件,增加password列信息,注意两个字段通过“,”逗号间隔。如图5-45所示。
图5-45 增加password列值
【特别说明】:参数化是LoadRunner仿真的重要技能,设置时一定要小心谨慎,如果参数之间存在对应关系,最好将相关参数设置在同一张数据文件表中,方便后期灵活调整取值 方式。
最后只要将password列的取值方式改为“Same line as username”,这样无论username按什么样的方式取值对应的password都不会产生混乱。如图5-46所示。
图5-46 选择Select next row
Lucy很高兴能独立解决此问题,运行脚本后成功注册了X001到X004的所有用户。
本书读者交流QQ群:425860640,欢迎加入~~
本文选自《性能测试学习笔记之 LoadRunner实战》第五章,本站经人民邮电出版社和作者的授权。
版权声明:51Testing软件测试网获人民邮电出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。