码迷,mamicode.com
首页 > 其他好文 > 详细

性能测试基础之脚本参数化

时间:2016-05-03 10:53:27      阅读:268      评论:0      收藏:0      [点我收藏+]

标签:

(一)

在用性能测试工具准备测试脚本的过程中往往是脚本录制易,脚本调试不易。录制完脚本之后,我们的脚本通常并不能够马上运行出正确的结果来,譬如没有进行正确的关联、譬如某些图片或资源请求报错(一般对业务流程没有影响的、需要过滤掉的)、譬如某些页面加载需要较长时间(响应超时)、又譬如某些值是需要变化的等等。

“某些值是需要变化的”是个什么鬼?好吧,这个鬼就是这篇小文主要想抛砖引玉一下的东东。举一个例子,某组织机构下各组织单位使用的人力资源管理系统,其中有个请假申请单的业务模块,脚本录制过程具体操作如下图所示:

技术分享

这个脚本在进行负载测试时就有需要进行变化的值,比较典型的几处:

(1)      登录部分

有些系统限制同一用户重复输入,所以脚本在回放的时候(即第二次提交的时候)是提交不成功的,这是很正常的情况。此外同一用户重复登录,一边操作这个功能,同时又操作另一个功能,这不符合逻辑,过程紊乱,也极易产生错误。因而,登录用户名、密码是需要变化的,例如{"selectionStartedPosition":12,"selectionEndedPosition":12,"text":"T02020002001"}。

(2)      组织机构、职员等选择

实际业务中,不同用户里面包含的组织、人员等基础数据不同,对于被选择的值,有些系统是用坐标定位的,例如{"current_cell":"1,1","selections":"1,1,1,1;"},这个坐标值也是需要变化。

(3)      上传附件

系统里存在表单需要上传附件才可以提交的情况,这个附件文件与用户所在组织一一对应,这种情况下,这个文件也需要进行参数化。

(4)      填写请假事由

对于一个需要保存的表来说,里面的值不发生变化,这个保存实际上没有操作成功,这种情况下,填写请假事由这个文本类内容的值就需要变化。

说了这么多种情况,解决以上问题的办法,就是脚本参数化。给脚本参数化下个定义,就是在性能测试脚本中,对于需要发生变化的值,用参数替换固定的文本这一过程。

(二)

说完了在什么情况需要进行脚本参数化,接下来我想说一说如何进行脚本参数化,以我常用的HyperPacer作为测试工具举例。进行参数化,就是给之前的参数赋值,这些值从哪里来?HyperPacer有一个功能叫做“数据池”,来提供满足条件的数据,目前支持文件导入数据库导入自定义其它四种方式,具体使用过程如下:

首先右击测试场景“并发测试”,选择“配置元件”,在弹出的对话框中选中“数据池”(引用时,数据池是一个配置元件,需要从已经生成好的数据选择当前脚本需要的数据),如图:

技术分享

(1)      文件导入

顾名思义,文件导入就是把已有的数据文件导到数据池中,这个文件被存储起来供调用,这种方式是比较常用的一种。目前导入的文件只支持txt和csv格式,读取策略按逐行读取,每列数据需要一个唯一的变量名称供引用时使用(变量名称可以是文件首行数据)。

TXT文件格式如下(每列以逗号分隔):

技术分享

CSV文件格式如下:

技术分享

进入“数据工厂”页签,导入数据文件之后点击预览,如下图:

技术分享

保存时需要输入唯一的标识名称:

技术分享

保存完成之后进入“数据引用”页签,选中data数据文件,会生成三个参数名称。然后用这些参数名称替换脚本里的文本值就OK了。

技术分享

共享模式的选项确定了该数据项的作用域范围,如无特殊需要选择默认的全部用户。

 技术分享

读取模式的设定则控制了不同的执行线程对数据的提取过程采用何种的策略,默认是顺序向下读取。

 技术分享

在工具左侧的工程树中定位到对应的数据包,找到相关的字段(zhangsan)将其替换为对应的变量名称(${data.username})。至此,参数化过程全部操作完毕。脚本再次执行时,便用的是参数化替换后的数据了。

技术分享

                     

(2)      数据库导入

当你需要的数据完全可以从数据库中获取并满足需要时,譬如用户名,可以直接使用这个导入方式,而不需要先从数据库中导出数据文件到本地,再从本地导入数据池中了。

首先填写所连接的数据库的配置信息

技术分享

数据库配置信息填完后,点击测试看看是否连接成功,连接成功之后点击确定,自动进入控制台页签写sql,获取数据:

技术分享

之后保存读取的数据,给数据一个唯一的标识名称,后续引用同方式(1)“文件导入”。

(3)      自定义

还有一种情况是,参数化有时候需要大量的数据,但是这些数据内容或许并不重要。这种情况下,可以使用自定义方式来生成数据。我在做压力测试时,有个填表格的操作,需要大量数据,就是使用的这个方式。

第一步,使用sql创建一个表格,选择数据生成方式:

技术分享

第二步,如果选择的是自动生成,点击下一步,对表中的每个字段进行配置,之后选择生成条数后点生成:

技术分享

技术分享

保存数据,给数据一个唯一的标识名称,后续引用文件同方式(1)“文件导入”。就个人而言,这个准备数据的方式是最爽的,分分钟获得你想要的数据。

对了,如果你选择的是手动执行Insert Sql生成的话,直接写sql生成数据即可:

技术分享

(4)      其它

最后数据池还提供特殊数据生成方式:按条件生成身份证号,按条件生成邮箱,提供汉字姓名生成拼音。前两个选择条件即可

技术分享


技术分享


技术分享

汉字生成拼音可以从文件读取,也可以随机生成,也可以加诸如“@jiuqi.com.cn”后缀,


技术分享

此外,数据池还有一个“我的数据”功能,主要对存储的数据进行“增删改查”的管理。

以上,脚本参数化告一段落了,看客们不知道有没有收获,HyperPacer的数据池功能相比于jmeter和loadrunner做了一些本地化处理,更符合国内研发的软件对性能测试数据的需求,总体使用感觉棒棒哒!期待大家更多的交流与分享!


性能测试基础之脚本参数化

标签:

原文地址:http://blog.csdn.net/csdn_user_2016/article/details/51296016

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!