要:最近笔主带着两位新入职的同事进行了公司新平台的压力测试,工具选择的当然是Loadrunner,小笔发现有很多刚入门Loadrunner的小白都会遇到很多相似的问题,但是这些问题并不能在各大搜索网站上得到完善的解决。因此,小笔选中了51testing这个流量给力认可度高的专业测试平台给各位loadrunner新手提拱一份参考,希望能够帮助到有需要的朋友。
在如今的大数据时代,软件、测试、自动化测试都在扮演者不可或缺的重要角色,我们开发一个平台要求的已经不仅仅是功能要正确,更要考虑的是随着访问量的增加给客户带来的压力体验。
OK,引文部分已经完成,下面我们一起走进Loadrunner的压力测试吧。
跟着小笔一起动手来完成此次的压力测试吧!一个完整的压力测试三部曲:
1.脚本录制->2. 场景设计->3. 结果分析
场景介绍:此处我们选择最具有代表意义的多用户并发登录系统,我们测试150个用户并发登录平台A的时候给系统增加的压力情况。
测试背景: Windows Server 2008+Loadrunner11+IE8
1.录制脚本(Virtual User Generator)
安装好Loadrunner后(安装比较容易,在此暂且省略),打开Virtual User Generator进行脚本录制,录制时相关设置:
Step 1、Catalog选择'Web(HTTP/HTML)',点击[Create] 按钮。
Step 2、[URL Address]的值输入需要测试系统的地址,点击[OK]按钮。
Step3、开始进行登录系统的脚本录制,一般情况下,我们在录制的过程中需要切分action,不同的操作放在相对应的action里,此处因为操作简单,我们暂且不去细分。
Step4、生成脚本
Step5、优化脚本:添加集合点,事务,思考时间。
事务:定义一个action的范围,以便对此action进行某种操作。比如对该action进行计时操作。
语句:lr_start_transaction("login");
集合点:正如字面意思,等待所有的事务集合到一起进行的操作,用来执行负载测试。要实现此操作,可以同步 Vuser 以便恰好在同一时刻执行任务。通过创建集合点,可以配置多个 Vuser 同时执行某个操作。当某个 Vuser 到达该集合点时,将进行等待,直到参与该集合的全部 Vuser 都到达。指定数量的 Vuser 均到达后,释放所有这些 Vuser。
语句:lr_rendezvous("login");
思考时间:思考时间即等待时间,是一种延迟操作,很好理解。
语句:lr_think_time(5);
2.场景设计(Controller)
Step1、打开 controller,添加上面优化好的脚本,设置场景模式。(此处命名为testLogin)设置场景如下:
Step2、点击【Start Scenario】运行脚本,结果如下:
Step 3、点击紫色框中按钮,生成测试结果报告。
2.结果分析(Analysis)
Analysis 可以说是Loadrunner压力测试的重点和难点,所以对于新手而言 analysis不是测试的结束,而是开始。因此,对于各项测试结果我们要做出准确的理解和判断。在本次的实践中,我们做的是一个比较简单的场景,那么针对此场景的各项结果如下:
【测试报告分析摘要】,这里显示了实际测试过程中,总体的测试结果。我们可以选择更过的图来分析系统的负载情况。
【Running Vuser】结果分析:Vuser是并发测试选取的虚拟用户,从下图中可以看出,Vuser是每5秒增加5个,在02:20秒的时候达到了顶峰值150,持续运行了一分钟后,逐渐退出系统。
【Hits per Second】结果分析:每秒提交的HTTP请求数量,在本场景中执行的时间比较短,因此结果不是很明显,建议大家此处可以放宽执行时间,这样得到的结果比较准确。
【Throughput】结果分析:吞吐量是指返回的应用层数据的值,吞吐量单位是以字节数为准,表示Vuser在任何给定的某一秒上从服务器获得的数据量。借助此图我们可以依据服务器吞吐量来评估Vuser产生的负载量。该数据越小说明系统的带宽依赖就越小,通过这个数据可以确定是不是网络出现了瓶颈。
【Tansaction summary】结果分析:事务概要说明,统计执行的事务数量,比如在本次场景中,login和exist这两个事务的值都是855次。同事也监控了事务的Pass数和Fail数,了解负载的事务完成情况。通过的事务数越多,说明系统的处理能力越强;失败的事务数越小说明系统越可靠。这个比较容易理解,不多阐述。
【Average Transaction Response Time】- 事务响应时间结果分析:这里需要注意的一个问题是因为在Transaction Response Times里面是场景运行时记录的响应时间的最大值最小值与平均值,而Average Transaction Response Time 是按照采样率每隔几秒钟取一个值画出来的图,然后根据图来记录最大值最小值和平均值,在报告中也可以看到,Average Transaction Response Time中写的是图最大值、图小值和图平均值。如果将采样率设置小一些,这两个值就会比较接。所以,抽象率是关键。那么下图现实的结果可以看出,login这个action最大值是14.978,最小值是2.134,平均值是7.869;exist最小值是0.02,最大值0.214,平均值是0.078 。这些时间是可以接受的压力响应的时间。
本次测试过程中常见问题汇总:
之所以加上问题汇总是因为笔主觉得大家在做压力测试的时候,这类问题的出现率很高,所以,在此稍微总结一下。
问题1:averager esponse time响应时间过长?(与实际偏差甚大完全不合理)
解决方法:导致此问题的原因很多,但是我们可以从以下几类去分析:1、是否在脚本中添加了多长时间的思考时间。2、事务和集合点的先后顺序是否正确,正确的顺序是把集合点放在事务前面,反之则也会增加事务响应时间的值。3、网速问题,网速一般不会造成太大的偏大,但是不排除并发量很大的情况下造成的延误。
问题2:LoadRunner超时错误
解决方法:首先在运行环境中对超时进行设置,默认的超时时间可以设置长一些,再设置多次迭代运行,如果还有超时现象,需要在“Runtime Setting”>“Internet Protocol:Preferences”>“Advanced”区域中设置一个“winlnet replay instead of sockets”选项,再回放是否成功。
问题3:LoadRunner脚本中出现乱码
解决方法:重新录制脚本,在录制脚本前,打开录制选项配置对话框进行设置,在“Recording Options”的“Advanced”选项里先将“Surport Charset”选中,然后选中支持“UTF-8”的选项。
问题4:在录制过程中IE页面上,某些控件显示有问题,导致录制不了。
解决方法:一般情况下,将被测系统的URL加入到可信任站点即可解决此类问题。
问题5:Error -27796:Failed to connect to server‘XXXX’
这个问题可以说是经常遇到但是不易被解决的难题,我们大致可以这样去排查
(1)检查run time setting中的请求超时时间Preferences中点击Options‘HTTPrequest connect timeout’,‘HTTP-request receieve timeout’,‘Step download timeout’,查看其值是否为1000、1000、10000;run time setting设置完了后记住还需要在control组件的option的run time setting 中设置相应的参数;
(2)Browser Emulation中的Download non-HTML resources选项去掉,点击OK即可如果还不能解决的话,继续尝试第3种方法
(3)设置runt time setting中的internet protocol-preferences中的advaced区域有一个winlnet replay instead of sockets选项,选项后再回放就成功了。如果实在不行的话就试试重启大法吧,因为有些问题的确可能是因为工具问题,网络问题,机子问题等等。
总结:用Loadrunner进行压力测试难免会遇到各种问题,细心排查总能一一解决,所以笔者想对刚刚踏入这一行业的朋友说,不急不燥认真去思考,问题总能被解决。希望此篇文章对大家有所帮助,任何问题都可以留言喔。
1)关注+私信回复:“测试”,可以免费领取一份10G软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Mysql数据库、抓包工具、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试等。
2)关注+私信回复:"入群" 就可以邀请你进入软件测试群学习交流~~
irtual User Generator是一种基于录制回放的工具,当你按照业务流程执行了某个软件,它会把操作过程中产生的协议录制下来,自动转换成脚本语言,执行完成对用户行为的模拟,从而进一步对系统产生负载。而性能测试的第一步也是最重要的一步,即生成虚拟用户脚本(Vuser Script)。在VuGen中录制得到用户的行为就好比虚拟了一个用户的行为。
通常使用VuGen进行用户行为模拟的流程:
VuGen提供了整个脚本的开发环境,脚本和场景决定了性能负载的方式。当设定的负载超出用户行为,得到的结果偏悲观;而设定的负载如果只模拟了部分用户行为,得到的结果偏乐观。好比需要测试一下国家体育馆鸟巢的观众疏散能力,如果模拟8万老年人进行疏散,那么得出的时间比较正常时间偏短,而这两个时间都无法正确地说明整个鸟巢的正常疏散时间。
对于一个性能测试工程师来说,并不需要准确定位性能问题产生的原因,而应强调如何发现性能问题。这就像功能工程师并不需要准确定位缺陷产生的原因,而应强调如何发现缺陷。当然作为一名优秀的性能测试工程师,也应该具备性能瓶颈定位和分析的能力,不过这不是一朝一夕能做到的,需要长久的知识积累。
打开VuGen会看到Start Page页面,这里提供了一些相关资源(包括常用的协议,在线资源和VuGen11的新功能)的介绍,如下图:
1.VuGen界面介绍
新建一个脚本,选择Web(HTTP/HTML)协议后,即可得到开发界面。在VuGen中提供了两种脚本视图方式(Script/Tree),可以通过菜单栏的对应按钮进行切换,也可以通过View菜单下的选项进行切换。
1.1Tree图形化模式
录制脚本后,在Tree图形化模式下,左侧会列出该脚本使用的函数(双击可以直接使用图形化修改函数),右侧提供了该请求对应的截图(自行编写的脚本和部分协议不会带有Snapshot截图),如下图:
一般通过这种视图来检查录制是否正确或进行某些函数的图形化修改。在Loadrunner11中对于Tree模式有了一定的功能加强,在该模式中提供了HTML View和HTTP View两种模式,其中,HTTP View可以帮助我们更加清晰地了解页面刷新时所产生的所有请求,如下图:
这里我们可以看到HTTP View下的Grid模式会列出一个HTTP Flow列表,该列表列出了访问Phpwind首页面所产生的所有HTTP请求(有点像HTTPWatch的请求列表),并且还有每一个请求发送的时间、应答的时间、访问方法、下载大小等。
而在HTTPFlow下侧列出了选中请求数据包及应答数据包,当使用DFE(Data Format Extension)功能时,右侧会扩展一个新的Editor标签。
如果将Grid模式切换为Tree模式,可以更加直观地看到一个主请求下的附属请求,如下图:
VuGen11中的HTTPView视图提供了更加详细的数据包查看功能,但是响应较慢且无法全局查询,让这个新功能还不够完美。
1.2脚本模式
在脚本模式界面中,左侧是脚本Action的列表,右侧是代码部分。从开发方便的角度来说,一般使用这个模式的情况较多,如下图:
1.3Output Window
在屏幕的下方提供了Output Window,包含录制、回放、关联等相关信息的输出管理。
在脚本运行时,Output Window还会增加RunTime Data标签,如下图:
里面包含了脚本运行时的参数名和值,还有脚本迭代的次数。
、控制台
1、基准测试:用户数设置为1,运行时间设置为5分钟或者迭代次数设置为5次
2、并发测试:多用户,集合点测试
3、综合场景:测试web tours系统
前提:多个脚本(提交城市、提交订单、查询订单)
4、录制代码的顺序:
a.创建一个脚本(根据被测系统的协议)
b.选择录制模式(默认HTML)
c.如果关心的是登录后的请求,就把代码块切换到vuser_init中,填写url address被测系统的url地址
d.开始录制,输入用户名密码提交登录操作
e.登陆后为登录成功界面添加检查点(一般测试都是测试用户登陆后使用被测系统的情况,所以需要确保登录是成功的)
f.切换代码块在action中,根据业务流程录制代码
g.在关心的请求之前:
--插入集合点
--插入开始事务
--提交关心的请求
--插入结束事务
--插入检查点
h.切换代码块在vuser_end中,录制退出请求,关闭浏览器,停止录制,保存代码
i.把代码中的集合点和开始事务剪切到关心请求上面
5、解释控制台
(1)打开控制台就是一个场景
(2)scenario group:场景组,场景中有哪些用户和哪些脚本--相当于一个班级
group name:组名,哪些用户运行某个脚本称为一组,组名默认是脚本的名称----相当于一个班级里的小组
script path:脚本路径,当前要测试被测系统的哪些业务,就把这些业务的脚本添加到控制台---相当于一个班级中的每个小组执行的任务是什么
quantity:虚拟用户数,为每个脚本分配多少用户执行去执行---相当于班级里一个小组有多少个同学
load generator:虚拟用户压力生成器,默认实际用户对被测系统执行的压力
schedule name:计划的名称
schedule buy:任何空值虚拟用户去运行脚本
--scenario:控制台中所有的用户按照一个计划去运行脚本
--group:为每一组中的虚拟用户单独设置一个计划,有多少组(脚本)就可以设计多少个计划
run moda:运行模式
--real Word schedule:
load内置的运行方式,固定只能10个户运行场景5分钟(一般不符合测试要求)
--basic schedule:手动设置运行方式
(4)常用计划组合:schedule by选择scenario+run mode选择basic schedule
(5)global schedule:计划
initial:初始化虚拟用户,运维虚拟用户需要使用load generator组件生成负载才能运行脚本,模拟测试,而load generator生成负载需要使用pc机资源,如果同时模拟大量的虚拟用户,有可能会失败,可以让load generator每隔一段时间初始化一定的虚拟用户
start vuser:让虚拟用户开始执行脚本,进行测试,如果让大量的虚拟用户同时执行脚本,有可能会报错,测试时需要让所有用户都能够成功运行脚本,进行测试才有意义,所以需要确保所有用户都执行代码成功,就要设置让虚拟用户慢慢的开始执行脚本
duration:持续时间,虚拟用户执行场景的时间,虚拟用户执行场景时,执行完一次脚本后,未到达持续时间,将继续再次执行脚本
stop vuser:停止虚拟用户,虚拟用户不再运行脚本,退出系统,如果大量的虚拟用户同时从被测系统退出,有可能会报错,需要隔一段时间停止一定的虚拟用户
(7)运行场景时,常见的错误
1)connot connect server.
原因:没有连接到服务器
解决方案:
a.手动打开被测系统,验证服务器是否宕机
--如果宕机:就是场景中设置的虚拟用户太多,导致被测系统压力太多
--未宕机:场景中虚拟用户运行时压力太大,修改initialize初始化虚拟用户和start vuser开始虚拟用户选项,修改时间间隔长一些
(8)监控资源补充:
process:private bytes,记录当前被占用的内存大小
process:working set,记录当前正在使用的内存大小
system:context swiches,上下文切换,当CPU处理事务时,1个事务未处理完又被调用处理另外一个事务,这样从一个事务切换到另一个事务的状态称为上下文切换,上下文切换越频繁,证明程序设计有问题
补充:
一、虚拟用户(vuser)
1、虚拟用户模拟实际用户执行脚本对被测系统进行操作(测试)
2、使用load generator生成负载(创造出虚拟用户)
3、底层当使用虚拟用户进行测试时,在任务管理器中会生成mmdrv.exe的进程
4、进程:当计算机启动一个程序,就会在任务管理器中启动一个进程,进程需要耗费资源(cpu、内存、硬盘...)
5、如果模拟虚拟用户以进程的方式模拟,控制台中设置了多少个虚拟用户,就会启动多少个进程
6、当测试时取药多用户,一般会使用线程的方式模拟用户,这样多个线程可以共用一个进程的资源,一台pc机就可以模拟出更多的虚拟用户,只有启用线程安全的程序才能使用线程的方式
二、多机联合
练习:使用多机联合实现,自己的机器购买2张,同桌的机器购买3张票
1.什么是多机联合?
在测试的过程中,可以连接不同的机器为性能测试模拟更多的模拟用户,连接其他机器的load
generator的技术就是多机联合
2、为什么要使用多机联合?
因为测试时模拟虚拟用户需要占用PC的资源,一台pc的资源有限,为了模拟更多的虚拟用户,就需要使用更多的PC,这时就需要使用多机联合技术
3、多机联合的步骤:
a.确定连接哪台机器,并查看其IP地址
b.确保测试机与待连接的机器网络能够ping通,并关闭防火墙
c.在待连接的机器上安装load generator组件,该组件也可以安装在Linux系统上,loadrunner其他组件则不能
d.在待连接的机器上开启服务,loadrunner agent process
e.在测试机的控制台中,点击scenario菜单栏,选择load generator->点击add按钮->输入待连接机器的IP地址,选择机器类型Windows、Unix,确定
f.选中已经添加的IP地址,点击connect按钮连接,status为ready则连接成功
注意:录制顺序
1、添加集合点
2、开始事务
3、发送请求
4、结束事务
5、检查点
问题:为什么录制提交航班的代码,需要把提交城市的请求录制在action中
关系的请求:提交航班
action:点击flights按钮+提交城市+提交航班
init:打开被测系统->登录
action:点击flights按钮+提交城市+提交航班
end:退出系统
三、场景
1.综合场景
(1)添加脚本,把被测系统主要业务流程的脚本添加到控制台中
(2)分别为每个脚本合理分配虚拟用户数(需求中的在线用户数)
(3)设置虚拟用户如何执行场景:
a.schedule by:scenario,所有脚本按照一个计划执行
b.run mode:basic schedule,手动设置虚拟用户执行场景的方式
c.initialize:初始化虚拟用户,由于综合场景中虚拟用户较多,需要设置隔一段时间初始化多少虚拟用户,如果间隔时间太短,load
generator压力大,虚拟用户会初始化失败,将无法运行脚本
d.start vuser:开始虚拟用户,虚拟用户开始执行脚本,如果所有虚拟化同时执行脚本,容易报错,需要设置每隔一段时间开始几个虚拟用户,确保所有用户都能执行脚本,测试才有意义
报错:failed to connect to server
e.duration:持续时间,综合场景考察被测系统的综合能力,为了得到稳定的值,综合场景需要持续一个小时,或更长的时间
f.stop vuser:虚拟用户停止运行,如果所有虚拟用户同时停止,容易报错,所以需要每隔一段时间停止几个虚拟用户
报错:vuser_end(行号):error....
(4)设置虚拟用户如何运行场景中的脚本:
a.打开run_time setings
b.run logic:1次,因为为场景设置了duration时间,迭代次数只需设置为1
c.think time:思考时间,脚本中步骤与步骤之间的间隔时间,设置为random,值根据具体情况设置
d.pacing值,迭代与迭代之间的间隔时间,设置为random
e.miscellaneous:勾选continue on error,当场景中出现少数错误时,是被允许的
f.browser emulation:勾选前面三个复选框,综合场景模拟实际用户被测系统情况,用户一般不会频繁清除浏览器缓存,所以要模拟用户操作
g.preference:设置4个超时时间为600
(5)设置连接load generator的超时时间
a.tools->options->timeout->load generator
connect连接:600
disconnect取消连接:600
(6)设置场景运行结果的保存路径
results->results settings->指定文件名称和文件路径
(7)在run界面Windows resources窗口右击选择->add:添加测量(添加window资源项)->在上部分server栏点击add添加被监控服务器的IP地址及platform平台->在下部分监控资源项栏点击add添加需要监控的资源项
(8)如果要在综合场景中模拟部分用户并发
scenario->rendzvous->policy->第二个单选按钮设置少部分百分比
(9)如果要使用多机联合
scenario->load generator->add->添加被测系统连接的负载机IP地址及平台->选择IP地址点击connect连接上该ip地址的电脑->在run界面点击右上角vuser三个小人按钮,为虚拟用户分配不同的load generator
(10)在run界面点击start scenario开始执行场景
5、排除运行场景时的错误:
(1)failed to connect to server....(未连接到服务器)
a.检查服务器是否宕机
b.检查start vuser是否时间间隔太短
c.被测系统不支持那么多用户
(2)text=..... not found
web_reg_find(检查点报错)
a.打开脚本验证脚本是否正确,确保脚本中迭代多次是通过,则脚本是没有问题
b.把run-time settings中的tink time和pacing设置大一点间隔
(3)vuser_end(行号):error(虚拟用户退出时报错)
a.把stop vuser的价格时间设置大一些
(4)parameter“参数名”...unique(参数不够)
a.在脚本中的参数池列表中准备更多的数据
------码字不易,给个关注呗^_^
*请认真填写需求信息,我们会在24小时内与您取得联系。