LoadRunner使用记录

基本术语

  • 性能测试——通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。
  • 负载测试和压力测试都属于性能测试,两者可以结合进行。
  • 负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。
  • 压力测试是通过确定一个系统的瓶颈或者不能接受的性能点,来获得系统能提供的最大服务级别的测试。例如:测试一个 Web 站点在大量的负荷下,何时系统的响应会退化或失败。
  • 衡量一个软件系统性能的常见指标有:
    • 1、响应时间(Response time)

      • 用户感受软件系统为其服务所耗费的时间,对网站系统来说,响应时间就是从点击一个页面计时开始,到这个页面完全在浏览器里展现计时结束的这一段时间间隔
      • 响应时间=客户端响应时间+服务器端响应时间+网络响应时间
        • (1)、客户端响应时间——构建请求和展现交易结果所耗费的时间;
        • (2)、服务器端响应时间——完成交易请求执行的时间
        • (3)、网络响应时间——网络硬件传输交易请求和交易结果所耗费的时间
    • 2、吞吐量(Throughput)

      • 对软件系统来说,“吞”进去的是请求,“吐”出来的是结果,而吞吐量反应的就是软件系统的“饭量”,也就是系统的处理能力,具体来说,就是软件系统在每单位时间内能处理多少个事务/请求/单位数据等。
    • 3、资源使用率(Resource utilization)

      • 常用的资源有,CPU占用率,内存使用率
    • 4、点击数(Hits per second)

      • 衡量Web Server处理能力的一个很有用的指标。需要明确的是:点击数不是我们通常理解的用户鼠标点击数,而是按照客户端向Web Server发起了多少Http请求计算的,一次鼠标可能触发多个http请求,这需要结合具体的Web系统实现来计算。
    • 5、并发用户数( Concurrent users)

      • 并发用户数用来度量服务器并发容量和同步协调能力。
      • 凡是用户有关资源和时间的要求都可以被视作性能指标,都可以作为软件的度量,而性能测试就是为了验证这些性能指标是否被满足。
    • 例如:

      • 系统登陆功能支持五百用户并发,登陆响应时间不超过30秒。
        • 我们就可以确定性能测试指标:
          • 并发用户数:500
          • 响应时间:<30秒

LoadRunner的使用

  • 1、LoadRunner组件
  • 2、LoadRunner术语
  • 3、负载测试阶段

创建负载测试

  • Controller 是中央控制台,用来创建、管理和监控测试。使用Controller 来运行模拟实际用户操作的示例脚本,并通过让一定数量的 Vuser 同时执行这些操作,在系统上产生负载。

创建Vuser脚本

  • 1、打开 HP LoadRunner 窗口。 选择开始 > 所有程序 > HP LoadRunner > LoadRunner。这时将打开 HP LoadRunner 11.00
  • 2、点击“Create/Edit Scripts”,进入“Virtual User Generator”,点击新增脚本按钮
  • 3、在New Virtual User窗口中,选择协议,我们用到的“Web(HTTP/HTML)”协议,点击“Create”进入下一步操作
  • 4、开始录制脚本,
    • 1)、在“URL Address”处输入要访问的网站地址:http://www199.caissa.com.cn/travelist/freeline.html
    • 2)、点击“Options”,选择录制方式
      • LR录制脚本时录制方式的选择,要注意以下几点:
        • 1.基于浏览器的应用,推荐用HTML-based script方式录制;
        • 2.不是基于浏览器的应用,推荐用URL-based方式录制;
        • 3.如果基于浏览器的应用程序中包含Javascript,并且该脚本向服务器产生了请求,比如DataGrid分页按钮等,就要使用URL-based方式录制;
        • 4.基于浏览器的应用程序中使用了HTTPS安全协议,也要使用URL-based 方式录制。
    • 3)、选择将脚本录制到哪个函数中:
      • vuser_init:一般存放打开测试网站的首页;登录系统的操作;
      • Action:一些操作事务 ;
      • vuser_end:注销登录。
    • 以并发访问详情页为例
      • 将打开自由行页签的操作放到vuser_init中
      • 将访问详情页的操作放到Action中
      • 在Action中,访问详情页之前添加事务
      • 在事务之前添加集合点

LoadRunner脚本优化

一,设置事务

  • (1)事务的作用:LoadRunner 运行到该事务的开始点时,LoadRunner 就会开始计时,直到运行到该事务的结束点,计时结束。这个事务的运行时间在LoadRunner的运行结果中会有反映。通俗的讲LoadRunner中的事务就是一个计时标识,LoadRunner在运行过程中一旦发现事务的开始标识,就开始计时,一旦发现事务的结束表示,则计时结束,这个过程中得到的时间即为一个事务时间。通常事务时间所反映的是一个操作过程的响应时间。
  • (2)为什么使用事务?
    • 1、事务是 LoadRunner 度量系统性能指标的唯一手段;(也可以通过LoadRunner编程实现,但不如LoadRunner中的事务用的简单而且方便)
    • 2、事务能够用于度量高风险业务流程的性能指标;
    • 3、事务能够度量在一组操作中每一步的性能指标;
    • 4、通过事务计时实现了不同压力负载下的性能指标对比;
    • 5、通过事务计时可以帮助定位性能瓶颈;
  • 3)如何使用事务?
    • 方法一:脚本生成后,手动插入事务;方法:在LoadRunner脚本中点击鼠标:右键,选择“Insert”→“Start Transaction”弹出一个对话框,输入一个事务名字(注:事务名字可以为中文、可以为英文,也可以中英文混合,但推荐的做法是起一个容易理解的名称,例如想知道登录所花费的时间,则插入事务可以命名为login或登录);“Start Transaction”插入完成后,还需要插入一个“End Transaction”,用以标识事务结束;注:Start Transaction和End Transaction需要成对出现,如果仅插入Start Transaction则脚本编译会提示错误;此外,还可以通过LoadRunner vugen中的“Insert”菜单插入Start Transaction和End Transaction;
    • 方法二:在脚本录制过程中插入Start Transaction和End Transaction;在脚本录制过程中,通过录制工具条上的Start Transaction和End Transaction图标插入事务,如下图所示:
    • 方法三:通过Run-time Settings 中的Automatic Transactions自动生成事务,如下图所示:
    • 注意:
      • 事务之间可以嵌套使用,相互之间没有影响,事务计时仅仅以事务名称为标识;
      • “开始事务”和“结束事务”标记是成对出现的;
      • 事务名必须以字母或数字开始,可以包含字 母、数字或者下列字符:!、$、%、&、'、-、[、^、_、`、<、>、{、}、| 或 ~。 请勿使用句号 (.)。

二、设置集合点

  • (1)集合点的含义:
    • 当通过controller虚拟多个用户执行该脚本时。用户的启动或运行步骤不一定都是同步的。集合点是在脚本的某处设置一个标记。当有虚拟用户运行到这个标记处时,停下等待,直到所有的用户都达到这个标记处时,再一同进行下面的步骤,这样能够用最大的用户并发去做下面的操作,就像集合再前进一样。集合点之名由此而得。集合点主要用于对关键步骤的加压。
  • (2)插入集合点的目的
    • 通过设置多个虚拟用户等待到一个点,同时触发一个事务,以达到模拟真实环境下同时多个用户操作,同时模拟负载,实现性能测试的最终目的。插入集合点主要是为了衡量在加重负载的情况下服务器的性能情况,从而找到性能瓶颈。
  • 例如:假如客户的需求中,要求系统能够承受2000人同时提交订单,在LoudRunner中通过在提交订单操作前添加集合点,当虚拟用户运行到提交订单的集合点时,LoudRunner就会检查同时有多少用户运行到集合点,如果我们设定脚本运行的虚拟用户数为2000,等这2000虚拟用户都运行到集合点后,触发同时进行提交订单的操作,从而能够测试系统对于这2000个用户提交订单的响应情况,依此来看系统是否满足客户的该点需求。
  • (3)集合点的插入位置
    • 集合点一般是跟事务结合使用的,不要把集合点设置到事务里面,因为那样的话脚本等待的时间都计算在事务的时间内,进行压力测试的时候查看响应时间就会有一定的偏差。
  • (4)集合点插入方法
    • 方法一,录制时,在需要并发操作的事务前直接点击插入集合的按钮;
    • 方法二,在录制的脚本中,在并发操作的事务前插入集合点。步骤:点击右键>Insert>Rendezvous,输入集合名称,脚本中出现此集合点,即添加集合点成功。菜单栏的Insert中也可以添加集合点。
  • 注意
    • lr_rendezvous集合点函数;
    • 集合点只能插入到Action部分,vuser_initvuser_end中不能插入集合点。

三、设置检查点

  • LR中检查点有两种:图片和文字。这两种检查点可用以下三个函数实现:web_find()web_reg_find()web_image_check()
  • 1.web_find()函数
    • 函数作用:在页面中查找相应的内容
    • 参数举例:
      • web_find("web_find","RighOf=a","LeftOf=b","What=name",LAST);
    • 参数解释:"web_find"定义该查找函数的名称;“LeftOf”和“RighOf=”用来定义查找字符的左右边界;“What=”定义查找内容。
    • 例如:上述参数举例中的意思就是在页面中查找左边界为b,右边界为a,内容为name的信息
    • 函数用法:该函数是在查找页面中的内容,所以要放在要查找的内容的后面。
    • 注意事项:要在Vuser->Run-Tme Settings->Preferences中更改下设置,勾选Enable Image and text check ,系统默认是不勾选该选项的。该函数只能在基于HTML模式录制的脚本中进行查找。
  • 2.web_reg_find()函数
    • 函数作用:在缓存或代码中查找相应的内容
    • 参数举例:web_reg_find("Search=Body","SaveCount=ddd","Test=aaa",LAST);
    • 参数解释: Search用来定义查找范围,SaveCount定义查找计数变量名称,该参数可以记录在缓存中查找内容出现的次数,可以使用该值来判断要查找的内容是否被找到
    • 例如上述参数举例中的意思就是Body中查找内容为aaa的信息,并将出现次数记录在变量ddd中。
    • 函数用法:该函数是在缓存中查找相应的内容,所以要放在查找内容之前。
    • 注:在录制过程中添加的检查点,用到的函数是web_reg_find(),且参数只有“Text=”
  • 3.web_image_check()函数
    • 函数作用:在页面中查找一个具体的图片。
    • 参数说明:web_image_check("web_image_check","Alt=","Src=",LAST);
    • 参数解释:“Alt”和“Src”的值直接取该图片在网页源代码中相应参数的值。
    • 函数用法:该函数是在缓存中查找相应的内容,所以要放在查找内容之前。
    • 注意事项:使用该函数时,要在Vuser->Run-Tme Settings中勾选Enable Image and text check,具体操作请看web_find()中的注意事项。
    • 例如:Action的功能是在登录页面输入用户名和密码点击登录;web_reg_find方法:在缓存中查找文本“欢迎您”,将出现次数记录在变量"欢迎您_Count"中;web_image_check在缓存中查找图片;
  • 4.atoi()函数的作用是将一个ASCII字符串转换为整型;lr_eval_string()函数作用是取得参数值

四、参数化

  • 例如:以LR自带实例Web Tours的登陆为例,截取一小段代码,如下:
    • 红框内容是用户名;
    • 绿框内容是密码;
  • 参数化的方法:
    • 方法一,选中要参数化的内容,右键---【Replace with a parameter】
    • 方法二,菜单【insert】----【new Parameter…】
    • 方法三,菜单【Vuser】->【Parameter list】
  • 参数化的方式:
    • 1、 编辑数据
      • 点击Create Table 会出现表格,在表格,再次点击Edit with Notepad ,然后会打开一个记事本,我们可以对记事本进行添加数据

    • 2、 添加txt数据文件
      • 点击File输入框后面的“Browse..”按钮,找到本地的txt数据文件,进行添加就可以了。需要将txt文件的扩展名改为dat
      • 需要注意的是,文件里面的数据不要乱写,每条数据一行,不然会读取有误。
    • 3、数据库添加数据
      • 点击Date Wizard 打开连接数据库向导。
    • 4、参数化之间的关联
      • 用户名和密码需要一一对应,才能保证脚本正常运行。

      • 假设,我们已经对用户名已经进行了参数化,参数名为【username】,下面设置密码参数化与用户名关联。

      • 点击“Properites…”会打开编辑密码参数化窗口。在File列表框中,选择刚才保存用户名信息的文件"username.dat"

      • 点击“Add Column…”,添加列,用于放置密码。

      • 点击“Edit with Notepad”再次编辑参数化数据文件,使用户名密码建立一一对应关系。

      • 调试脚本,看看参数化的用户名是否被使用,在用户登录结束后,使用下面的语句输出

          lr_log_message("用户名是: %s",lr_eval_string("{username}"));
        
    • 5、数据分配
      • Select next row【选择下一行】:
        • 顺序(Sequential):按照参数化的数据顺序,一个一个的来取。
        • 随机(Random):参数化中的数据,每次随机的从中抽取数据。
        • 唯一(Unique):为每个虚拟用户分配一条唯一的数据

五、定义场景

  • 创建场景:进入Tools->Create Controller Scenario
    • 1)选择虚拟用户数量
    • 2)设计场景的执行策略 Global Schedule:
    • 设置集合点:菜单Scenario->Rendezvous...
    • 集合策略:
      • 第一项:表示当所有用户数的X%到达集合点时,开始释放等待的用户并继续执行场景。
      • 第二项:表示当前正在运行用户数的X%到达集合点时,开始释放等待的用户并继续执行场景。
      • 第三项:表示当X个用户到达集合点时,开始释放等待的用户并继续执行场景。 其中还有一项Timeout between Vusers,就30秒来说,当第一个用户到达集合点后,再等待30秒,如果在30秒内到达的用户数达到指定的数量,就开始继续执行场景。如果在30秒内还没有达到指定的用户数量,就不再等待,开始释放等待的用户并继续执行场景。

六、执行场景

  • 执行场景之前需要配置服务器的监听参数;
    • 以Windows服务器为例:
    • 1、点击Windows Resources框,右键->选择Add Measurements...
    • 2、点击Add 按钮,在Name框中,输入服务器的IP地址,选择服务器的系统类型后,点击OK按钮,在Resource Measurements框中点击Add添加按钮,选择监听参数,之后点击ok,就可以运行场景。
    • 3、配置服务器端
      • 1)开启服务器端如下两个服务,以win7为例,控制面板-管理工具-服务
      • 2)本地安全策略,以Win7为例:在运行中输入secpol.msc
      • 3)在客户端进行测试,在“运行”栏中输入服务器的ip地址,后面跟上C$,表示服务器C盘下的系统资源目录,如:“\192.168.96.135\C$”,看看是否可以访问服务器C盘目录,通常情况下可能需要输入用户名和密码,填充服务器端的账户和密码就可以访问
      • 4)配置成功后,LR的Windows Resources框中显示服务器端的资源使用情况

七、测试结果分析

  • 2-5-10原则:简单说,就是当用户能够在2秒以内得到响应时,会感觉系统的响应很快;当用户在2-5秒之间得到响应时,会感觉系统的响应速度还可以;当用户在5-10秒以内得到响应时,会感觉系统的响应速度很慢,但是还可以接受;而当用户在超过10秒后仍然无法得到响应时,会感觉系统糟透了,或者认为系统已经失去响应,而选择离开这个Web站点,或者发起第二次请求
  • 服务器资源监控指标:
    • 1、CPU利用率(% Processor Time):指处理器执行非闲置线程时间的百分比。根据应用系统情况,在80%±5%范围内波动为宜。过低,则服务器CPU利用率不高;过高,则CPU可能成为系统的处理瓶颈。
    • 2、Available Bytes:显示出当前空闲的物理内存总量,它等于分配给待机(缓存的)、空闲和零分页列表内存的总和。当这个数值变小时,Windows开始频繁地调用磁盘页面文件。如果这个数值很小,例如小于5 MB,系统会将大部分时间消耗在操作页面文件上。一般要保留10%的可用内存。最低不能<4M,此值过小可能是内存不足或内存泄漏。
    • 3、% Disk Time:指所选磁盘驱动器忙于为读或写入请求提供服务所用的时间的百分比。正常值<10,此值过大表示耗费太多时间来访问磁盘,可考虑增加内存、更换更快的硬盘、优化读写数据的算法。若数值持续超过80 (此时处理器及网络连接并没有饱和),则可能是内存泄漏。
  • 分析实例:
    • 1)Action.c(16): Error -27492: "HttpSendRequest" failed, Windows error code=12030 (connection aborted) and retry limit (0) exceeded for URL="http://80.66.40.125/detail/188703.html"
      • 分析原因:
        • A,可能每次都新建连接,超出了db链接数
    • 2)Error: Page download timeout (120 seconds) has expired
      • 分析:可能是以下原因造成
        • A、应用服务参数设置太大导致服务器的瓶颈
        • B、页面中图片太多
        • C、在程序处理表的时候检查字段太大多
posted @ 2020-01-04 20:47  军子~  阅读(500)  评论(0编辑  收藏  举报