首页 > 代码库 > 《性能测试诊断分析与优化》学习总结(二)
《性能测试诊断分析与优化》学习总结(二)
LR场景设计
在Controller中新建场景,可以选择手工场景(Manual Scenario)和 面向目标场景(Goal-Oriented Scenario)两种方式创建场景。
其实,在我们真实的项目中,选择手工场景比较多,所以下面是通过学习这本书的一些心得:
1、创建手工场景
当录制完脚本并完善好脚本后,下一个步骤就是设计运行场景,而整个的场景调度设计是非常关键的,创建可精确模拟用户压力行为的手工场景的关键点在于指定压力和时间。如指定场景运行的时间长度,多少虚拟用户(并发)参与这次测试执行,这些虚拟用户是如何启动与停止运行的,整个场景的设计是否合理,将会影响测试结果分析。
另外,在指定这些虚拟用户执行多长时间时,需要注意的是,如果在指定的时间内,某个虚拟用户完成了脚本的迭代执行之后,仍然有剩余时间,则该虚拟用户会继续执行脚本,直到场景设置的运行时间结束为止,即场景运行的持续时间会覆盖脚本的迭代时间。如果希望虚拟用户在执行完脚本后就退出,则应该选择第一项“Run until competion”按钮,但一般在项目中会选择第二项,让执行场景持续执行一段时间(30分钟或1个小时),如图
2、创建面向目标场景
选择面向目标场景,场景目标的类型有虚拟用户(Virtual Users)、每分钟页数/每秒点击次数/每秒事务数(Pages per Minute/Hits per Second/Transactions per Second),这些都是用来度量服务器的能力,例如,定义一个场景目标为“每秒点击次数”为50,虚拟用户数50到100之间,,对于每秒事务数这个目标,还需要定义事务名(Transaction Name)如图:
压力加载的方式与“Virtual Users”场景的定义方式类型,LR会自动加载,也可以指定必须在某一段时间内达到目标,或者按一定的时间间隔递增加压。分阶段添加目标、尝试递增达到最终目标。
注意:如果选择自动加压,LR会在第一批次加载50个虚拟用户,如果指定的最大虚拟用户数小于50的话,LR就同时加载所有定义的虚拟用户。LR默认是每隔2分钟加载一批虚拟用户。
3、Load Generator实现自动均衡
在手工测试场景的百分比模式下,或者在面向目标的场景设计下,LoadRunner可以自动调整压力负载机,并做到负载的自动均衡。
当压力负载机的CPU使用过载时,Controller会停止从该压力负载机加载虚拟用户,会自动地把压力负载产生的任务分配给其他负载机器,这就实现了自动均衡,在场景执行过程中,打开Load Generator 监控界面添加负载机器,并对其状态进行监控。当压力负载机器的CPU使用率比较高时,压力负载机器的状态图标会变为黄色,当出现过载情况时则为红色,正常状态是绿色。
4、 服务水平协议(SLA)
服务水平协议是在一定开销下为保障服务的性能和可靠性,服务提供商与用户间定义的一种双方认可的协定。通常这个开销是驱动提供服务质量的主要因素。
LR的SLA运行我们定义指定的目标,执行完场景后,Analysis会自动比较目标与收集的性能数据,从而判断SLA是否通过。
如图,在Controller界面的右边显示SLA,单击“新建”创建SLA定义性能目标,
设置过程由“启动à度量à事务à加载条件à阙值à完成”。
设置完成后,当场景执行完后,打开Analysis,可以SLA报告或者事务分析图等地方查看SLA目标与实际性能数据之间的对比情况。
注意:SLA可以在场景运行前定义,也可以在场景运行后定义,打开Analysis的概要报告(Summary Report)中进行设置或查看。
5、 Controller中运行界面Stopped 和 Passed的区别
在场景组(Scenario Groups)中会显示虚拟用户的执行状态,如果场景执行没有出错的话,执行场景后虚拟用户有些是Stopped状态,有些是Passed状态,但是如何区别Stopped和Passed呢?
如果在压力测试时有出错的情况,或者人为去终止压力测试时,一般会停在Stopped状态,但是主要的原因是因为场景的设置问题。
如果场景设置是类似于:并发执行半个小时,观察循环多少次,这样,在全部通过的情况下,所有虚拟用户都会出现在Stopped状态。
相反,如果设置场景类似于:并发执行N个虚拟用户,每个虚拟用户脚本迭代执行10次,观察需要花多少时间,这样,如果所有事务都成功了,没有人为地去停止场景的执行情况下,所有的虚拟用户都会在Passed状态。
6、 场景运行错误分析:120秒超时问题的定位分析
当执行场景时,出现错误,而导致出现失败事务,此时需要对其进行设置,并定位分析原因
解决方法:在Run-Time Settings,选择PreferencesàOptions 修改Step download timeout(sec)/ HTTP-reguest connect timeout(sec)/HTTP-reguest receive timeout(sec)的值。
或者在脚本中加入web_set_timeout(“CONECT”,“60”);
分析出现错误的原因:
1、 看是否数据库性能问题。如是否出现死锁、等待现象,数据库资源使用率情况(CPU、内存、磁盘等)。
2、 看应用问题,是否是参数设置大小导致的,或页面图片大小,程序是否有死循环,字段是否过大,是否有内存溢出现象。
3、 网络问题,网络延迟,不过通常测试都在局域网中,所以这种问题比较少见。
4、 中间件的参数调整问题。线程数、数据库连接池等太大或太小都可能会引起这个问题。