性能测试之Loadrunner(一)

一、性能测试理论

(一)性能测试的概念及其分类

 性能测试:主要是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。

 性能测试的分类:

(1)性能测试(狭义)

  方法:通过模拟生产运行的业务压力量和使用场景组合,测试系统的性能是否满足生产性能的要求

  目的:验证系统是否有系统宣称具有的能力

(2)负载测试

  方法:通过在被测系统上不断加压,直到性能指标达到极限

  目的:找到系统处理能力的极限

(3)压力测试(强度测试)

   方法:测试系统在一定饱和状态下,系统能够处理的会话能力,以及系统是否会出现错误

   目的:检查系统处于压力性能下时,应用的表现

(4)并发测试

方法:通过模拟用户并发访问,测试多用户并发访问同一个应用、模块或者数据记录时是否存在死锁或者其他性能问题

目的:发现系统中可能隐藏的并发访问时的问题

(5)配置测试

方法:通过对被测系统的软硬件环境的调整,了解各种不同对系统的性能影响的程度,从而找到系统各项资源分配的自由分配原则

目的:了解各种不同的因素对系统性能影响的程度

(6)可靠性测试

方法:在给系统加载一定业务压力的情况下,使系统运行一段时间,以此检测系统是否稳定

目的:验证系统是否支持长期稳定的运行

(二)性能测试流程

在测试计划阶段(例如制定压力/负载测试计划):

(1)明确分析被测对象

  • 预计会有多少用户会连到系统
  • 客户机的配置情况(CPU、内存、操作系统、软件工具等)
  • 服务器会使用什么类型的数据库以及服务器的配置情况
  • 客户机和服务器之间如何进行通讯
  • 还有什么组建会影响Response Time指标(如Modem等)

(2)确定测试目标

  • 系统完成某个事务所花费的时间
  • 明确何种配置能够使系统性能最优
  • 系统能够无差错运行的最大时间

(三)性能测试工具:主要有Loadrunner,jmeter

测试工具主要是由四部分组成:脚本生成器、压力生成器、结果分析器、压力控制器

性能测试工具的原理:Loadrunner是通过代理的形式,截获客户端和服务端之间的数据请求,当客户端向服务器端发送请求时,会被Loadrunner(代理服务器)截获数据流后,充当服务器为客户端发送响应。再由代理服务器向服务器发送请求。

(四)Loadrunner的学习

1、Loadrunner的组件

  • Virtual User Generator(VUG)录制最终用户业务流程,并创建性能测试脚本(VUG录制的并不是操作,而是底层协议的通讯情况)

       首先要创建自动测试脚本,测试脚本的录制和维护是负载测试的重要步骤之一,成千上万个虚拟的用户正是通过执行测试脚本来对系统进行施压的。VUG可以监视并记录客户端和服务器之间的通话,让虚拟用户模拟实际的业务流程,并将其转化为特定的测试脚本语言

  • Controller组织、驱动、管理并监控负载测试

     包括创建,监控,运行三个操作,进行实时监控场景,可监控的信息包括:系统资源、网络设备、Web服务器和数据库等交易数据。

  • Analysis用于查看、剖析和比较性能结果

2、Loadrunner的功能

(1)VUG能够生成虚拟用户,以虚拟用户的方式模拟真实的用户操作行为,它先记下业务流程(比如怎么下单,进行机票预订等),然后转化为测试脚本,利用虚拟用户,在Windows,Linux等机器上同时产生成千上万的用户访问。因此Loadrunner能极大地减少负载测试所需的硬件和人力资源

(2)创建真实的负载,使用controller组织起用户的测试方案

(3)定位性能问题,实时显示性能参数变化评估系统组件的运行性能

(4)分析结果以精确定位问题所在

(5)重复测试保证系统发布的高性能

3、Loadrunner测试步骤

(1)使用VUGen创建脚本,脚本可以是手写的也可以是录制的,用来模拟用户的操作,向服务器端发送请求报文

录制选项

进行录制选项的设置,主要是设置General的recording下的选项,选择哪种方式的录制,参考以下原则:

  • 基于浏览器的应用程序,推荐使用HTML-based Script
  • 基于非浏览器的应用程序,推荐使用URL-based Script
  • 基于浏览器的应用程序中使用了HTTPS安全协议,推荐使用URL-based Script

其次是设置HTTP Properties 下的Advanced选项勾选上Support charset

事务:为了衡量某个action的性能,需要在action的开始和结束位置插入这样一个范围,这就定义了一个transaction

在Loadrunner中,使用事务来度量系统的性能指标,度量在一组操作下的每一步的响应时间

关联:就是将脚本中某些固定不变的数据,转变成是选取自服务器所送的、动态的、每次都不一样的数据。服务器会动态的向客户端返回标识码(Session),因此我们要进行相关的关联操作。

(2)使用Controller创建测试场景,在场景里设置并发用户数量,设置加压模型

(3)使用Analysis分析测试结果

测试Web Tours的服务的性能测试:

        启动Web Tours服务(是Loadrunner自带的飞机系统订票网站)服务,可以实现用户的登录注册(1_log)、寻找航班(2_find)、预定航班(3_reserve)、支付操作(4_pay)、退出操作(5_exit),将每一个操作都看作是一个事务

(1)使用VUG进行录制脚本,录制性能测试脚本,回放脚本,进行调试脚本

          将整个订票的过程,划分为多个事务,分别测试每个事务的响应时间 ,预定一张票的操作完成后,当点击进行回放时,并没有按照预期增加到两张票,原因在于我们没有进行相关的关联。需要写关联函数,进行关联操作。需要替换脚本中所有的与该参数相关的

//name="outboundFlight" value="242;193;06/15/2016")
web_reg_save_param("outboundFlight",
                "LB=name=\"outboundFlight" value=\"",//左边部分
                "RB=\")"         //右边部分
                 LAST);

再进行depart city和arrive city的参数化设置:将各城市的名称写入.dat文件中,确保每次订票时随机的选择起始和到达的城市

关联函数写在操作的上面,判断函数写在操作的下面

判断函数:判断是否订票成功

if(strstr(lr_eval_string("{msg}","Thank you for booking through Web Tours")!=NULL))
{//查找在参数msg中有无Thank you...
        lr_end_transaction(“4_payment”,LR_PASS);//有的话以PASS作为标志,输出信息
        lr_output_message("订票成功,departCity:%s,arriveCity:%s",
                          lr_eval_string("{departCity}"),lr_eval_string("{arriveCity}"));
}
else
{
      lr_end_transaction("4_payment",LR_FAIL);//没有的话以Fail作为标志
       lr_output_message("xxx订票失败xxx")
}

将脚本中的登录事务放入vuser_init,将退出事务放入vuser_end中,这样登录和退出事务只进行一次,不管回放多少次脚本。

运行后进行脚本回放,可以看到生成了多张票,往返程目的地在不断地变化着,这样脚本就算是调试成功了。

(2)使用已经编辑好的脚本来录制场景

  • 手动测试场景

        将调试好的脚本进行add操作进行添加,进入Global Schedule框进行设置 (按场景设置用户数,当然也可也按用户组设置用户数)

        Initialise(可以设置每隔多长时间初始化多少个虚拟用户数)

        Start Vusers(设置每隔多长时间同时启动多少虚拟用户数)

       Duration(持续的时间,设置按时间结束,或迭代完就结束)

       Step Vusers(每隔多长时间停止多少虚拟用户数)

  • 面向目标的测试场景

     面向目标场景是一个闭环回馈的关系,首先要定义达到的目标,然后LoadRunner会自动基于这些目标创建场景,运行过程中,会不断的将结果与目标进行比较,以决定下一步该怎么走

场景创建完之后要先进行保存场景,在进行场景的设置(在Run Time中设置时间,表明该场景在达到目标场景以后,还会持续运行这么长的时间 )

Virtual Users目标类型:用来测试服务器对并发用户的处理能力,场景类型与手动测试场景类型相似

Hit per Second目标类型:测试每秒的点击数,同时设置最小和最大的虚拟用户数,当controller运行时会先从最小的虚拟用户数开始,自动的增长虚拟用户数

Transaction per Second目标类型:每秒处理的事务数

Transaction Response Time:每秒的响应事务数

Pages per Minute目标类型:每秒处理的页面数

(3)场景的执行

  • 场景控制

       对Tools下的option操作进行设置

  • 对虚拟用户组进行相关的操作

             

猜你喜欢

转载自blog.csdn.net/qq_40170007/article/details/87521240