《性能测试loadrunner详细讲解.ppt》由会员分享,可在线阅读,更多相关《性能测试loadrunner详细讲解.ppt(74页珍藏版)》请在金锄头文库上搜索。
1、性能测试培训培训目的了解常用的性能测试工具了解Loadrunner目录了解Loadrunner的用户行为模拟相关操作Loadrunner解惑与经验培训内容n常用的性能测试工具介绍nLoadrunner目录分析Loadrunner用户行为模拟VuGen简介及录制流程界面介绍录制基本的用户行为完善测试脚本开发Runtime set单机运行脚本其它1 常用的性能测试工具_开源工具OpenSTA:开源项目,功能强大,自定义功能设置完备,但设置通过Script来完成。必须学习Script编写 。WAS(Web Application Stress Tool):微软的工具,输出结果是纯文本的。1 常用的性
2、能测试工具_商业工具工具名称工具名称LoadRunnerLoadRunnerQALoadQALoadWebLoadWebLoad出品公司出品公司MICompuwareRadview价格价格昂贵较贵一般安装安装配置复杂性配置复杂性 简单简单一般操作性操作性较复杂简单简单支持测试对象支持测试对象各种中间件/数据库/应用服务器的性能监控/企业架构(j2ee和.net)的测试客户/服务器系统、企业资源配置(ERP)和电子商务应用Web Application支持平台支持平台windows,unix或linuxHP-UX, IBM AIX,Sun Solaris, Linux, NT/2kUnix Wi
3、ndows支持数据库支持数据库DB2,SQLserver,Orcale,SybaseADO, DB2,Oracle,Sybase,SQLserver,OdbcADO,DB2,Oracle,Sybase,SQLserver,Odbc功能点功能点创建虚拟用户,创建真实的负载,定位性能问题,分析结果以精确定位问题所在,重复测试保证系统发布的高性能等预测系统性能、通过重复测试寻找瓶颈问题、从控制中心管理全局负载测试、快速创建仿真的测试、验证应用的可扩展性。强大的专业网站性能测试,虚拟多用户虚拟虚拟用户数量用户数量成千上万成百上千理论上无限,不过受机器的限制,同时运行太多影响结果的准确性2 loadru
4、nner目录分析AnalysisTemplates- 分析模板,可以自己建一个Bin-可执行程序,注意里面的CHM帮助文档bincerts-安全证书classes-可能用到的一些jar包dat-备份文件和配置信息ejbcomponent-ejb用的一些组件,相关的jar包help-帮助中心。2 loadrunner目录分析include-头文件(可以编写自定义函数,保存为.h的头文件格式,并放在这个目录,以后只需要调用这个头文件就可以正常使用了)samples-一些实例,有java的tutorial-快速入门的实例,可以直接使用WebTours-实例网站template-这个目录好像好多东西。
5、winpcap-一个网络协议驱动的安装程序3.Loadrunner用户行为模拟内容VuGen简介及录制流程界面介绍录制基本的用户行为完善测试脚本开发插入事务插入集合点插入注释参数化输入插入函数插入检查点Runtime set单机运行脚本其它3.1Loadrunner用户行为模拟简介 Virtual User Generator是一种基于录制回放的工具,loadrunner拥有各种Vuser类型,每一种类型都 适合于特定的负载测试环境。 性能测试性能测试的第一步也是最重要的一步就是生成虚拟用户脚本(Vuser Script)。在VuGen中录制得到用户的行为就好比虚拟了一个用户的行为,所以我们称
6、该模拟的用户为Vuser,这个脚本称为Vuser Script。 注意:Vuser仅能录制Windows平台上的会话,但录制的Vuser脚本既可以在Windows平台上运行,也可以在UNIX平台上运行3.1用户行为模拟流程通常使用VuGen进行用户行为模拟的流程如图所示。创建用户脚本需要用到 VuGen 。 提示: 运行 VuGen 最好在 1024*768 的分辨率下, 否则有些工具栏会看不到。 3.2VuGen界面介绍内容界面简介界面简介选择协议类型选择协议类型Task模式模式3.2VuGen界面介绍 新建一个脚本,选择Web(HTTP/HTML)协议后,即可得到开发界面。在VuGen中提
7、供了两种脚本视图方式(Script/Tree),可以通过菜单栏的对应按钮进行切换, 也可以通过View菜单下的选项进行切换。Tree图形化模式图形化模式脚本模式脚本模式3.2.1VuGen界面介绍在在Tree图形化模式图形化模式下,左侧会列出该脚本使用的函数(双击可以直接使用图形化修改函数),右侧提供了该请求对应的截图(自行编写的脚本和部分协议不会带有Snapshot截图)。一般通过这种视图来检查录制是否正确或进行某些函数的图形化修改。在脚本模式在脚本模式界面中,左侧是脚本Action的列表,右侧是代码部分。从开发方便的角度来说,一般使用这个模式的情况多一些。3.2.1VuGen界面介绍在屏幕
8、的下方提供了Output Window,包含录制、回放、关联等相关信息的输出管理。3.2.2选择录制协议1:默认的新建单协议版本-(所以协议选择非常重要)可以查看所有协议或按类型来查看对应的可用协议 。2:新建多协议版本创建多协议Vuser脚本,VuGen显示所有的可用协议,指定录制所需要的几组协议即可。3:使用最近使用过的协议创建脚本3.2.2协议类型说明3.2.3Task模式LoadRunner中的Task(称为“任务栏”或“工作流”),用于指导新手一步步按照标准的流程录制测试、编辑测试、回放运行测试,最后得到测试结果并进行分析。从View菜单选择task,加载task模式。3.3.1录制
9、基本的用户行为启动 Visual User Generator 后, 通过菜单 3.3.1录制基本的用户行为新建一个用户脚本, 选择系统通讯的协议。 3.3.1录制基本的用户行为这里我们主要需要测试的是 Web 应用, 所以我们需要选择 Web(HTTP/HTML) 协议, 确定后,进入主窗体。 3.3.1录制基本的用户行为直接进入录入选项页,启动脚本录制。在此处选择应用的类型,浏览器类型,测试地址,以及工作目录等。选择要把录制的脚本放到哪一个部分, 默认情况下是“ Action ”。 3.3.1录制基本的用户行为也通过菜单 ,来启动录制脚本的命令。3.3.1录制基本的用户行为这里简单说明一下
10、: VuGen 中的脚本分为三部分: vuser_init 、 vuser_end 和 Action 。 其中 vuser_init 和 vuser_end 都只能存在一个, 不能再分割, 而 Action 还可以分成无数多个部分(通过点击 New 按钮, 新建 ActionXXX )。 注意: 在重复执行测试脚本时, vuser_init 和user_end 中的内容只会执行一次, 重复执行的只是 Action 中的部分。 3.3.1录制基本的用户行为“ Record the application startup ” 默认情况下是选中的, 说明应用程序一旦启动, VuGen 就会开始录制脚
11、本; 如果没有选中, 应用程序启动后, VuGen 出现以下对话框, 并且暂时不会开始录制脚本, 用户操作应用程序到需要录制的地方, 按下“ Record ” 按钮, VuGen 才开始录制。 3.3.1录制基本的用户行为点 “ Options ” 按钮, 进入录制的设置窗体, 这里一般情况下不需要改动。 3.3.1录制基本的用户行为Recording Options标签页:标签页: 默认情况下选择“ HTML-based Script ”, 说明脚本中采用 HTML 页面的形式来表示, 这种方式的 Script 脚本容易维护, 容易理解, 推荐这种方式录制。“ URL-based Scrip
12、t ” 说明脚本中的表示采用基于 URL 的方式。 选择哪种方式录制, 有以下参考原则: 1 基于浏览器的应用程序推荐使用 HTML-based Script 2 不是基于浏览器的应用程序推荐使用 URL-based Script 。 3 如果基于浏览器的应用程序中包含了 JavaScript 并且该脚本向服务器产生了请求, 比如 DataGrid 的分页按钮等, 也要使用 URL-based 方式录制 4 基于浏览器的应用程序中使用了 HTTPS 安全协议, 使用 URL-based 方式录制 3.3.1录制基本的用户行为Advanced 标签页: 一般取默认情况即可。3.3.1录制基本的用
13、户行为Correlation 标签页: 这里的内容比较重要, 需要定制, 主要是为了在录制过程中设置自动关联。注意:在录制过程中, 不要使用浏览器的“后退” 功能, LoadRunner 支持不好! 3.3.1录制基本的用户行为录制过程中, 在屏幕上会有一个工具条出现。 下面我们简单介绍一下各个按钮的功能。 3.3.1录制基本的用户行为录制完成后, 按下“结束录制” 按钮, VuGen 自动生成用户脚本, 退出录制过程。 脚本参考下页的图。 3.4完善测试脚本当录制完一个基本的用户脚本后, 在正式使用前我们还需要完善测试脚本, 增强脚本的灵活性。 一般情况下, 我们通过以下方法来完善测试脚本。
14、插入事务插入集合点插入注释参数化输入插入函数插入检查点3.4.1插入事务事务( Transaction ): 为了衡量服务器的性能, 我们需要定义事务。 比如: 我们在脚本中有一个数据查询操作, 为了衡量服务器执行查询操作的性能, 我们把这个操作定义为一个事务, 这样在运行测试脚本时, LoadRunner 运行到该事务的开始点时, LoadRunner 就会开始计时, 直到运行到该事务的结束点, 计时结束。 这个事务的运行时间在结果中会有反映。 插入事务操作可以在录制过程中进行, 也可以在录制结束后进行。 LoadRunner 运行在脚本中插入不限数量的事务。 3.4.1插入事务事务( Tr
15、ansaction ): 为了衡量服务器的性能, 我们需要定义事务。 比如: 我们在脚本中有一个数据查询操作, 为了衡量服务器执行查询操作的性能, 我们把这个操作定义为一个事务, 这样在运行测试脚本时, LoadRunner 运行到该事务的开始点时, LoadRunner 就会开始计时, 直到运行到该事务的结束点, 计时结束。 这个事务的运行时间在结果中会有反映。 插入事务操作可以在录制过程中进行, 也可以在录制结束后进行。 LoadRunner 运行在脚本中插入不限数量的事务。 3.4.1插入事务具体的操作方法如下: 在需要定义事务的操作前面, 通过菜单或者工具栏插入。 出现以下对话框: 输
16、入该事务的名称。 注意: 事务的名称最好要有意义, 能够清楚的说明该事务完成的动 3.4.1插入事务插入事务的开始点后, 下面需要在需要定义事务的操作后面插入事务的“结束点”。 同样通过菜单或者工具栏插入。 默认情况下, 事务的名称列出最近的一个事务名称。 一般情况下, 事务名称不用修改。 事务的状态默认情况下是 LR_AUTO 。 一般情况下, 我们也不需要修改, 除非在手工编代码时, 有可能需要手动设置事务的状态。 3.4.2插入集合点插入集合点是为了衡量在加重负载的情况下服务器的性能情况。 在测试计划中, 可能会要求系统能够承受 1000 人同时提交数据, 在 LoadRunner 中可
17、以通过在提交数据操作前面加入集合点, 这样当虚拟用户运行到提交数据的集合点时, LoadRunner 就会检查同时有多少用户运行到集合点, 如果不到 1000 人,LoadRunner 就会命令已经到集合点的用户在此等待,当在集合点等待的用户达到 1000 人时, LoadRunner 命令 1000 人同时去提交数据, 从而达到测试计划中的需求。 注意: 集合点经常和事务结合起来使用。 集合点只能插入到 Action 部分, vuser_init 和 vuser_end 中不能插入集合点。 3.4.2插入集合点具体的操作方法如下: 在需要插入集合点的前面, 通过菜单或者工具栏操作 。出现对话
18、框 输入该集合点的名称。 如:SubmitQueryData注意: 集合点的名称最好要有意义, 能够清楚的说明该集合点完成的动作。代码如下: 3.4.3插入注释注释的作用就不多说了, 不过插入注释最好是在录制过程中。 具体的操作方法如下: 在需要插入注释的前面, 通过菜单或者工具栏操作。3.4.3插入注释出现对话框 脚本中注释的代码如下: 3.4.4参数化如果用户在录制脚本过程中, 填写提交了一些数据, 比如要增加数据库记录。 这些操作都被记录到了脚本中。 当多个虚拟用户运行脚本时, 都会提交相同的记录, 这样不符合实际的运行情况, 而且有可能引起冲突。 为了更加真实的模拟实际环境, 需要各种
19、各样的输入。参数化输入是一种不错的方法。用参数表示用户的脚本有两个优点: 可以使脚本的长度变短。 可以使用不同的数值来测试你的脚本。 参数化包含以下两项任务: 在脚本中用参数取代常量值。 设置参数的属性以及数据源3.4.4参数化参数化仅可以用于一个函数中的变量。 你不能用参数表示非函数参数的字符串。 假如有以上的一个提交数据的窗体, 我们想参数化高亮显示的部分( 31 )。 操作方法很简单, 我们只要选中“ 31 ”, 然后点鼠标右键 3.4.4参数化选择“ Replace with a parameter. ”, 出现以下窗口:介绍一下参数的类型。DateTime : 很简单, 在需要输入日
20、期 / 时间的地方, 可以用 DateTime 类型来替代。属性设置也很简单, 选择一种格式即可。 当然也可以定制格式。Group Name : 暂时不知道何处能用到, 但设置比较简单。 在实际运行中, LoadRunner 使用该虚拟用户所在的 Vuser Group 来代替。 但是在 VuGen 中运行时, Group Name 将会是 None 。3.4.4参数化Load Generator Name : 在实际运行中 ,LoadRunner 使用该虚拟用户所在 Load Generator 的机器名来代替。 Iteration Number : 在实际运行中, LoadRunner 使
21、用该测试脚本当前循环的次数来代替。 Random Number : 随机数。 很简单。 在属性设置中可以设置产生随机数的范围 Unique Number : 唯一的数。 在属性设置中可以设置第一个数以及递增的数的大小。注意:使用该参数类型必须注意可以接受的最大数。例如:某个文本框能接受的注意:使用该参数类型必须注意可以接受的最大数。例如:某个文本框能接受的最大数为99。当使用该参数类型时,设置第一个数为1,递增的数为1,但100 个虚拟用户同时运行时,第100 个虚拟用户输入的将是100,这样脚本运行将会出错。注意:这里说的递增意思是各个用户取第一个值的递增数,每个用户相邻的两次循环之间的差值
22、为1。举例说明:假如起始数为1,递增为5,那么第一个用户第一次循环取值1,第二次循环取值2;第二个用户第一次循环取值为6,第二次为7;依次类推。 3.4.4参数化Vuser ID:设置比较简单。在实际运行中,LoadRunner 使用该虚拟用户的ID 来代替,该ID 是由Controller 来控制的。但是在VuGen 中运行时,Vuser ID 将会是1。File:需要在属性设置中编辑文件,添加内容,也可以从现成的数据库中取数据(下面我们将会介绍)User Defined Function:从用户开发的dll 文件提取数据。就目前我认为,这种方式没有必要。VuGen 支持C 语言的语法,在V
23、uGen 中重新编写类似的函数应该不难。3.4.4参数化:取随机数点“Properties .”按钮,进行属性设置窗口添入随机数的取值范围为(1-50),选择一种数据格式。在Update Value on 中有以下几个选项: Each Occurrence:在运行时,每遇到一次该参数,便会取一个新的值 Each iteration:运行时,在每一次循环中都取相同的值 Once:运行时,在每次循环中,该参数只取一次值这里我们用的是随机数,选择Each Occurrence 非常合适。3.4.4参数化:参数化的数据选择要参数化的数据,右键,选择“Replace with a parameter.”
24、,出现以下窗口:注意:参数的文件名不要使用注意:参数的文件名不要使用con.dat、pm.dat 或者或者lpt*.dat 等系统装置名等系统装置名3.4.4参数化:参数化的数据下面我们将会连接数据库,从数据表中选择用户名。点“Data Wizard”按钮添入连接字符串和 SQL 语句后,点Finish 按钮,出现查询结果。3.4.4参数化:参数化的数据提醒:在参数数据显示区,最多只能看到提醒:在参数数据显示区,最多只能看到100 行,如果数据超过行,如果数据超过100 行,只能点行,只能点“Edit”按钮,进入记事本看。按钮,进入记事本看。3.4.4参数化“Select next row ”
25、有以下几种选择:Sequential:按照顺序一行行的读取。每一个虚拟用户都会按照相同的顺序读取。Random:在每次循环里随机的读取一个,但是在循环中一直保持不变。Unique :唯一的数。注意:使用该类型必须注意数据表有注意:使用该类型必须注意数据表有足够多的数。比如足够多的数。比如Controller 中设定中设定20 个虚拟用户进行个虚拟用户进行5 次循环,那么编号为次循环,那么编号为1 的虚拟用户取前的虚拟用户取前5个数,编号为个数,编号为2 的的虚拟用户取虚拟用户取6-10 的数,依次类推,这样数据表中至少要有的数,依次类推,这样数据表中至少要有100个数据,否则个数据,否则Con
26、troller 运行过程中会返回一个错误。运行过程中会返回一个错误。Same Line As 某个参数(比如Name):和前面定义的参数Name 取同行的记录。通常用在有关联性的数据上面。说明:一般情况下,我们这里取值说明:一般情况下,我们这里取值 Sequential 即可。即可。Advance row each iteration 选中即可,表示每一次循环都往前走一行。3.4.5插入函数VuGen 中可以使用C 语言中比较标准的函数和数据类型,语法和C 语言相同。下面简单介绍一下比较常用的函数和数据类型。1. 控制脚本流程if else for while 总之 C 语言的控制流程的语句这
27、里都可以直接使用3.4.5插入函数2. 字符串函数由于在 VuGen 脚本中使用最多的还是字符串,所以字符串函数在脚本中使用非常频繁。具体的语法请参考帮助说明。strcmp 比较两个字符串strcat 连接两个字符串strcpy 拷贝字符串注意:在VuGen 中,以char*声明的字符串是只读的,如果试图给char*类型的字符串赋值的话,编译会通过,但在运行时会产生“Access Violation”的错误。解决这类问题,就是把字符串声明为字符数组,比如char100。3.4.5插入函数3. 输出函数输出函数在调试脚本时非常有用。lr_output_message 输出一条消息4. LoadR
28、unner 提供的标准函数lr_eval_string 该函数功能是得到参数(参数化输入中)当前的值exg: lr_output_message(temp = %s, lr_eval_string(WCSParam2);lr_save_string 该函数功能是把一个字符串保存到参数中exg: lr_save_string(439,WCSParam3);3.4.6插入检查点在进行压力测试时,为了检查Web 服务器返回的网页是否正确,VuGen 允许我们插入Text/Imag 检查点,这些检查点验证网页上是否存在指定的Text 或者Imag,还可以测试在比较大的压力测试环境中,被测的网站功能是否
29、保持正确。检查点的含义和WinRunner 中的检查点功能基本上一致,这里就不再作过多的说明。VuGen 在测试Web 时,有两种视图方式:TreeView/Script View。前面我们见到的一直都是Script View。在插入Text/Imag 检查点时,我觉得用TreeView 视图会比较方便。在这种视图之间切换,可以通过菜单或者工具栏的方式3.4.6插入检查点3.4.6插入检查点我们就切换到 TreeView 视图插入检查点的步骤比较简单。添加Text/Imag 检查点,可以在录制过程中,也可以在录制完成后进行。推荐推荐最好能在录制过程中添加最好能在录制过程中添加Text/Imag
30、 检查点。检查点。3.4.6插入检查点先在树形菜单中选择需要插入检查点的一项,然后点鼠标右键,选择将检查点插到该操作执行前还是该操作执行后。如果在该操作执行前,则选择“Insert Before”,否则选择“InsertAfter”。3.4.6插入检查点然后弹出对话框,如下,选择“Text Check”(这里以Text 检查点为例说明)出现Text Check Properties 对话框注意:这里要搜索的字符串可以使用正则表达式。注意:这里要搜索的字符串可以使用正则表达式。3.4.6插入检查点然后切换到“General”标签页确定后,即可完成添加Text 检查点的任务。3.4.6插入检查点添
31、加 Imag 检查点的操作步骤和Text 检查点差不多,这里仅仅对Imag Check Properties 窗口进行说明。其他的和Text 检查点类似,不再详细说明。3.4.6插入检查点当然 VuGen 还允许插入其他类型的检查点函数,比如web_reg_find、Web_global_verification等。而且这里也可以对搜索Text/Imag 值的参数化注:如果注:如果Web窗体中包含有窗体中包含有JavaScript 脚本,那么脚本,那么在在TreeView 视图中显示可能会有问题。解决这个问视图中显示可能会有问题。解决这个问题,可以设置一下。题,可以设置一下。3.5 Run-T
32、ime Setting打开 Run-Time Setting 窗口,可以通过菜单或者工具栏进行。操作后出现 Run-Time Setting 窗口,打开“General”标签页3.5 Run-Time SettingRun logics 迭代次数,Insert Block (可以把好几个action放在一个Block里面)3.5 Run-Time SettingPacing迭代的设置,设置以一种怎么样的方式开始下一次反复。3.5 Run-Time SettingLog 日志的设置,设置成是否启动。以及日志级别3.5 Run-Time SettingThink Time脚本中思考时间设置。3.5
33、 Run-Time Settingmsicellaneous这个里面,线程还是进程。出现错误后的处理方式,主要配置其他运行时候的设置3.5 Run-Time Settingspeed slimulation用来模拟网速3.5 Run-Time Setting切换到“Preferences ”标签页,这里仅仅对两个经常需要改动的选项进行说明。 3.5 Run-Time Setting“ContentCheck”标签。这里的设置是为了让VuGen 检测何种页面为错误页面3.6单机运行测试脚本运行脚本可以通过菜单或者工具栏来操作。执行“运行”命令后,VuGen 先编译脚本,检查是否有语法等错误。如果有错误,VuGen将会提示错误。双击错误提示,VuGen 能够定位到出现错误的那一行。为了验证脚本的正确性,我们还可以调试脚本,比如在脚本中加断点等,操作和在VC 中完全一样。3.6 单机运行测试脚本3.7 其它功能压缩脚本文件压缩脚本文件3.7 其它功能tools 菜单菜单THANK YOU