二、loadrunner的基础
loadrunner是一个套件,是由多个子工具组成的
virtual user generator:虚拟用户脚本生成器,就是录制脚本、调试脚本的。
controller:中央控制器,负责场景(运行的脚本、用户数量、运行逻辑等)设置和运行的。
analysis:结果分析器,对性能测试的结果进行图表的分析,更加直观地展示测试数据。
load generator:负载生成器,类似肉鸡,生成虚拟用户的、运行脚本的场所。
proxy:代理,协调不同负载生成器的用户,步调一致、协同工作。
在整体流程中的阶段划分上和功能测试差别不大,但性能测试的流程要高度结合工具进行。
1、指定测试计划和性能测试需求分析:
预计有多少并发用户连接到系统
使用什么样的通讯装置
通讯装置能够达到的最大吞吐量
数据库服务器的配置请求
通讯装置能够支持的最大并发用户量
完成某个交易所需要的时间是多少(交易响应时间指标)
确定一些硬件(cpu、内存类型、大小等)和软件(数据库链接池、jvm等)的配置
运行过程中交易的成功率的指标(不能低于千分之995)
full GC一般低于半小时清理一次算正常
主要是将性能测试的交易(业务步骤)和性能指标结合形成 测试用例。
单交易场景测试用例。
混合交易场景测试用例。
按照测试用例中的业务步骤去录制即可,使用loadrunenr、jmeter、fiddler(导出lr脚本)。
录制完成需要进行二次开发,要让他更加健壮,能够更好地分析。
设计场景、运行场景、监控场景,回收、管理测试数据的工具。
场景的内容:用户数量、运行的脚本、压力逻辑(压力产生、压力运行、压力消失逻辑)
5、性能测试结果分析 -- analysis
对结果进行图表分析,生成一个可视化的标准性能测试报告。
启动virtual user generator并新建一个工程项目和脚本。
1、选择协议
为什么要选择协议?
只有指定了协议,才能从抓到报文中去分析数据内容,才能正确地转化为你希望的脚本。
single protocal:单协议,你的被测系统只用到了一种协议,就从这个里面选,比如web-http/html
multiple protocols :多协议,一个web系统可能包括不止一个协议,就需要在此位置选择
mobile and IoT:移动端协议
2、创建项目
修改脚本的名称和保存位置,点击create创建即可。
3、开启录制并设置录制选项
录制的业务:
webtours系统的首页打开
登录:jojo、bean
退出登录
启动录制:
录制设置:
如果浏览器选择的是chrome或者firefox,启动fiddler代理(不启动代理,浏览器卡在首页,刷新不出来),再重新录制即可。
点击start recording启动录制,会打开ie浏览器并打开webtours系统的首页,还会弹出一个录制浮动框(录制过程中方便控制用的)
4、录制中设置(其实就是在浮动框上的设置)
选择登录、退出业务脚本录制的文件为Action.c文件,浮动框上切换一下即可
5、停止录制
停止录制:录制完成,业务正确,点击停止,vugen会将抓到的报文转为c语言代码
暂停录制:录制未完成,需要暂停一会,回来继续录制,暂停之后不抓新的报文
取消录制:录制错误,不想保存报文和脚本,需要重新录制。
5、停止录制
停止录制:录制完成,业务正确,点击停止,vugen会将抓到的报文转为c语言代码
暂停录制:录制未完成,需要暂停一会,回来继续录制,暂停之后不抓新的报文
取消录制:录制错误,不想保存报文和脚本,需要重新录制。
6、自动生成性能测试脚本
停止录制之后,会自动生成性能测试的脚本,c语言的语法格式,写入到对应的.c文件中。
vuser_init : 只运行一遍,在脚本开始的时候的运行
action:业务逻辑脚本位置,可以循环执行
vuser_end: 只运行一遍,在脚本结束的时候运行
7、回放脚本
把c语言的脚本重新运行一遍(和自动化脚本的回放)。
和UI自动化脚本的差异:
识别页面元素,定位页面元素、操作页面元素的过程。
性能测试脚本更关注的协议报文,和页面元素没关系。
直接回放会出现session过期的问题。
需要使用关联技术处理一下,就使用自动关联技术。
再回放一遍脚本,就可以通过了。
添加回放时候的runtime viewer:
保存退出,再运行一遍看效果。
不管是fiddler还是vugen工具录制,都是要抓取报文,然后将报文按照LR的格式转化为C语言的脚本
1、使用fiddler抓包
录制的业务:
webtours系统的首页打开
登录:jojo、bean
退出登录
在fiddler工具设置主机过滤,将localhost主机的内容展示出来,其他的过滤掉。
选择请求,保存请求到文件。
保存未saz文件备用。
2、Vugen工具设置
创建新的脚本,点击开始录制,设置如下。
点击开始录制,就可以直接将报文转为LR的脚本了。
回放脚本,通过。
脚本中用户名改为一个错误值,运行仍然能通过,为什么?
因为回放脚本仅仅是将脚本中对应的请求重新往服务器发一遍,至于发完之后的响应没有做判断。
当前的pass仅仅是没有语法错误,并不表示你的业务逻辑是正确的。
那需要在脚本中进行二次开发,添加一些要素进来,让脚本更加健壮:
添加关联
添加检查点(断言)
添加事务(交易)
添加思考时间
添加参数化
添加集合点
虚拟用户:
virtual user:虚拟用户
就是模拟出来的,能够替代人为做一些业务的用户,是脚本执行的实体。
虚拟用户是计算机内的一个进程或者线程(LR支持两种,Jmeter只支持线程)。
虚拟用户脚本:
virtual user script:虚拟用户脚本
是使用vugen工具录制的系统业务步骤脚本,是虚拟用户执行的对象,就是回放(读)脚本。
LR中支持多种语言的脚本输出,如java、c,默认都是c语言脚本。
思考时间:
think time:思考时间
模拟真实的业务场景,在脚本中添加的一种等待的机制。
0思考:不等待,以尽快的速度发完请求,目的是发现你的系统的最大能力的测试。
事务:
transaction:交易、事务
在loadrunner的脚本中以transaction来体现交易(事务)的概念
用于确定交易(事务)所占用的时间,是个端到端的计时单位,是由一对方法组成(一个开始时间戳,一个结束时间戳,可以计算时间差,这个时间差就是该交易的响应时间)。
lr_start_transaction()
lr_end_transaction()
集合点:
是为了人为的创建一个绝对并发的场景,产生并发的机制,模拟用户并发访问系统的效果。
检查点:
check point : 检查点
和之前自动化测试中的断言是一个概念,就是为了判断脚本运行之后的逻辑结果是否正确的。
要想使用事务,要先确定你关注的是哪些业务(你的性能指标是什么)。
假设:我关注的webtours的登录业务的响应时间
web_submit_data("login.pl", "Action=http://localhost:1080/cgi-bin/login.pl", "Method=POST", "RecContentType=text/html", "Referer=http://localhost:1080/cgi-bin/nav.pl?in=home", "Snapshot=t2.inf", "Mode=HTML", ITEMDATA, //CorrelationParameter来替换之前的常量 "Name=userSession", "Value={CorrelationParameter}", ENDITEM, "Name=username", "Value=aaaa", ENDITEM, "Name=password", "Value=bean", ENDITEM, "Name=JSFormSubmit", "Value=off", ENDITEM, "Name=login.x", "Value=59", ENDITEM, "Name=login.y", "Value=13", ENDITEM, LAST);
lr_start_transaction("loginTrans");
lr_end_transaction("loginTrans",LR_AUTO);
LR_AUTO:自动根据检查点的成功与否,来确定事务是通过还是失败,用来统计事务成功率的
LR_PASS:不管怎么样,事务都是通过状态
LR_FAIL:不管怎么样,事务都是失败状态
注意:
开始和结束事务必须是成对出现的,不要交叉使用。
按照事务的名称确定是否成对。
如果想要看到日志记录中的响应时间数据,需要设置
运行脚本,查看结果
during time:开始到结束之间的所有时间,可以作为登录事务响应时间来使用
wasted time:脚本运行本身消耗的时间,也可以使用(during time-wasted time作为事务响应时间)