性能测试工具介绍武汉软通测试组:胡婷婷taobaooo2013.com一、性能测试的重要性•性能测试是软件测试过程中的重要组成部分,一个合格的软件除了完成需求中的功能之外,性能上的要求也逐渐变的重要。•如果在测试过程中发现性能问题,修复起来是非常艰难的,因为这常常意味着程序的算法不好,结构不好,或者设计有问题。因此在产品开发的开始阶段,就要考虑到软件的性能问题。二、性能测试准备工作•要测试什么或测试的对象是谁?•要测试什么问题或我们想要弄清楚或是论证的问题?•哪些因素会影响测试结果?•需要怎样的测试环境?•应该怎样进行测试?三、主要性能测试工具介绍•LoadRunner–LoadRunner是一种预测系统行为和性能的工业标准级负载测试工具。通过以模拟上千万用户实施并发负载及实时asdfghuj阿萨德法国户籍性能监测的方式来确认和查找问题,LoadRunner能够对整个企业架构进行测试。Winrunner•WR可以帮助你自动处理从测试开发到测试执行的整个过程。你可以创建可修改和可复用的测试脚本,而不用担心软件功能模块的变更。•当你在软件操作中点击GUI(图形用户界面)对象时,WR会用一种类C的测试脚本语言(TSL)生成一个测试脚本。你可以用手工编程的方法看实质性的惩罚vghjkderftgyhuj的先吃饭vghji看现代城风格化急口令现代厨房过户及地方刚回家空了编辑这个脚本。WR包括的功能生成器(FunctionGenerator)可以帮助你快速简便的在已录制的测试中添加功能。•RationalRobot•IBM公司提供的RationalRobot可开发三种测试脚本:用于功能测试的GUI脚本、用于性能测试的VU以及VB脚本。四、LoadRunner测试工具介绍1.制定负载测试计划•在任何类型的测试中,测试计划都是必要的步骤。测试计划是进行成功的负载测试的关键。任何类型的测试的第一步都是制定比较详细的测试计划。一个比较好的测试计划能够保证LoadRunner能够完成负载测试的目标。•分析应用程序•确定系统的组成画出系统的组成图。组成图要包括系统中所有的组件,以及相互之间是如何通讯的。•描述系统配置•对于一个项目,试着回答以下问题,对系统的组成图进行完善。1.预计有多少用户会连到系统2.客户机的配置情况(硬件、内存、操作系统、软件工具等)3.服务器使用什么类型的数据库以及服务器的配置情况4.客户机和服务器之间如何通讯5.还有什么组件会影响ResponseTime指标6.通讯装置(网卡、路由器等)的吞吐量是多少?每个通讯装置能够处理多少并发用户•分析最普遍的使用方法•了解该系统最常用的功能,确定哪些功能需要优先测试、什么角色使用该系统以及每个角色会有多少人、每个角色的地理分布情况等,从而预测负载的最高峰出现的情况。确定测试目标•根据我们的调查和分析确定我们要进行测试的目标。2.开发测试脚本•录制测试脚本注意事项:•1.只有选择合适的协议,才能录制出有用的脚本。•2.尽量在录制过程中加入事务,集合点以及注释。对于事务和集合点,应该给一个代表具体含义的名字•3.Action的内容要尽量简单,避免包含过多的操作。•录制步骤:•输入正确的url地址,对按钮option..的设置;•点击确定后,开始进行脚本的录制;•在录制过程中,我们可以根据需要增加多个Action,事务,集合点等对象,使得我们的脚本更加容易阅读;•录制完成后,LR会自动生成测试脚本。•为你的脚本取个名字并保存,一个简单的测试脚本就录制完成了。•RuntimeSettings•Runlogic:Numberofiterations•Thinktime:ignoreThinktime•Others:UseDefaults参数化输入•如果用户在录制脚本过程中,填写提交了一些数据,比如要增加数据库记录。这些操作都被记录到了脚本中。当多个虚拟用户运行脚本时,都会提交相同的记录,这样不符合实际的运行情况,而且有可能引起冲突。为了更加真实的模拟实际环境,需要各种各样的输入。•参数化输入是一种不错的方法。•用参数表示用户的脚本有两个优点:•①可以使脚本的长度变短。•②可以使用不同的数值来测试你的脚本。•参数化包含以下两项任务:•①在脚本中用参数取代常量值。•②设置参数的属性以及数据源。•参数化仅可以用于一个函数中的参量。你不能用参数表示非函数参数的字符串。参数化输入•DateTime:很简单,在需要输入日期/时间的地方,可以用DateTime类型来替代。其属性设置也很简单,选择一种格式即可。当然也可以定制格式。•GroupName:暂时不知道何处能用到,但设置比较简单。在实际运行中,LoadRunner使用该虚拟用户所在的VuserGroup来代替。但是在VuGen中运行时,GroupName将会是None•LoadGeneratorName:在实际运行中,LoadRunner使用该虚拟用户所在LoadGenerator的机器名来代替。•IterationNumber:在实际运行中,LoadRunner使用该测试脚本当前循环的次数来代替。•RandomNumber:随机数。很简单。在属性设置中可以设置产生随机数的范围•File:需要在属性设置中编辑文件,添加内容,也可以从现成的数据库中取数据参数化输入•UniqueNumber:唯一的数。在属性设置中可以设置第一个数以及递增的数的大小。•注意:使用该参数类型必须注意可以接受的最大数。这里说的递增意思是各个用户取第一个值的递增数,每个用户相邻的两次循环之间的差值为1。举例说明:假如起始数为1,递增为5,那么第一个用户第一次循环取值1,第二次循环取值2;第二个用户第一次循环取值为6,第二次为7;依次类推。•VuserID:设置比较简单。在实际运行中,LoadRunner使用该虚拟用户的ID来代替,该ID是由Controller来控制的。但是在VuGen中运行时,VuserID将会是–1。•UserDefinedFunction:从用户开发的dll文件提取数据。3.创建运行场景•运行场景描述在测试活动中发生的各种事件。一个运行场景包括一个运行虚拟用户活动的LoadGenerator机器列表,一个测试脚本的列表以及大量的虚拟用户和虚拟用户组。•我们使用Controller来创建运行场景。4.运行测试5.监视场景•常用的监视器:•RunningVusers•TransResponseTime•Throughput•WindowsResources•UnixResources6.分析测试结果•LoadRunner提供的Analysis工具自动对测试运行后的结果进行分析。五、WinRunner工具使用介绍•WinRunner主窗口•主窗口包括以下部分:•a).WinRunnertitlebar标题栏•b).Menubar菜单栏•c).Standardtoolbar标准工具栏,包含运行测试时常用的命令•d).Usertoolbar用户工具栏,包含创建测试时常用的命令•e).Statusbar状态栏WinRunner测试过程•WR的测试过程分六个步骤:•创建GUImap•创建测试•调试测试•执行测试•查看测试结果•报告发现的错误两种录制模式•环境判断模式(ContextSensitivemode)•当你进行录制时间,WR会对你选取的每个对象做唯一描述并写入GUImap(映射)中。GUImap和测试脚本被分开保存维护。••模拟模式(Analogmode)•这种模式记录鼠标点击、键盘输入和鼠标在二维平面上(x轴和y轴)的精确运动轨迹。执行测试时,WR让鼠标根据轨迹运动。录制测试脚本的相关概念•同步点•同步点让你解决测试和被测软件之间的时间占用问题。例如:如果你创建一个打开数据库软件的测试,你可以插入一个同步点让测试等待直到在数据库中的记录在屏幕上被加载。•检查点•检查点让你比较软件当前版本和以前版本的区别。同步点用来处理测试运行中可能发生的时间控制和窗体位置等问题。•在脚本中可以插入以下四类检查点:•GUI检查点检验GUI对象信息。比如:你可以查看一个button是否可用或一个清单中哪个项目被选定了。•位图检查点做一个窗体或区域的截图,并把这张图片和以前版本进行比较。•文本检查点读取GUI对象和位图中的文本,使你可以检验文本内容。•数据库检查点检查一定数量的行和列组成的集合(这个集合由你在数据库中创建)的内容。GUImapfile模式的选取•计划和创建测试时,你需要确定GUImap的工作模式。•作为WR新手或GUImap只使用一次,可以使用GUIMapFilePerTest模式。这种模式下,每次新建测试就自动新建一个GUImapfile。在你保存测试时,GUImapfile自动保存;在你打开测试时,GUImapfile自动加载。•作为WR老手或GUImap将被不同测试共享,建议使用更有效率的模式。这是WR的默认模式。WR6.02或更低版本都是使用这种模式,且只能使用这种模式。••下面是两种模式的优缺点比较:录制测试•录制时有以下要点:•开始录制前,关闭所有无关的程序。•使用invoke_application语句打开被测软件。•录制窗体中的对象前,点击窗体的标题栏来录一个win_activate语句。这是用来激活窗体的。•创建可以自我复原的测试。当测试结束时,测试环境必须恢复到测试前的状态。•录制时,你可以把WR最小化而使用User工具条(需要先把工具条和菜单分开)。这样你就可以全屏录制程序了。所有主要命令都在工具条上,当然你也可以自定义工具条的内容。•录制过程中,在一个窗体中移动时尽量使用鼠标,不要用Tab键。•在Analog模式下录制时,尽量使用热键插入检查点,不要用WR菜单或工具条。•在Analog模式下录制时,避免超前输入。如果你需要打开一个窗口,就等窗口完全打开后再继续操作。避免按住一个鼠标键不放,尤其是当这个动作会造成重复操作时(如点在滚动条上来移动屏幕显示的内容)。因为这样会造成一个无法被回放的时间感应(time-sensitive)操作。如果真的需要对鼠标键连续操作,可以多点击几下。•WR支持RTL-style(从右到左)的窗体属性。包括菜单从右到左排列和输入、在左侧的滚动条、附加文本在GUI对象的右上角。WR还支持输入时同时按下CTRL和SHIFT(或ALT和SHIFT)切换语言。•WR支持下拉和类菜单的工具条(比如IE)。虽然类菜单的工具条看上去和菜单一模一样,但两者属于不同的类,而且WR录制起来也不同。工具条中被选定的项目会被录成toolbar_select_item语句,菜单中的则是menu_select_item语句。•如果一个测试文件夹或测试脚本文件在系统中被标记成只读,WR就不能对它进行任何修改操作。调试测试•WR的脚本(TSL)是采用类C的语言编写的。你可以自己编写代码,使脚本能够更真实的模拟实际环境。•执行测试•对于一个录制好的脚本,WR提供三种测试模式:•Verify真正的执行测试,并且保存测试结果。•Debug检查脚本是否执行流畅,是否有错误,只保存最后一次执行的测试结果。•Update当想要更新检查点的预期值时。Thanks!