前言Loadrunner是一门测试软件系统性能的工具,所谓软件系统的性能,是指软件处理事务的时间,消耗的系统资源,它和软件的实现算法,服务器的性能、设置有关。使用loadrunner,通过大用户量的并发操作,监测系统的响应时间,IO、内存、CPU使用情况来评定软件系统的性能指标。使用loadrunner,前期的准备和后期的分析是重点。前期的准备包括基础数据的准备和脚本的编制。基础数据的准备是指制造和导入大批量数据(上千万,甚至过亿条记录),用以增加数据库的压力和测试的真实性。脚本是指用户的操作定义,通过执行脚本,来模拟用户对系统的操作。后期的分析是指通过分析测试数据,分析系统的瓶颈所在,这需要扎实的操作系统的知识和有价值的分析经验,在这里省去不表。基础数据的生成,需要借助专门的软件,提供每张表的模版数据(也就是一条真实的记录),生成相似的批量数据(也就是一个循环的事),保存到.unl文件中,再用shell的批处理命令导入数据库就行了。在这里,我以一个web应用程序的压力测试为例,简单介绍loadrunner的基础知识。第一部分:virtualusergenerator的使用virtualusergenerator的主要作用是编制脚本,它可以自动生成脚本,我们要做的主要工作是对脚本的调试与修改。启动virtualusergenerator,进入如下界面。点击file菜单的new选项或者工具栏第一个按钮,进入如下界面:在这里,选择应用程序可能使用到的协议。“newsingleprotocolscript”选择单一协议,“newmultipleprotocolscript”可以选择多个协议,中间的列表是能够选择的协议,右边的列表是选中的协议,“newscriptrecentpropocols”是近期内使用过的协议。在不确定的你程序只使用到一个协议的情况下,请选择“newmultiplepropocolscript”来选择你将要使用到的协议。我们测试的是web应用程序,将要使用到的是“Web(HTTP/HTML)协议”,点击确定,进入如下界面。在这里,指定要录制脚本的程序的相关信息。Applicationtype指定应用程序的类型。(internetapplications:web应用程序,win32applications:windows应用程序)programtorecord:指定应用程序的启动程序,web应用一般为IE或其他浏览器,windows应用即要测试的程序的路径。Workingdirectory:测试活动的工作目录。Web应用为loadrunner的bin文件目录,windows应用为程序所在的目录。URLaddress:web应用特有,应用程序的路径。Programarguments:windows特有,指定使用应用程序打开的文件的路径。(如测试tc.2.0,打开E:hello.c)recordtheapplicationstartup复选框指定录制脚本的开始,选中在启动时就开始生成脚本,不选中则弹出如下信息框,在想开始录制脚本的地方,点击record,以前的操作将不生成脚本,以后的操作将生成脚本。Options按钮将弹出一个对话框,进行脚本录制的高级设置,这一块涉及的内容多,范围广,不做说明,一般应用,适用默认设置即可。设置以上信息以后,点击‘OK’按钮,loadrunner自动启动指定程序,你对指定程序的操作将全部生成脚本,包括你输入的各种数据,脚本以c语言语法录制。在录制过程中,将有如下的工具栏‘悬浮’在应用程序上,你可以将它拖回loadrunner工具栏,也可以让它一直悬浮在应用程序上。工具栏的各个按钮,从左到右,分别是:开始录制,暂停录制,停止录制,运行,编译,操作名列表,添加操作,添加检查点,添加事务,结束事务,添加聚集点,添加注释,编辑录制设置。其中,点击停止录制按钮,停止对应用程序的录制工作,生成之前操作的脚本;运行,编译按钮在录制过程中不可用,只有录制完成以后才可用。操作其实就是一个函数,操作名就是函数名,记录你的一个操作过程,它初始有三个Vuser_init,vuser_end和action,前两个是唯一的,一个脚本中只有一个,一般vuser_init存放加载和登陆操作,vuser_end存放退出操作,(一般情况如此,也可以将登陆和退出放在其他函数中。)action可以通过添加操作按钮添加,可以随意命名(符合c的标识符命名规则就行),在脚本运行过程中,vuser_init和vuser_end,每个虚拟用户只运行一次,所有的action可以反复执行。检查点,事务,聚集点,注释是脚本包含的单位.检查点是指一个文本图片,在录制过程中,你可以指定特殊的文本或图片为检查点,loadrunner将生成相应的关联数据,在运行过程中,将检查是否加载了指定的文本或图片.事务是一个完整的活动,插入事务是为了检查某一个活动的响应时间,比如查询客户信息,比如计算保费.聚集点是为了让所有用户同时执行某一操作,以产生对服务器的压力,比如保存,登陆.注释是一些情况说明文字.编辑录制设置是配置录制信息,和界面三的option按钮功能一样,在这不做过多说明.如上操作,就完成了脚本录制工作,它是脚本的基础.录制的脚本有两种视图方式,脚本视图和树视图,如下:脚本视图左边列出脚本中的操作名,这里的操作,是脚本录制过程中通过‘添加操作’按钮添加的各种操作,对应到右边的代码,就是一个个函数的函数名,你可以右键单击,删除选中的操作,添加新操作,重命名操作等。脚本视图右边以c语言代码的方式记录了你对页面的操作,可以通过调用的函数名和函数参数查看你的操作和操作的页面。树视图直观清晰,左边列出你操作的页面名,右边列出页面内容。如果协议选择的时候选择的是多协议,脚本视图将生成相应的.h文件,将相应的函数包含进来,如果是单一协议,将在相应的操作函数定义之前包含。脚本录制是脚本生成的基础,要想脚本是有价值的,还要对脚本进行优化和调试。脚本优化主要有三点:调整Think-time,调整事务,参数化。Think-time是你录制脚本的时候,在一个操作之前的停留时间,系统会纪录你的Think-time如果超过三秒,就会纪录下来,think-time对系统的结果分析影响很大,所以一般设置的很小,能去掉的尽量去掉,但是有些是必须的,去掉系统会走不过去。事务是一个完整的活动,在可能会影响系统执行时间的地方设置事务(如登陆,查询数据库或其他复杂的算法),通过检测事务响应时间判断系统性能。事务里不要有think-time,否则会影响数据的真实性,也就影响性能分析结果。插入事务的方法很简单,在录制脚本过程中或在将光标停在想插入事务的脚本位置,点击工具栏中insertstarttransaction和insertendtransaction按钮,给事务命名,即可插入事务。参数化是指将脚本中那些在每次运行是需要改变的值变量化的过程。脚本录制过程中,你输入的数据会带到脚本中,如果不参数化,每次运行写入读出的都是同一数据,不能保证真实性,也影响测试结果。比如有以下脚本:web_submit_data(logonin.do,Action=:7601/claim/logonin.do,Method=POST,RecContentType=text/html,Referer=:7601/claim/index.jsp,Snapshot=t2.inf,Mode=HTML,ITEMDATA,Name=loginMessage,Value=,ENDITEM,Name=prpDuserUserCode,Value=1100003103,ENDITEM,Name=prpDuserPassword,Value=0000,ENDITEM,Name=prpDuserComCode,Value=11000031,ENDITEM,Name=imageField.x,Value=0,ENDITEM,Name=imageField.y,Value=0,ENDITEM,EXTRARES,Url=images/BgVisaTop.gif,Referer=:7601/claim/common/pub/Title.jsp,ENDITEM,Url=images/bgTitle2.gif,Referer=:7601/claim/common/pub/Title.jsp,ENDITEM,LAST);要对用户名1100003103,密码0000,登陆机构11000031参数化,分别选中这三个值,右键弹出菜单,选replacewithaparameter,弹出如下对话框Parametername中输入参数名,parametertype中选择参数类型,originalvalue中保存原始值。参数类型有:Datetime:时间型参数,可以选择输出格式RandomNumber:随机数,可以指定随机数的范围,选择输出格式UniqueNumber:一个唯一数,可以指定起始值和块的大小。这里的唯一,是指每个虚拟用户取唯一值,所以要指定块的大小。IterationNumber:当前反复数VuserID:当前虚拟用户的ID,在vusergenerator中为-1。GroupName:用脚本负载生成器的名称替换参数,负载生成器是虚拟用户在运行的计算机。LoadgeneratorName:用虚拟用户组名称替换参数,在vusergenerator中为None。File:将参数值保存到一个.dat文件中,运行时按指定的方式替换。UserDefineFunction:调用外部dll函数生成的数据。这九类参数也可以用一句话总结:某日(date/time)发现一个用户自定义的dll(userdefinefunction)文件(file),里面有一个序号(vuserid)、两个名字(groupname和loadgeneratorname),还有三个数字:迭代数(iterationnumber)、随机数(randomnumber)和唯一数(uniquenumber)。除vuserid、groupname、loadgeneratorname由运行时自动生成唯一值以外,其他的数据类型都可能有多个值选择,就需要配置选择参数,点击properties,进入配置对话框,不同的参数类型需要配置不同的参数设置,对话框也不一样,比较复杂的是file,以file为例,如下图:Filepath输入文件路径;Create创建文件;addcol在文件里添加一列;datawizard配置数据库链接属性,可以选择microsoftquerry和sql链接。Microsoftquerry没用过,sql链接通过ODBC的dsn链接数据库。指定链接属性和sql语句。点击creat创建链接属性。伺服器填数据库名,数据库路径由oracle指定。在parameterproperties对话框中,selectcolumn设置使用哪一列替换参数,可以用列名,也可以用列序号,对于多个参数的脚本文件,可以把参数值全部放在一个.dat文件中,不同参数指定相应的列;fileformat指定开始的行数和两列间的分隔符,可以从第一行开始,也可以从任意行开始,分隔符可以用逗号(comma)、空格(space)、tab键(tab),这由你的文件中列与列分隔符决定,一般用逗号。Selectnextrow指定如何查询下一个值,可以是顺序的(sequential)、随机的(random)、唯一的(unique)。如果是唯一的话,就有可能会超出现有的值的个数,在Whenoutofvalues中可以设置超出时的处理方式。可以中断(abortvuser)重新循环(continueinacyclicmanner)以最后一个值运行(continuewithlastval