1、序言 LoadRunner是MI(Mercury Interactive)公司出品的强大的自动化负载测试工具,它可以运用与不同的系统构架,预测系统行为和优化系统性能。它的工作原理就是通过对一次真实用户操作的捕获,模拟创建出大量的虚拟用户进行执行,从而达到负载的效果。 LoadRunner功能 1、LoadRunner可以模拟十分真实的负载。比如30个用户同时在一个网上,可能有10个 人正在登陆,10个人在搜索,其余10个人处于闲置状态,用LoadRunner可以轻松模拟 2、LoadRunner可以模拟大量持续的负载。比如10000个用户,持续做连接服务器动作,持续跑三天三夜
2、其实只要你的服务不坏掉,跑多长时间都可以 3、LoadRunner可以测试应用程序中所用到的数据库、Web服务器等的性能 4、LoadRunner可以通过添加性能计数器对要测试的程序内部进行监测,可以得到各部分的实时性能描述。比如用户的响应时间的实时曲线,内存的占用比例等 5、LoadRunner可以分解模拟用户操作的每个部分,从而找到错误产生的位置或者系统瓶颈。比如整个操作过程中只有一步的响应时间非常的大,那很可能系统的瓶颈就在这里 6、LoadRunner可以在进行重复测试。比如第一次测试出现问题,程序进行修改,第二次测试的时候可以保留和上次测试一模一样的负载情况
3、 7、LoadRunner与MI开发的另一产品TestDirector有接口,更加方便测试的计划与管理 8、LoadRunner还支持许多不同的协议,适合不同的系统构架,通过插件实现更加细微的监测。它还支持手工编程,产生完全由自己编写的用户操作过程,支持C、Java、VB、Javascript、Vbscript等多种语言多种形式。它还可以穿越防火墙来模拟远程用户的情况 主要组件 Virtual User Generator:脚本生成器(简称Vugen) Controller:场景控制器 Analysis:结果分析器
4、 性能、压力测试的大体流程和步骤 1 制定负载测试计划 2 开发测试脚本 Virtual User Generator 3 创建运行场景 Controller 4 运行测试 Controller 5 监视场景 Controller 6 分析测试结果 Analysis WEB压力测试例(B/S) l 介绍应用程序 例为B/S的订购机票的系统。登陆后出现如下首页 登陆用户名有ssn1…ssn10;密码为1111,点击login,登陆之后就得到如下界面 我们对进入首页和lo
5、gin的过程进行性能和压力测试,即在大量用户同时和长时间访问时,该应用程序进入首页和login的成功率、响应时间以及是否会使服务器崩溃等性能指标。 l 运用Virtual User Generator创建脚本 1、录制测试脚本 为了模拟大规模的负载,必须先获取一次真实用户的执行过程,这就需要用到Virtual User Generator来录制脚本。Virtual User Generator捕捉的是Client与Server之间的通信过程,可以理解为录制的是发送和接收请求的过程,而对于服务器如何处理以及用户在界面上的操作,Virtual User Generator并不关心。
6、 启动Virtual User Generator出现如下界面,新建一个脚本。 选择Web(http/html)协议。点击确定,进入新建脚本。 脚本分为vuser_init、Action和vuser_end三个部分 vuser_init:脚本中只有一个 vuser_end:脚本中只有一个 Action:脚本中有一至多个 本例中目前只有一个Action,既默认的Action1。Action是可以手工添加。Action1的部分起初基本为空。在该脚本模拟的一个用户中,vuser_init(进入)和vuser_end(推出)只执行一次,而Action部分可以执行多次(测
7、试的执行步骤)。 选中工具条上的录制按钮开始为Action1录制脚本 出现Start Recording的提示框。在URL中需要输入Web地址,如http://172.16.2.17/MercuryWebTours,在Record into Action中选中Action1。复选框表示是否点击OK后马上进入应用程序访问Web地址,选中复选框,然后点击[Options] 弹出对话框中。如果你的B/S系统是基于http协议的,选择HTML based script单选钮,如果是基于https协议的(即使用SSL安全通信),选择URL based script单选钮。 这里选
8、择HTML方式。另外[Browser]项也需设置运行所用的IE浏览器。设置完所有项后点击OK回到上图,然后再点击OK便在LoadRunner环境下弹出访问的网页 在弹出的访问页中开始录制,开始一次真实的用户操作以便LoadRunner录制整个过程 输入用户名和密码,点击login进入订票系统 点击sign off退出至首页 点击‘Virtual User Generator’工具栏上的停止按钮‘’结束录制,将返回录制的脚本界面 2、 完善测试脚本 脚本的视图有两种表现形式 Script View:实际录入的代码 Tree View:录制
9、的用户操作步骤 下图为Script View视图。从View菜单中选择Tree View视图 Tree View视图可以清楚的看到脚本的Action1分为三个操作步骤:进入首页、用户名密码登陆和从中退出。其中Think Time为网络延迟的时间,在虚拟多用户的时候可以不计。需要测试的是前两个步骤在多用户的情况下性能指标,首先是响应时间。为了测试响应时间,我们需要把这两个步骤填添为事务,因为在结果报告中可以自动生成事务的响应时间统计 下面就是Tree View视图中怎样在脚本中添加事务。右键点击要添加成事务的操作的 第一条语句,选择Insert Before。
10、弹出Add Step的对话框,选择Start Transaction。它就是事务的开始点,当脚本运行到这点时,计数器开始计算时间。然后点击OK。 如下图弹出Start Transaction对话框,需要输入事务的名字。注意:输入的事务名称最好和实际的操作相符,这样统计结果的时候可以很清楚的看到具体操作的响应时间, 点击OK。 下面添加事务的结束点。右键点击要添加成事务的操作的最后一条语句,计数器在这点停止计数,所以在结果中可以反映到事务的响应时间。选择Insert After后在弹出的Add Step的对话框中选中[End Transaction]点击OK。
11、系统自动搜索它前面没有匹配的最后一个事务开始点,默认的名称和那个开始点是一致的,不用改动。点击OK。 同样的道理在输入用户名密码登陆的那个步骤也可添加为事务。 性能测试需要知道大访问量的情况下操作成功和失败的次数,LoadRunner如何定义测试成功与失败: 1、在连接不到服务器的情况下,LoadRunner会自动把这样的操作归为失败 2、在可以连接到服务器,而由于压力过大,服务器返回的是错误的页面,LoadRunner认为 这是正确的 用户怎么样正确判断成功失败呢? 1、通过在脚本中添加检查点,如果登陆不上去,LoadRunner会自动报告连接失败。用户可 以认为
12、这是测试失败 2、如果输入的用户名、密码有错误或者不匹配返回出错的页面,或由于系统压力过大,即 使输入正确,也未必能够真正登陆,而返回错误页面。象这两种情况用户不好判断测试 成功还是失败。这种情况下需要添加检查点来判断用户是否成功登陆右键点击要检查的操作,选择Insert After,在弹出的对话框中选择Web Checks中的Text Check。点击OK。 附:Text检查点检查的是返回页面中的文本信息 Image检查点检查的是位图信息。 对于程序而言检查Text更加方便,所以用它做例 选中Text Check后弹出新的对话框,在Specification 的Sear
13、ch中输入要查找的文本信息。假如成功登陆会显示Welcome的字样,则将Welcome做为要检查的文本信息。 如果在返回页面中有多个地方都会出现Welcome,那么需要在下面写出它在哪个文本信息的前面或后面。此例子没有必要,所以不用添写。然后选择General选项。 General选项中。Step Name中添加一个描述检查的检查点名称,此例添入check_login。 点击确定按钮。 在进行压力测试的时候,需要模拟大量用户同时进行一步操作,这样才能测试系统是否会因此而崩溃。如果测试的事务中达不到并发的效果。可以在脚本中添加集合点。用户在到达集合点的地方进行等待,当达到
14、在场景中控制的数量的用户时,这些用户同时从集合点出发实现并发操作。 和刚才添加事务和检查点的地方一样,Add Step对话框选择Rendezvous,点击OK。 同样给集合点赋予一个有意义的名字,点击OK。 完成这些之后,回到Text View视图可以清楚的看到我们添加的事务、检查点 和集合点的语句 用LoadRunner虚拟的大量同名用户运行的脚本就会产生一些问题。比如应用程序不可以有同样的用户名一起登陆,这样的话大量虚拟用户可能只被接受了一个,其他的都将失败,对于性能和压力测试就没有任何的意义。这时可以把用户需要运行的不同数据(如用户名)参数化。
15、在这个例子中,因为密码都是一样的,所以需要参数化的地方只有用户名 如图,选中Value=ssn中的ssn,点击右键,选择Replace with a parameter。 在Parameter name中填写参数的名字;Paramerer type中填写参数的类型。 上图填写的参数名称为name,类型为File。 File类型为文本类型,它和Random Number(随机数类型)是常用的类型。点击OK。 弹出Parameter properties对话框,点击Create建立name.dat文件。 Parameter properties对话框中点击
16、Edit,对name.dat文件进行编辑 如图name.dat文件以记事本的形式打开,每一行都为输入的用户名。 name.dat中添加十个用户名,然后保存并退出文件 Parameter properties对话框中把Advance row each iteration选中,表示没次循环都向下走一行。Select next row中有三个选项 Sequential:按照顺序一行行的读取。每一个虚拟用户都会按照相同的顺序读取。 Random:在每次循环里随机的读取一个,但是在循环中一直保持不变。 Unique:唯一的数。注意:使用该类型必须注意数据表有多的数。比
17、如20个用户循环5次, 那么编号为1的虚拟用户取前5个数,编号为2的虚拟用户取6—10的数,依次类 推,这样数据表中至少要有100个数据,否则就会返回错误。 点击Close回到Text View视图 Text View视图中可以看到原来的常量被大括号包含的参数名代替了 接下来在Vuser菜单中设置脚本的Run—Time Settings 弹出的Run—Time Settings对话框中。Preferences选项需要把Enable Image and Text check选中,这样在运行脚本的时候才会对所添加的检查点进行检查。 Run—Time
18、Settings对话框中。Pacing选项可以设置Action的循环次数。 循环次数在Number of iteratio中设置 Run—Time Settings对话框中。General选项的Automatic Transaction中有两个复选框 Define each action as a transaction:把每个action都做为一个事务,包括vuser_init和vuser_end。 Define each step as a transaction:把每一个步骤都做为一个事务。 在这个例子中,需要测试部分已经定义为事务了,所以两个都不选择,否则在看运行结果
19、的时候会很混乱。点击OK。 下面设置Tools菜单中的General Options。 弹出General Options对话框中。Display选项的复选框Show browser during replay选中,这样在运行脚本的时候就看到我们实际的操作过程。点击OK回到Text View视图 Text View视图中保存脚本 点击工具栏中运行的按钮开始执行脚本,同时把登陆页面的过程回放一遍。如果通过,就会出现如下的Pass界面。这样创建脚本的工作就完成了 l 运用Controller创建场景。 Virtual User Generator创建
20、了运行脚本,现在需要用Contoller来建立场景,控制模拟大量的虚拟。 启动Contoller,会自动弹出New Scenario的对话框,也可以从新建中得到此对话框。从Available Scripts中选择刚才我们创建的脚本,点击Add加载。 选中Manual Scenario单选钮,表示手工创建场景模式,它相对于Goal-Oriented Scenario更灵活。在单选钮Manual Scenario模式下可选择Use the Percentage,这样在设置的时候会用 总数的百分比来代替具体数目。此例由于数据较小,就没有采用。点击OK 在Scenario Groups中可
21、以看到加载的脚本,数量可以更改,但是不能超过你的License的限制。在Load Generator中可以看到,现在模拟的10个用户是都是通过本机器来连接到Web服务器的,那么同时再模拟从别的机器上访问Web服务器的情况怎么办?这就需要加载Generator来解决。点击右方Generators按钮 弹出Load Generators对话框。Name中准备填写你要运行虚拟用户的IP地址。 注意:这个IP的机器必须是在Typical Installation、Load Generator或者Custom Installation(必须至少包括Load Generator的组件)的模式下
22、安装了LoadRunner 启动此IP机器的Agent Process Load Generators对话框中,在Name格输入IP后Statue中的状态为Down,此时点击右方的Connect按钮 Statue中的状态如果为Ready,就是表示已经连接了。点击close回到Contoller起初窗口 Contoller起初窗口中Group Name列框的第二行点击右键,加载脚本。可以加载其他的脚本,这样就可以模拟出不同的登陆状态。这里为了说明,加载一个login脚本 Contoller起初窗口中Load Generators列框值换成刚才填加的IP地
23、址 Contoller起初窗口中Quantity列框值改为20,并点击Edit Schedule按钮 弹出Schedule Builder对话框,在Ramp Up中有两个单选钮:第一个是所有用户同时启动,第二个是可以设置每隔多长时间启动几个。可以按照实际情况自己进行配置。下面的图象是每隔15秒启动2个 Schedule Builder对话框中。Duration选项有三个单选钮:第一个表示所有虚拟用户只运行一遍脚本,然后场景就停止;第二个表示加载完成所有的用户后,场景继续运行的时间;第三个表示场景一直运行不停止。下面图象中是持续5分钟 Schedule B
24、uilder对话框中。Ramp Down选项中有两个单选钮:第一个表示立即停止,第二个表示每个多长时间停止几个用户,直到全部停止。下面图象中表示立即停止,点击OK Contoller起初窗口中设置集合点。(就是对脚本中的集合点进行管理)。 选择Scenario中的Rendezvous 弹出Rendezvous Information对话框。在两个脚本中都有集合点,可以分别选择进行设置。选中check_login集合点,点击Policy。 弹出Policy对话框。可以在Release when单选钮中填写有多少个用户到达集合点再同时执行,没有到达指定的数量,则到达
25、的用户等待。可以在Time out中设置最长的等待时间,如果到了那个时间还没有到达指定的数量,则不再等待 Contoller起初窗口中设置结果的保存路径。选择Results中Results Settings 弹出Set Results Directory对话框。[Directory]建立结果路径,而且每次运行场景的时候都要重新设定。点击OK Contoller起初窗口中切换到Run视图,点击Start Scenario,运行场景 下图为运行中的场景在运行过程中可以通过窗口监视虚拟用户运行的大体情况 下图为运行结束后的场景。从图中可以填写
26、性能报告的各种指标。 总数为20次,成功19次,成功率为95%,login事务的平均响应时间为1.452,open_web的平均响应时间为50.083。就此,创建场景的部分介绍完毕 l 用Analysis分析运行结果 用Analysis对运行后的结果进行分析,可以找响应时间比较迟缓的步骤,从而得到应用程序或者Web、数据库的瓶颈所在。可是这需要有很丰富的开发经验,所以在这里只能对Analysis所产生的一些数据进行说明,但是还达不到分析应用程序从而提高系统性能的地步。 从开始—>程序中启动Analysis,打开一个运行结果,文件所在目录:Contoller中Set Re
27、sults Directory对话框[Directory]项设置 目录中找到运行结果的LoadRunner Result files(*.lrr)文件,因为它还不是Analysis的文件,需要用Analysis进行生成 打开文件 Analysis生成了自己的文件。如图在Summary Report中可以看到运行过程中的总体数据 在Running Vusers选项中可以看到每个时间点正在运行的虚拟用户 在Hits per Second选项中可以看到每个时间点的页面点击率 Throughput选项 Transaction Summary选项 Average Transaction Response Time选项






