资源均来源于网络,若侵权,请联系我删除
文章目录
一、Loadrunner11简介
二、Loadrunner11安装教程
三、Virtual User Generator教程
四、Controller教程
五、Analysis教程
六、测试实例
七、总结
一、Loadrunner11简介
LoadRunner是一种预测系统行为和性能的工业标准级负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner能够对整个企业架构进行测试。通过使用LoadRunner,企业能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。
目前企业的网络应用环境都必须支持大量用户,网络体系架构中含各类应用环境且由不同供应商提供软件和硬件产品。难以预知的用户负载和愈来愈复杂的应用环境使公司时时担心会发生用户响应速度过慢,系统崩溃等问题。这些都不可避免地导致公司收益的损失。Mercury Interactive 的LoadRunner能让企业保护自己的收人来源,无需购置额外硬件而最大限度地利用现有的IT资源,并确保终端用户在应用系统的各个环节中对其测试应用的质量,可靠性和可扩展性都有良好的评价。LoadRunner 是一.种适用于各种体系架构的自动负载测试工具,它能预测系统行为并优化系统性能。LoadRunner的测试对象是整个企业的系统,它通过模拟实际用户的操作行为和实行实时性能监测,来更快的查找和发现问题。此外,LoadRunner能支持广泛的协议和技术,为特殊环境提供特殊的解决方案。
1.1 Loadrunner 的基本原理
LoadRunner启动以后,在任务栏会有一个Agent 进程,通过Agent进程,监视各种协议的Client与Server 端的通信,用LoadRunner的一套C语言函数来录制脚本,所以只要LoadRunner支持的协议,就不会存在录制不到的,这是它与Load test. WinRunner、Robot(Gui)录制脚本的一个很大区别(WinRunner必须识别对象,才能录制到)。然后LoadRunner调用这些脚本向服务器端发出请求,接受服务器的响应,至于服务器内部如何处理,它并不关心。
1.2 创建虚拟用户
使用LoadRunner的Virtual User Generator,可以很简便地创立起系统负载。该引擎能够生成虛拟用户,以虚拟用户的方式模拟真实用户的业务操作行为。它先记录下业务流程(如下订单或机票预定),然后将其转化为测试脚本。利用虚拟用户,可以在Windows、UNIX或Linux机器上同时产生成千,上万个用户访问。所以LoadRunner能极大地减少负载测试所需的硬件和人力资源。另外,LoadRunner的TurboLoad专利技术能提供很高的适应性。TurboLoad可以产生每天几十万名在线用户和数以百万计的点击数的负载。
用Virtual User Generator建立测试脚本后,可以对其进行参数化操作,这一操作能利用几套不同的实际发生数据来测试应用程序,从而反映出本系统的负载能力。以一个订单输入过程为例,参数化操作可将记录中的固定数据,如订单号和客户名称,由可变值来代替。在这些变量内随意输人可能的订单号和客户名,来匹配多个实际用户的操作行为。LoadRunner通过它的Data Wizard来自动实现其测试数据的参数化。Data Wizard 直接连接数据库服务器,从中可以获取所需的数据(如订单号和用户名)并直接将其输人到测试脚本。这样避免了人工处理数据的需要,DataWizard节省了大量的时间。
为了进一步确定Virtualuser能够模拟真实用户,可利用LoadRunner控制某些行为特性。例如,只需要单击一下鼠标,就能轻易控制交易的数量,交易频率,用户的思考时间和连接速度等。
1.3 创建真实的负载
Virtual users建立起后,需要设定负载方案,业务流程组合和虚拟用户数量。LoadRunner的Controller,能很快组织起多用户的测试方案。Controller 的Rendezvous功能提供一个互动的环境,在其中既能建立起持续且循环的负载,又能管理和驱动负载测试方案。而且,可以利用它的日程计划服务来定义用户在什么时候访问系统以产生负载。这样,就能将测试过程自动化。同样还可以用Controller来限定负载方案,在这个方案中所有的用户同时执行一个动作(如登录到一个库存应用程序)来模拟峰值负载的情况。另外,还能监测系统架构中各个组件的性能(包括服务器、数据库、网络设备等)来帮助客户决定系统的配置。
LoadRunner通过它的AutoLoad技术,提供更多的测试灵活性。使用AutoLoad,可以根据目前的用户人数事先设定测试目标,优化测试流程。例如,目标可以是确定应用系统承受的每秒点击数或每秒的交易量。
1.4 实时监测器
LoadRunner内含集成的实时监测器,在负载测试过程的任何时候,都可以观察到应用系统的运行性能。这些性能监测器为实时显示交易性能数据(如响应时间)和其他applicationserver,webserver,网络设备和数据库等的实时性能。这样,就可以在测试过程中从客户和服务器的双方面评估这些系统组件的运行性能,从而更快地发现问题。
再者,利用LoadRunner的ContentCheck TM ,可以判断负载下的应用程序功能是否正常。
ContentCheck 在Virtual users 运行时,检测应用程序的网络数据包内容,从中确定是否有错误内容传送出去。它的实时浏览器有助于从终端用户角度观察程序性能状况。
1.5 分析结果
一旦测试完毕后,LoadRunner收集汇总所有的测试数据.并提供高级的分析和报告工具,以便迅速查找到性能问题并追溯原由。使用LoadRunner的Web交易细节监测器,可以了解到将所有的图像、框架和文本下载到每一网页上所需的时间。例如,这个交易细节分析机制能够分析是否因为–个大尺寸的图形文件或是第三方的数据组件造成应用系统运行速度减慢。另外,Web交易细节监测器分解用于客户端、网络和服务器上端到端的反应时间,便于确认问题,定位查找真正出错的组件。例如,可以将网络延时进行分解,以判断DNS解析时间,连接服务器或SSL.认证所花费的时间。通过使用LoadRunner的分析工具,能很快地查找到出错的位置和原因并作出相应的调整。
1.6 重复测试
负载测试是-一个重复过程,每次处理完- -个出错情况,都需要对应用程序在相同的方案下,再进行一次负载测试。以此检验所做的修正是否改善了运行性能。
1.7 其他特性
利用LoadRunner,可以很方便地了解系统的性能。它的Controller 允许重复执行与出错修改前相同的测试方案。它的基于HTML的报告提供一个比较性能结果所需的基准,以此衡量在- .段时间内,有多大程度的改进并确保应用成功。由于这些报告是基于HTML的文本,可以将其公布于公司的内部网上,便于随时查阅。
所有Mercury Interactive的产品和服务都是集成设计的,能完全相容地一起运作。由于它们具有相同的核心技术,来自于LoadRunner和ActiveTest TM的测试脚本,在Mercury Interactive 的负载测试服务项目中,可以被重复用于性能监测。借助MercuryInteractive的监测功能一Topaz TM和ActiveWatch TM,测试脚本可重复使用从而平衡投资收益。更重要的是,能为测试的前期部署和生产系统的监测提供–个完整的应用性能管理解决方案。
1.7.1 Enterprise Java Beans的测试
LoadRunner完全支持EJB的负载测试。这些基于Java的组件运行在应用服务器上,提供广泛的应用服务。通过测试这些组件,可以在应用程序开发的早期就确认并解决可能产生的问题。
1.7.2 支持无线应用协议
随着无线设备数量和种类的增多,测试计划需要同时满足传统的基于浏览器的用户和
无线互联网设备,如手机和PDA。LoadRunner 支持两项最广泛使用的协议: WAP和
I-mode。此外,通过负载测试系统整体架构,使用LoadRunner 可以只通过记录一次脚本,
就可完全检测上述这些无线互联网系统。
1.7.3 支持Media Stream应用
LoadRunner还能支持MediaStream应用。为了保证终端用户得到良好的操作体验和
高质量MediaStream,需要检测MediaStream应用程序。使用LoadRunner,可以记录和重
放任何流行的多媒体数据流格式来诊断系统的性能问题,查找原由,分析数据的质量。
1.7.4 完整的企业应用环境的支持
LoadRunner支持广泛的协议,可以测试各种IT基础架构。
二、Loadrunner11安装教程
2.1 资源链接
阿里云盘链接:https://www.aliyundrive.com/s/mpcVasZezCP 提取码: 7e1h
2.2 教程
教程转载自:Loadrunner安装教程
安装过程中最好把各种杀毒软件以及防火墙给关闭!
2.3 常用组件
2.3.1 Virtual User Generator(虚拟用户生成器)
录制和生成脚本
2.3.2 Controller
创建测试场景、运行和监控场景
2.3.3 Analysis
分析测试结果、出测试报告
2.3.4 Hp Web Tours Application
一个Loadrunner自带的web服务器网站,相当于Winrunner自带的测试软件网页版,也是用来购买飞机票的。下面介绍一下该网站的主要功能。
2.3.4.1 如何访问该网站
此实验用的操作系统为winxp,其他系统请自行研究,不过步骤都是一样的!
首先开启服务器:windows开始菜单——>所有程序——>HP Loadrunner——>Samples——>web——>Start Web Server ,只有开启服务器才能访问本地的网站.
接着依次点击windows开始菜单——>所有程序——>HP Loadrunner——>Samples——>web——>HP Web Tours Application,或者直接在浏览器输入地址:http://127.0.0.1:1080/WebTours/ 进行访问。
2.3.4.2 网站登录界面
Loadrunner 给我们设置了两个默认的账号,直接登录即可。
Username:joe****Password:young****
Username:jojo****Password:bean
或者自己可以创建自己的新账户:点击 sign up now,进入到用户注册界面.
前三项为必填项,分别为用户名、密码、确认密码、姓、名、街道地址、所在城市等。
注册成功后,可以在 ~\WebTours\MercuryWebTours\users 进行查看所有用户。
asministration是对服务器进行设置,无需理会。
2.3.4.3 网站主要功能
进入网站后,在左侧有四个按钮,分别为Flights、Itinerary、Home、Sign Off,作用分别是购买飞机票、查看历史购买的飞机票、个人信息、退出登录。
2.3.4.3.1 购买飞机票
Departure City :出发地点
Arrival City :目的地
Departure Date : 出发时间
Departure Date : 返回时间
No. of Passengers :购买票数
Roundtrip ticket:是否购买往返票
Seating Preference:座位位置
Type of Seat:作为类型
基本信息确认之后,会让你选择出发时间,随便选即可。
确认之后,会让你填写个人基本信息,随便填即可,Credit Card叫填写自己的银行卡卡,随便填即可,不要填写自己的真实卡号。
个人基本信息确认之后,一路确认即可。
购买完飞机票之后,可以在Itinerary查看自己购买的机票,还可以进行删除。
后面录制脚本的完整流程要有退出登录,养成习惯,登录之后,买完票就点击Sign Off退出。
三、Virtual User Generator教程
此教程,博主通过观看B站大佬的视频进行总结,若不想看文章,也可以直接去观看大佬的视频:https://www.bilibili.com/video/BV1n7411C7SE?p=1
使用LoadRunner的Virtual User Generator引擎,可以监视并记录客户端和服务器之间的通话,让虚拟用户模拟实际的业务流程,记录真正用户的操作行为,并将其转化为特定的测试脚本语言集合。
3.1 创建测试脚本
首先打开Loadrunner,在页面上点击Creat/Edit Script,然后会自动进入Virtual User Generator模块界面(也可以自己直接打开Virtual User Generator,不用经过Loadrunner)。
点击file——>new,在弹出的菜单中选择通信协议,因为我们要测的是网站,所以我们选择Web(HTTP/HTML).点击Creat创建脚本程序.如图所示
创建完成后会进入该脚本程序主页面,如图:
大家可以看到,该脚本分为三个部分,分别是:vuser_init、Action、vuser_end
vuser_init:存放应用程序初始化脚本,程序执行过程中只执行一次。
Action:存放实际的操作脚本,程序执行过程中可执行多次,一般脚本的录制都放在这,可循环执行。
vuser_end:存放应用程序注销和关闭时的脚本,程序执行过程中只执行一次
3.2 录制测试脚本(简单一条流程走一遍)
创建脚本程序成功后,系统会自动弹出录制测试脚本的界面,我们也可以自己点击上方菜单的 Start Record 按钮打开该界面.如图:
Application type 选择Internet Application;
Program to record 选择要打开该网址的浏览器地址;
URL Address输入要测试的网址地址;这里是买飞机票的网址:http://127.0.0.1:1080/WebTours/
Working directort默认选择是安装Loadrunner 的bin目录下,可以不用改动;
Record into Action 选择Action,即将录制的脚本代码存放在Action中;
Record the application startup默认选中;即 将应用的启动操作,一起记录在脚本中;
在录制脚本前,确认网站服务器已经打开,否则会录制失败,点击OK;
会进入脚本录制界面,vugen(virtual user generator)会变成一个录制界面监控以及操作小横条,如下图:
我们可以看到在Recording后面,有一个实时变动的数字,只要你在该浏览器有网络请求或响应,该网络包都会被vugen监控,不管是什么请求,所以说会录制一些垃圾数据进去,后面我们要对垃圾数据进行处理,如果该数字一直保持不变的话,说明启动录制失败,请停止该录制,再次重试,若还是失败,请检查软件是否有问题,或者选择的浏览器有问题,请换其他浏览器重试(如果用的是360浏览器,会默认捆绑,建议用qq浏览器)如果加载网站页面太慢的话,是不是系统内存和核数量的问题,如果不是,换回IE浏览器,重启试试。
再次提醒,最好把各种杀毒软件以及防火墙给关闭!
若还是打不开,请参考 https://zhidao.baidu.com/question/484634354.html
我们来看一下该监控界面的按钮分别有什么作用:
从左到右分别是:正在录制、运行、终止脚本录制(生成脚本代码)、暂停、编译、选择脚本录制的位置、创建新的action、插入开始事务,插入结束事务、插入集合点、插入注释、关闭录制选项、插入文字检查点。
成功开启录制之后,我们可以对被测网站进行操作,vugen就会把这些操作录制成脚本,最后操作完成之后点击终止脚本录制,生成脚本代码,如图:
脚本录制结束后可以把脚本保存起来,Ctrl + S,选择自己的脚本保存路径,建议在安装目录下新建一个文件夹专门用来保存所有测试脚本,或者新建一个文件夹用来保存该网站测试的所有文件(不听老人言吃亏在眼前)
我们可以看到在电脑右下角,有一个小雷达的图标,用Loadrunner相当于做接口测试,在运行脚本过程中不会再被测网站界面上进行操作,而是直接发送网络请求进行性能测试。该小雷达是loadrunner的代理程序,代替客户端向浏览器发送请求。
脚本没有问题的话,我们可以进行回放脚本,可以理解为用loadrunner去重复一次刚才的操作,但是不在界面上操作,我们只能通过显示出来的数据来判断脚本是否在运行。如果脚本运行出错的话,就会停止运行。点击Start Record旁边的Run,开始脚本回放。如图:
若脚本没有被中断,说明脚本运行结束,我们可以查看脚本的运行结果,点击:view——>
Test Results,可以查看脚本的运行结果。如图:
绿色的为通过,红色为失败,我们可以看到,刚才执行那个脚本全部通过,这里贴一下脚本代码:
Action(){web_url("WebTours","URL=http://127.0.0.1:1080/WebTours/","Resource=0","RecContentType=text/html","Referer=","Snapshot=t1.inf","Mode=HTML",
LAST);lr_think_time(967);web_submit_form("login.pl","Snapshot=t2.inf",
ITEMDATA,"Name=username","Value=joe", ENDITEM,"Name=password","Value=young", ENDITEM,"Name=login.x","Value=66", ENDITEM,"Name=login.y","Value=10", ENDITEM,
LAST);web_image("Search Flights Button","Alt=Search Flights Button","Snapshot=t3.inf",
LAST);web_submit_form("reservations.pl","Snapshot=t4.inf",
ITEMDATA,"Name=depart","Value=Los Angeles", ENDITEM,"Name=departDate","Value=04/25/2022", ENDITEM,"Name=arrive","Value=Denver", ENDITEM,"Name=returnDate","Value=04/26/2022", ENDITEM,"Name=numPassengers","Value=1", ENDITEM,"Name=roundtrip","Value=on", ENDITEM,"Name=seatPref","Value=None", ENDITEM,"Name=seatType","Value=Coach", ENDITEM,"Name=findFlights.x","Value=53", ENDITEM,"Name=findFlights.y","Value=11", ENDITEM,
LAST);web_submit_form("reservations.pl_2","Snapshot=t5.inf",
ITEMDATA,"Name=outboundFlight","Value=303;206;04/25/2022", ENDITEM,"Name=returnFlight","Value=032;238;04/26/2022", ENDITEM,"Name=reserveFlights.x","Value=38", ENDITEM,"Name=reserveFlights.y","Value=8", ENDITEM,
LAST);web_submit_form("reservations.pl_3","Snapshot=t6.inf",
ITEMDATA,"Name=firstName","Value=Joseph", ENDITEM,"Name=lastName","Value=Young", ENDITEM,"Name=address1","Value=1325 Borregas Ave", ENDITEM,"Name=address2","Value=Sunnyvale/CA/95014", ENDITEM,"Name=pass1","Value=Joseph Young", ENDITEM,"Name=creditCard","Value=123456", ENDITEM,"Name=expDate","Value=12/12", ENDITEM,"Name=saveCC","Value=on", ENDITEM,"Name=buyFlights.x","Value=26", ENDITEM,"Name=buyFlights.y","Value=1", ENDITEM,
LAST);web_submit_form("reservations.pl_4","Snapshot=t7.inf",
ITEMDATA,"Name=Book Another.x","Value=30", ENDITEM,"Name=Book Another.y","Value=6", ENDITEM,
LAST);web_image("SignOff Button","Alt=SignOff Button","Snapshot=t8.inf",
LAST);return0;}
测试脚本运行没问题之后,我们就可以把测试脚本放在环境当中去运行了。
我们可以点击Tools——>Create Controller Scenario将该测试脚本导入到Contrloler场景中,或者直接打开Controller软件,然后手动导入测试脚本,我们这里为了方便选择方式一。
在弹出的的菜单中,选择Manual Secnario手动场景,设置虚拟用户数(Number of)为默认10,Load Generator默认localhost,Group Name默认,存放结果路径默认.点击OK.如图:
确认之后会自动打开,自动创建一个场景将该测试脚本加入进去(这里好像并没有按正常道理创建一个场景并且将测试脚本加入进去,而是和直接打开Controller一样的界面,不清楚问题的原因,大家可以百度查一下),如下图(没有按正常道理的图):
选择Manual Secnario,在Available出点击要加入到该场景的脚本,点击Add,加入到右边,右边为加入到该场景的脚本,可以加入多个脚本。默认勾选Show at startup.如图:
点击OK,成功创建一个场景,如图:
1处为该场景中的测试脚本,2处为运行该脚本的虚拟用户数,3为产生这些虚拟用户的机器(没错,你没有想错,还可以在其他电脑上运行哦),Ctrl + S保存该场景(推荐专门新建一个文件夹用户保存所有测试的场景,或是放在之前的该测试的专有文件夹中).
点击下方的Run,切换到场景执行页面,如图:
点击Start Scenario开启场景运行,提示文件以及存在,点击是,如图:
我们可以看到场景虚拟用户的运行过程,如图:
场景运行完毕后,右上角会有执行结果,如图:
依次为:正在执行的虚拟用户数、总执行时间、每秒点击数、通过事务数、失败事务数、错误事务数。Ctrl + S保存执行结果。
有了执行结果之后,我们就要去分析结果。点击Rasult——>Analyze Results,或者直接打开Analysis将执行结果放进里面分析,我们这里用方式一,默认勾选Auto Collate Results。系统自动打开Analysis,如图:
右侧为分析出来的结果,Ctrl + S 保存分析结果。
3.3 完善测试脚本
3.3.1 插入函数
下面列出常用函数的用法:
我们可以点击Insert——>new step,来插入我们想要的函数。
3.3.2 Loadrunner 脚本增强
为什么要进行脚本增强?因为录制的脚本不能达到测试预期,脚本过于简单。
Loadrunner 脚本增强的几种方法如下:
3.3.2.1 事务
性能测试中,除了要衡量整个脚本的性能外,还需要脚本中某一-段或几段操作的性能,以便更详细的知道具体是用户的哪些动作对系统性能的影响比较大;
LoadRunner采用在脚本中定义事务来达到这一要求。事务就是在脚本中定义的某段操作,更确切的说,就是一段脚本语句。Loadrunner运行到该事务的开始点就开始计时,知道运行到该事务的结束点,计时结束。这个事务的运行时间,将会反映在测试结果中。
把鼠标移动到想入插入事务开始的地方,点击Insert——>Start Transaction,插入事务开始点,或者直接点击菜单上方的
,在弹出的菜单中输入事务名称,如图:
点击OK,插入事务开始点成功,事务语句代码如下:
lr_think_time(967);
插入事务结束点:把鼠标移动到想入插入事务结束点的地方,点击Insert——>End Transaction,插入事务结束点,或者直接点击菜单上方的
默认情况下,事务的名称列出最近一个事务名称,事务的状态是LR_AUTO,一般情况下,事务的名称和状态一般不需要修改,除非在手动编写代码时,有可能需要手动设置事务的状态。如图:
点击OK,事务结束点插入成功,事务语句代码如下(开始和结束事务名字一定要一样):
lr_end_transaction("Start_Login", LR_AUTO);
插入事务之后,可以再回放一遍脚本,查看结果,发现多出了两行日志,一行开始事务,一行结束事务,如图:
事务结束日志处,Pass即该事务通过,Duration即事务总运行耗费时间,Wasted即事务浪费掉的时间。
我们除了可以在脚本中直接插入事务之外,也可以在录制的过程中插入事务,我们这里以注册用户为例,我们点击
Start Record 开启脚本录制,在脚本录制界面,在想要添加事务的操作之前点击
,输入事务名称,点击OK,事务开始点插入成功,如图:
操作结束之后,我们点击
添加结束事务,系统会自动列出之前创建的开始事务,选择一个事务,点击OK,如图:
事务插入成功后,停止事务录制,生成脚本代码:
Action(){web_url("WebTours","URL=http://127.0.0.1:1080/WebTours/","Resource=0","RecContentType=text/html","Referer=","Snapshot=t10.inf","Mode=HTML",
LAST);lr_start_transaction("registered");lr_think_time(63);web_link("sign up now","Text=sign up now","Snapshot=t11.inf",
LAST);lr_think_time(8);web_submit_form("login.pl","Snapshot=t12.inf",
ITEMDATA,"Name=username","Value=tang", ENDITEM,"Name=password","Value=123456", ENDITEM,"Name=passwordConfirm","Value=123456", ENDITEM,"Name=firstName","Value=aaa", ENDITEM,"Name=lastName","Value=bbb", ENDITEM,"Name=address1","Value=ccc", ENDITEM,"Name=address2","Value=ddd", ENDITEM,"Name=register.x","Value=79", ENDITEM,"Name=register.y","Value=13", ENDITEM,
LAST);web_image("button_next.gif","Src=/WebTours/images/button_next.gif","Snapshot=t13.inf",
LAST);lr_end_transaction("registered",LR_AUTO);return0;}
我们发现软件有一个bug,就是密码和确认密码没有加密,自己写系统的时候一定要注意不要犯该错误。
事务之间也可以进行嵌套,这里不做详细说明,请感兴趣的同学自行上网学习。
3.3.2.2 插入集合点
插人集合点是为了衡量在加重负载的情况下服务器的性能情况。在测试计划中,可能会要求系统能够承受1000人同时提交数据,在LoadRunner中,可以在提交数据操作前面加入集合点,这样当虛拟用户运行到提交数据的集合点时,LoadRunner就会检查同时有多少用户运行到集合点,如果不到1000人,因为每个虚拟用户的速度不一致,LoadRunner就会命令已经到集合点的用户在此等待,当在集合点等待的用户达到1000人时,LoadRunner命令1000人同时去提交数据,从而达到测试计划中的需求。实现真正意义上的高并发。
注意:集合点经常和事务结合起来使用。集合点只能插入到Action部分,vuser_ init
和vuser_end中都不能插入集合点。
集合点应该放在事务之前。
点击Insert——>Rendezvous,在事务之前插入集合点,在弹出的菜单中输入集合点的名字,点击Ok,如图:
集合点的语句如下:
lr_rendezvous("register");
在脚本中插入集合点,只是提醒这里有一个集合点而已,在vugen中并没有多个用户,所以插入集合点之后,需要在controller中进行并发数等设置。
将该测试脚本添加到Controller中,点击Scenario——>Rendezvous,在弹出的菜单中,可以看到自己设置的用户数,默认是进入场景时设置的用户数,我们可以点击某个用户,然后点击Disable VUser按钮把这个用户删除,如图:
点击Policy,进入集合点释放策略设置,如图:
百分比虚拟用户都到集合点位置:用作高并发的用户是(自己设置的那个数量)所有用户,不管是初始化、运行还是死亡的,但是虚拟用户的速度不一致,可能有时候有一些用户都死亡了,到达集合点的用户数量(加上死亡的)才满足要求,放行时,实际用户数量和设置的用户数量不一致,实际用户数量少于设置的用户数量,所以该集合点就报废了,一般不用这个。
百分比运行的用户到集合点位置:用作高并发的用户是运行中的用户,也就是说,当到达集合点的用户达到规定数量了,并且都是运行状态的用户时,才放行。一般选择这个。
固定数目的虚拟用户到集合点位置:前两个用户数量都是百分比形式的,这个是设置固定用户数量,当达到这个固定数量时,立刻放行,一般也不用这个。
虚拟用户的超时设置:当第一个用户到达集合点后,如果在规定的时间内,一直没有满足条件的用户到达集合点,集合点就会自动放行,不再等待。
所有选项都设置好之后,就可以运行场景,查看结果了。
我们选中测试脚本,然后点击左上角的
可以对该脚本的虚拟用户数量进行设置,以及查看虚拟用户状态,如图:
因为我这里刚刚跑完场景,所以所有用户都是停止的,可以对虚拟用户进行添加和删除。
对虚拟用户设置完保存之后,开启场景运行,查看用户状态,如图:
我们可以看到,以及有5个用户到达集合点了(Rendezvous(register)),我们也可以通过Scenario Groups查看虚拟用户运行状态,如下图:
可以发现我们这里事务和集合点都报错了,因为我们十个用户都去注册同一个账号,是肯定会报错的,后面我们进行参数化之后就不会报错了。
3.3.2.3 插入检查点
检查点就相当于断言,检查点的功能主要验证某个界面上是否存在指定的Text对象。在使用LoadRunner测试Web应用时,可以检查压力较大时Web服务器能否返回正常的页面。(reg是注册的意思,要在网页请求之前就进行检查点的注册,检查点函数一般放在页面请求之前,当页面返回之后,拿返回的页面去和检查点对比,查看页面上是否有待检查的文字等,若有则检查成功,否则检查失败)
PS:为什么检查点要放在页面请求之前?因为插入检查点就相当于注册一个检查点,在页面加载出来的同时,在页面中查找注册了检查点的文字或者图片,如果查找到就正常返回,查找不到就报错。因为比较实在页面加载出来的那一刻去进行的,所以要在页面加载之前提前注册检查点,而不能加载之后再注册!
Load runner提供的检查点: 文本检查点: web_ reg. find()
虽然Loadrunner页提供了图像检查点,但是如果文字都显示不出来,更别说图像了。
我们想要使用检查点功能的话,首先得开启检查点,点击Vuser——>Run-time Settings——>Internet Protocol——>Preferences,把Enable Image and text check勾选上,保存设置。如下图:
或者直接菜单栏的:
如何插入检查点:我们可以手动编写代码,也可以在插入函数的地方插入检查点,点击Insert——>new Step,找到我们需要的web_ reg. find(),双击即可弹出该函数的设置界面(如果找不到,下方可以进行搜索),双击打开之后,如下图:
Search for specific Text:匹配单个单词,输入要匹配的单词即可。
Search for Text by start and end of string:匹配一段文本,输入文本首个单词和末尾单词即可。
Search in:在网页那里寻找。
Save count:是否保存匹配到的次数,如果选择了该项,脚本执行结束后,会把匹配到的次数写在日志中。匹配到的次数和你自己填写的数字没有关系,填写的数字只是为了记录你自己觉得会匹配到的次数。
Fail if:如果报错了怎么处理。
设置完之后,单机Ok,生成脚本代码,如下图:
脚本代码如下:
web_reg_find("Fail=NotFound","Search=Body","SaveCount=2","Text=Web Tours",
LAST);
Action(){web_reg_find("Fail=NotFound","Search=Body","SaveCount=2","Text=Web Tours",
LAST);web_url("WebTours","URL=http://127.0.0.1:1080/WebTours/","Resource=0","RecContentType=text/html","Referer=","Snapshot=t10.inf","Mode=HTML",
LAST);//lr_rendezvous("register");//lr_start_transaction("registered");lr_think_time(63);web_link("sign up now","Text=sign up now","Snapshot=t11.inf",
LAST);lr_think_time(8);web_submit_form("login.pl","Snapshot=t12.inf",
ITEMDATA,"Name=username","Value=tang", ENDITEM,"Name=password","Value=123456", ENDITEM,"Name=passwordConfirm","Value=123456", ENDITEM,"Name=firstName","Value=aaa", ENDITEM,"Name=lastName","Value=bbb", ENDITEM,"Name=address1","Value=ccc", ENDITEM,"Name=address2","Value=ddd", ENDITEM,"Name=register.x","Value=79", ENDITEM,"Name=register.y","Value=13", ENDITEM,
LAST);web_image("button_next.gif","Src=/WebTours/images/button_next.gif","Snapshot=t13.inf",
LAST);//lr_end_transaction("registered",LR_AUTO);return0;}
可以编译试试是否有语法错误,没有语法错误就可以进行回放脚本了(若是账号脚本,并且账号以及存在的话,就会报错)。编译按钮如下:
直接运行脚本,脚本远行正常,如下图:
第一行提示该检查点系统接受,认可该检查点,并不意味着检查通过,最后一行提示检查点通过,并显示该字符串匹配到的次数。如果检查不通过的话,会报错,会提示没有找到该字符串,如下图:
3.3.2.4 参数化
脚本参数化,就是针对脚本中的某些常量,定义一个或多个包含数据源的参数来取代,让场景中不同的虚拟用户在执行相同的脚本时,分别使用参数数据源中的不同数据替代这些常量,从而达到模拟多用户真实使用系统的目的。
双击选中需要设置参数化的常量,点击鼠标右键,选择Replace with a Parameter,如下图:
在弹出的菜单中输入参数的名字,参数以文件的形式体现,点击OK:
之后,该常量就被新建的参数所替代:
"Name=username","Value={username}", ENDITEM,
我们点击Vuser——>Parameter List打开参数列表,或者点击菜单栏的
它会自动帮我们创建一个参数列表,列表名字为参数的名字。我们可以在参数列表中设置参数化的数据和运行方式,比如:添加数据行、添加数据列、设置参数选择模式、选择文件格式、选择下一行数据的方式、数据更新模式、模拟运行情况查看等。如图:
因为我们只有一个数据,所以我们这里添加数据行即可,可以直接在上面添加,也可以用记事本打开添加,如图:
添加完成之后,保存并关闭记事本,数据会自动更新到参数列表上,如图:
数据添加完成之后,其他选项基本不用修改,默认即可,如图:
设置完成之后,我们可以模拟一下运行情况,点击 Simulate Parameter,在弹出的菜单中,设置循环的次数,如图:
设置完成之后,点击Simulate,如图:
把模拟菜单关闭,进入Runtime Settings——>Run Logic,把Action运行次数设置为7次,如图:
接下来设置日志显示,这样才能在日志中显示我们用到的参数信息,点击Runtime Settings——>Log,选择Extended log——>Parameter substitution,如图:
保存设置,编译脚本,编译成功之后运行脚本,结果如图:
3.3.2.5 脚本循环设置
爷今天累了,不想写了,直接贴图吧;
选项解释:
看不懂的去看视频(多谢B站大佬),我也是通过视频总结的。地址:
https://www.bilibili.com/video/BV1n7411C7SE?p=38
3.3.2.6 日志设置
这里还有一个Advanced trace是追踪请求。
3.3.2.7 思考时间设置
思考时间单位是秒,比如说以下就是两秒:
lr_think_time(2);
3.3.2.8 错误处理方式
3.3.2.9 线程和进程
如果按进程运行每个Vuser,对于每个Vuser实例都将启动个mdrv进程,都将反复启动同一驱动程序并将其加载到内存中,从而会占用大量的RAM (随机存储器)及其他系统资源。
每个Vuser都按线程运行,这些线程Vuser将共享父驱动进程的内存段。这就消除了多次重新加载驱动程序进程的需要,节省了大量内存空间,从而可以在一一个负载生成器上运行更多的Vuser.
如果更新了vugen的脚本信息,想在Controller里面同步更新脚本的话,先把脚本删除,然后再把修改后的脚本新增进去即可,按钮都在左上角。(菜单栏设置的信息也会同步到Controller中)
解析:
都是30个用户,分别以进程运行每个用户和以线程运行每个用户,看一下任务管理器的界面比较,首先是进程:
接着是线程:
我们可以发现,以线程的方式运行,不会占用很多资源。
3.3.2.10 脚本强化总结
自行观看视频!
https://www.bilibili.com/video/BV1n7411C7SE?p=44
四、Controller教程
使用Controller创建测试场景。创建场景的目的是为了实现真实的负载,也就是让一台或多台机器模拟多个用户,同时执行脚本,对被测应用进行操作或发起请求;
每个LoadRunner的场景都相当于一套负载测试方案,因为它包括了反应业务操作流程的测试脚本,反映系统承受能力的虚拟用户数量,用于平衡测试机自身压力的Load Generator机器及脚本之间的执行顺序等,执行场景的过程就是对系统施压的过程;
4.1 Controller启动方式以及两种场景模式
4.1.1 Controller两种启动方式
(1)使用VuGEN中Toos–>Create Controller Scenario,只是针对当前脚本进行场量的创建,所有资源只有当前脚本可用。
(2)使用Controller的独立程序(桌面图标)启动。
①可以选择场景类型
②可以选择脚本的数量
总结:没有根本上的区别,后期设计界面均可以再调整(一样)
4.1.2 两种场景模式比较
(1)手工场景:手工设置虚拟用户量。加压减压、持续时间和其他内容。如下图:
(2)目标导向型场景:根据设定的目标进行运行。只要设计好目标,其他的用户量时间并发等等都不需要单独设置。如下图:
(3)选择运行的脚本–Loadrunner的脚本。
两种场景的比较:
4.1.3 目标导向型场景
(1)Controller选择场景类型为: Goal-Oriented Scenario
(2)选择测试脚本,放到场景中。如图:
点击OK,进入场景中,如图:
我们看红色箭头指向的两个脚本,每一个的所占用户比例为50%,这个可以进行修改,修改一个之后,另一个和自动修改,反正脚本虚拟用户总和为100%;
目标导向型场景最重要的就是对场景目标的设置,我们点击左下角的Edit Scenario Goal 进入场景目标设置。如图:
(1)我们可以对目标文件进行管理,可以重命名,删除,新增目标文件。新增一个目标文件之后,我们需要选择目标类型,目标导向型场景只有五个供选择的场景,分别是:虚拟用户量、每秒钟点击数、每秒钟事务数、事务响应时间、每分钟页面数。
所以目标导向型场景的单一性体现在这。
设置完目标类型之后,需要设置目标数量值,如图:
(2)每种目标的含义各不相同,因为目标导向型场景用的比较少,所以我们这里只以每秒钟点击数为例,设置每秒钟点击数为100,最好这个数值和目标文件相关联。
(3)接着设置最小虚拟用户数和最大虚拟用户数,这里设置最小虚拟用户数为50,最大虚拟用户数为150,因为目标导向型场景是自动运行的,所以你设置了虚拟用户数也不一定用得到这么多,全看系统自动分配。
(4)Run Time 设置目标达成后,再继续运行多长时间,设置为0的话,目标达成后立即停止。
(5)If target cannot be reacher 如果目标为达成之后进行什么操作,第一点为:停止运行并保存结果;第二点为:继续运行知道目标达成。复选框为达到目标后通知我们,默认勾选。
(6)是否改变思考时间,不勾选的话,系统自定义,看情况是否勾选。
(7)设置Load Behavior,将压力产生方式设置为Automatic
设置完成后点击开始场景运行即可。
总结:目标导向的场景:在目标一定的情况下, 无需做过多的操作。使用简单。所有的操作也只是针对单一目标的行为。
4.1.4 手工场景
手工场景设置主要围绕着一下五点进行设置:
首先打开Controller,选择Manual Scenario,将需要的测试脚本添加进入,如图:
点击OK,进入手工场景。
(1)我们可以在场景中添加以及删除测试脚本,在场景中所有测试脚本都称为一个脚本组,如图:
从左到右分别为,运行场景、脚本的虚拟用户设置、添加脚本组、删除脚本组。
我们可以添加脚本,如图:
可以选择要添加的脚本,电脑中有的都会显示在这。可以设置此运行脚本的虚拟用户数,默认为10个。还可以设置虚拟用户产生的机器,这里默认使用localhost,即本机。点击OK即可。
可以选中需要删除的脚本,点击删除按钮,即可将脚本删除。
(2)还可以设置脚本的虚拟用户,如图:
可以增加虚拟用户和查看虚拟用户,增加虚拟用户界面为:
可以选中增加几个虚拟用户,点击Ok即可添加成功,其他的不在做详细说明。
4.2 多机联合负载
可以在其他电脑上产生虚拟用户对本机的场景进行测试,可以同时多台机器进行运行,就能加大测试压力。
配置多机联合负载。(控制多台计算机运行脚本并返回测试结束数据)
通过Load Generators程序完成。
Load Generators:运行脚本,产生压力数据。
扩展: Loadrunner的安装过程中,三大组件可以单独安装并且Load Generators也可以单独安装。
Load Generator(负载发生器):当控制器 Controller 发出执行命令时,Load Generator 负责和其它的负载机建立起联系 并强制负载机执行。 一个 Controller 通过 Load Generator 来控制多台负载机。控制器通过代理程序(Loadrunner Agent Process)控制负载机运行,需要负载机必须安装 并启动代理程序。启动代理程序后,场景初始化时,控制器会向负载机发送一个二进制文件,该文件中包 括待运行的脚本信息。
一般装了Controller的本机都不运行脚本,都是做数据监控的,所以需要其他机器去运行脚本。
4.2.1 负载机环境配置
要想在其他机器上运行脚本,就得在其他机器上先安装Load Generator。(注意要在同一个局域网的机器,可以用虚拟机),建议直接安装完整Loadrunner,后面方便和agent机联系。
安装教程:双击setup.exe Loadrunner安装程序。
选择Load Generator:
选择安装路径:
等待一段时间,Load Genertor安装完成后,会提示叫重启电脑,重启电脑。
重启之后,需要先关闭防护墙以及杀毒软件。
之后开启Load Generator服务,进入安装目录的bin目录下,找到alagentprocess
双击运行即可,如果成功开启服务,可以在电脑右下方看到一个小雷达:
若是安装了完整的Loadrunner,直接在开始——所有程序——Loadrunner——里面找即可。
负载机ping一下主机(agent)看一下是否能ping通,ping通即可做负载压力测试。(我单独安装Load Genertor没有连接成功,我用的是xp,没有自带.net 的其他包,如果用高版本windows的话,自带.net其他包,应该能成功。若想成功,请自行安装.net 等其他包).
我安装了完整Loadrunner程序之后连接成功了,呜呜呜,泪目!!
4.2.2 进行多机联合负载测试
必须保证负载机开启,并且服务开启(默认会自动开启,如果没有开启则按照我上面的方法去开启)
或者访问:https://blog.csdn.net/weixin_42517691/article/details/120308120
首先在主机的Controller上配置负载机的ip信息,选中要在负载机上运行的脚本,点击Load Genertors栏,点击Add,如图:
或者可以点击左上角的
在弹出的菜单中管理全部可用的负载机,增加、删除、测试连接等。如图:
点击Add即可添加负载机,在添加的菜单中输入负载机的ip地址,点击OK,添加成功,如图:
添加之后,可以选中负载机,点击Connect 进行连接测试,若状态为Ready即为连接成功,否则连接失败,连接成功才能进行测试。如图:
连接成功之后在测试脚本那选择想要进行负载的机器,如图:
对环境进行设置之后,记得保存环境。
开启环境环境运行,如图:
虚拟用户设置这里,我们可以看到产生虚拟用户的负载机ip地址,如图:
如果我们真的用了负载机来运行脚本,运行结束后,会返回运行结果,如图:
4.3 设置场景的运行模式
上面有两种场景调度方式,分别是Scenario和Group。
Scenario:无论场景中的脚本数量有多少,统一调度和远行,就是同时一起跑的意思,脚本之间没有运行的先后顺序。
Group:可以设置脚本运行的先后顺序,比如说,脚本a的输出是脚本b的输入,这时候就应该让脚本a先跑,之后再跑脚本b。
老师教程没废话的并且基本上不会出问题的我就直接让你们去看视频了(其实是我想偷懒(doge) )),视频地址:https://www.bilibili.com/video/BV1n7411C7SE?p=50
4.4 测试运行以及规格设计
Start Vusers:虚拟用户进入场景设计,以上含义为总共30个虚拟用户,每15秒进入2个,可以双击进行编辑,设置速度。
Duration:脚本总运行时间,不包括虚拟用户进入和退出的时间。双击可以进行设置。
Stop Vusers:虚拟用户退出场景设计,每30秒退出5个。
主要针对以上地方进行设计,话不多说,视频地址:
https://www.bilibili.com/video/BV1n7411C7SE?p=51
https://www.bilibili.com/video/BV1n7411C7SE?p=52
设置完加压减压设计之后,可以再右下角的图标看到整个执行流程图:
如果用Group运行模式的话,可能图是这样的:
每条线分别为一个脚本,按顺序执行,线条可以点击哦,点击之后可以查看该脚本的运行信息。
4.5 IP欺骗
当运行场景时,虛拟用户使用它们所在的LoadGenerator的固定的IP地址。同时每个Load Generator.上运行大量的虚拟用户,这样就造成了大量的用户使用同一IP 同时访问一个网站的情况,这种情况和实际运行的情况不符,并且有一些网站会根据用户IP来分配资源,这些网站会限制同一个IP的登录、使用等。为了更加真实的模拟实际情况,LoadRunner允许运行的虚拟用户使用不同的IP访问统–网站,这种技术称为“IP欺骗”。
启用该选项后,场景中运行的虚拟用户将模拟从不同的IP地址发送请求。
需要使用ip欺骗的原因:
1、当某个IP的访问过于频繁,或者访问量过大是,服务器会拒绝访问请求,这时候通过IP欺骗可以增加访问频率和访问量,以达到压力测试的效果。
2、某些服务器配置了负载均衡,使用同一个IP不能测出系统的实际性能。LR中的IP欺骗通过调用不同的IP,可很大程度上的模拟实际使用中多IP访问和并测试服务器均衡处理的能力。
3、有一些网站会限制同一个用户同一个IP 的登陆。为了更加真实的模拟实际情况,LoadRunner允许运行的虚拟用户使用不 同的IP 访问同一网站。
该内容参考自:http://t.zoukankan.com/zhangyublogs-p-4956412.html
若侵权,请联系我删除!
注意: IP Spoofer(IP欺骗)在连接Load Generators 之前启用。要使用IP欺骗,各个Load Generator机器必须使用固定的IP,不能使用动态IP(即DHCP)。
首先启动Loadrunner自带的ip欺骗配置工具,开始——所以程序——HP Loadrunner——Tools——IP Wizard。如果本机没有配置静态IP,就会报错,如下:
到网络设置中将IP地址设置为静态即可(我这里用的是负载机),如图:
第一步:配置好静态IP之后,重新打开IP Wizard,如图:
create new setting 创建新的设置:当第一次使用IP欺骗或已经释放了添加的IP时,就需要选择这一项创建新有设置。
Load previous settings fro 读取IP列表文件:从以前设置的IP地址列表中读取IP地址。
Restore original setting 释放已经设置的IP:释放已经添加的IP 地址。
选择默认选中项:create new setting (创建新的设置) ,点击“下一步”:
输入本机IP地址,点击下一步:
该页面列出本机可用的IP地址,默认只有本机的,可以添加IP地址,点击Add:(使用IP欺骗的话,一台主机最多能用多少IP地址取决于本机IP网段最多有多少IP地址,网络分为A类,B类,C类三大类,每一类容纳的都不一样,自己回顾计算机网络)
Class C、Class B、Class A 表示,我们要使用是的A类、B类还是C类IP地址。根据自己本机的IP地址类型去选择。(C类最多只能模拟255 个IP,如果你的需要更多,那么就需要使用A 类或B类)
from ip 输入框中输入起始ip,添加的IP地址要和本机同网段,所以这里填写和自己同网段的起始地址。
Number to 输入框中输入ip地址的个数,也就是说我们需要生成多少个用于欺骗的IP。(我上面的配置是从1开始,按顺序生成10个,生成的IP地址是在该网段下,没有被其他主机使用的IP地址,所以不一定是按顺序的,有一些IP地址可能以及被使用了,就不能被添加)
Submask 根据IP类型输入正确的子网掩码。
选中“verify that new ip addresses are not already used”,点击“OK:
此时IP Wizard会自动按照设置生成IP地址,并且将已经占用的IP列出。点击完成。
点击save as按钮,可以将我们设置的IP 保存成一个文件,以后再设置的时候,是在第一步里,我们可以选择第二个选项(Load previous settings fro),从文件导入IP 。
点击OK,IP Wizard开始帮我们成成IP 。
在命令行输入ipconfig,查看IP是否配置成功:
可以看到IP以及配置成功,配置成功之后,就可以开始进行IP欺骗了。
我们想要进行IP欺骗,首先要在Controller中打开IP欺骗,勾选Scenario——Enable IP Spoofer。我们可以在右下角看到一个提示:
接下来,设置脚本和场景都以线程方式运行:
脚本如何设置前面以及说过,不在重复。
场景里面设置,首先点击Tools,勾选专家模式(Expert Mode),然后打开Options,找到General,如果不勾选Expert Mode的话,是找不到的,把运行IP地址模式改成,一个线程运行一个IP,即第二项,点击OK。
虽然我已经启用IP欺骗了,但是我们怎样才知道那些IP被使用了呢?我们需要对日志进行设置,在测试脚本中对日志进行设置,如果我们以及将日志添加进了Controller,我们可以选择要设置的脚本,点击:
就可以修改脚本的Runtime settings了。打开之后,日志设置如图:
点击OK,设置成功。开启场景运行,我用的是负载机做IP欺骗:
场景运行结束之后,或者运行过程中可以看到,每个用户用的访问IP,打开虚拟用户设置,选中要查看的虚拟用户,右键点击 Show Vusers Log:
就可以看到生成该虚拟用户的IP了。
运行完脚本之后,我们就可以释放被占用的IP了,打开IP Wazard,选中Restore original set,点击下一步,如图:
输入本机IP,点击下一步:
一路点击下一步,OK,或者完成即可,最好控制太会自动删除占用的IP,删除完之后重启机器。即可删除成功,记得把机器IP地址调回动态获取哦。
以上方式为删除全部占用IP,还有一种方式为删除指定IP,这里不做详细说明,给个图自行体会:
4.6 Controller资源监控
我们在Controller运行界面看到有这么一个地方:
这里是对Controller的资源进行监控的,话不多说,直接给视频链接:
https://www.bilibili.com/video/BV1n7411C7SE?p=56
56、57、58、62、63、64均是。
我的另一篇博客有详细说明:https://blog.csdn.net/qq_47188967/article/details/124585766
五、Analysis教程
LoadRunner提供分析和报告工具- -Analysis能够打开这些结果数据,帮助用户查找到性能问题并追溯原由。
直接上视频链接:https://www.bilibili.com/video/BV1n7411C7SE?p=66
66、67、68
六、测试实例
视频链接:https://www.bilibili.com/video/BV1n7411C7SE?p=59
59、60、61
最后我想提醒一下大家,Loadrunner按道理来说是有四种文件类型的,分别为测试脚本文件、场景文件、场景运行结果文件以及结果分析文件。请大家注意保存。这里我要说一下场景运行结果文件如何保存,点击工具栏的 Results—Results Settings,设置运行结果保存路径,点击OK即可。下次直接在Controller中Ctrl + S,会同时保存场景文件以及场景运行结果文件。
七、总结
Loadrunner是一个性能测试工具,可以对网站等进行性能,负载,压力测试,通过对Loadrunner的学习,让我了解并学习了性能测试的步骤,体会到了其中的乐趣,受益匪浅!
版权归原作者 爱吃雪糕的小布丁 所有, 如有侵权,请联系我们删除。