loadrunner

二、loadrunner的基础

1、loadrunner组成

loadrunner是一个套件,是由多个子工具组成的

virtual user generator:虚拟用户脚本生成器,就是录制脚本、调试脚本的。

controller:中央控制器,负责场景(运行的脚本、用户数量、运行逻辑等)设置和运行的。

analysis:结果分析器,对性能测试的结果进行图表的分析,更加直观地展示测试数据。

load generator:负载生成器,类似肉鸡,生成虚拟用户的、运行脚本的场所。

proxy:代理,协调不同负载生成器的用户,步调一致、协同工作。

2、loadrunner的工作流程

在整体流程中的阶段划分上和功能测试差别不大,但性能测试的流程要高度结合工具进行。

1、指定测试计划和性能测试需求分析:

预计有多少并发用户连接到系统

使用什么样的通讯装置

通讯装置能够达到的最大吞吐量

数据库服务器的配置请求

通讯装置能够支持的最大并发用户量

完成某个交易所需要的时间是多少(交易响应时间指标)

确定一些硬件(cpu、内存类型、大小等)和软件(数据库链接池、jvm等)的配置

运行过程中交易的成功率的指标(不能低于千分之995)

full GC一般低于半小时清理一次算正常

2、设计性能测试用例:

主要是将性能测试的交易(业务步骤)和性能指标结合形成 测试用例。

单交易场景测试用例。

混合交易场景测试用例。

3、录制(开发)性能测试脚本 -- virtual user generator

按照测试用例中的业务步骤去录制即可,使用loadrunenr、jmeter、fiddler(导出lr脚本)。

录制完成需要进行二次开发,要让他更加健壮,能够更好地分析。

4、设计性能测试场景 -- controller

设计场景、运行场景、监控场景,回收、管理测试数据的工具。

场景的内容:用户数量、运行的脚本、压力逻辑(压力产生、压力运行、压力消失逻辑)

5、性能测试结果分析 -- analysis

对结果进行图表分析,生成一个可视化的标准性能测试报告。

3、工作原理

loadrunner_第1张图片

一、基本脚本录制

启动virtual user generator并新建一个工程项目和脚本。

loadrunner_第2张图片

1、选择协议

为什么要选择协议?

只有指定了协议,才能从抓到报文中去分析数据内容,才能正确地转化为你希望的脚本。

loadrunner_第3张图片

single protocal:单协议,你的被测系统只用到了一种协议,就从这个里面选,比如web-http/html

multiple protocols :多协议,一个web系统可能包括不止一个协议,就需要在此位置选择

mobile and IoT:移动端协议

2、创建项目

loadrunner_第4张图片

修改脚本的名称和保存位置,点击create创建即可。

loadrunner_第5张图片

3、开启录制并设置录制选项

录制的业务:

webtours系统的首页打开

登录:jojo、bean

退出登录

启动录制:

loadrunner_第6张图片

录制设置:

loadrunner_第7张图片

如果浏览器选择的是chrome或者firefox,启动fiddler代理(不启动代理,浏览器卡在首页,刷新不出来),再重新录制即可。

点击start recording启动录制,会打开ie浏览器并打开webtours系统的首页,还会弹出一个录制浮动框(录制过程中方便控制用的)

loadrunner_第8张图片

4、录制中设置(其实就是在浮动框上的设置)

选择登录、退出业务脚本录制的文件为Action.c文件,浮动框上切换一下即可

5、停止录制

停止录制:录制完成,业务正确,点击停止,vugen会将抓到的报文转为c语言代码

暂停录制:录制未完成,需要暂停一会,回来继续录制,暂停之后不抓新的报文

取消录制:录制错误,不想保存报文和脚本,需要重新录制。

5、停止录制

停止录制:录制完成,业务正确,点击停止,vugen会将抓到的报文转为c语言代码

暂停录制:录制未完成,需要暂停一会,回来继续录制,暂停之后不抓新的报文

取消录制:录制错误,不想保存报文和脚本,需要重新录制。

6、自动生成性能测试脚本

停止录制之后,会自动生成性能测试的脚本,c语言的语法格式,写入到对应的.c文件中。

loadrunner_第9张图片

vuser_init : 只运行一遍,在脚本开始的时候的运行

action:业务逻辑脚本位置,可以循环执行

vuser_end: 只运行一遍,在脚本结束的时候运行

7、回放脚本

把c语言的脚本重新运行一遍(和自动化脚本的回放)。

和UI自动化脚本的差异:

识别页面元素,定位页面元素、操作页面元素的过程。

性能测试脚本更关注的协议报文,和页面元素没关系。

直接回放会出现session过期的问题。

loadrunner_第10张图片

需要使用关联技术处理一下,就使用自动关联技术。

loadrunner_第11张图片

再回放一遍脚本,就可以通过了。

loadrunner_第12张图片

添加回放时候的runtime viewer:

loadrunner_第13张图片

保存退出,再运行一遍看效果。

二、使用fiddler抓包转LR脚本

不管是fiddler还是vugen工具录制,都是要抓取报文,然后将报文按照LR的格式转化为C语言的脚本

1、使用fiddler抓包

录制的业务:

webtours系统的首页打开

登录:jojo、bean

退出登录

在fiddler工具设置主机过滤,将localhost主机的内容展示出来,其他的过滤掉。

loadrunner_第14张图片

选择请求,保存请求到文件。

loadrunner_第15张图片

保存未saz文件备用。

2、Vugen工具设置

创建新的脚本,点击开始录制,设置如下。

loadrunner_第16张图片

点击开始录制,就可以直接将报文转为LR的脚本了。

回放脚本,通过。

三、脚本的二次开发

脚本中用户名改为一个错误值,运行仍然能通过,为什么?

因为回放脚本仅仅是将脚本中对应的请求重新往服务器发一遍,至于发完之后的响应没有做判断。

当前的pass仅仅是没有语法错误,并不表示你的业务逻辑是正确的。

那需要在脚本中进行二次开发,添加一些要素进来,让脚本更加健壮:

添加关联

添加检查点(断言)

添加事务(交易)

添加思考时间

添加参数化

添加集合点

1、常见概念

虚拟用户:

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 : 检查点

和之前自动化测试中的断言是一个概念,就是为了判断脚本运行之后的逻辑结果是否正确的。

2、事务的使用

要想使用事务,要先确定你关注的是哪些业务(你的性能指标是什么)。

假设:我关注的webtours的登录业务的响应时间

1、要将脚本中对应登录事务的代码要确定出来(把他看作是一个登录事务)

    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);

2、在改代码运行之前添加开始事务

lr_start_transaction("loginTrans");

3、添加结束事务,用于停止事务并统计时间差

lr_end_transaction("loginTrans",LR_AUTO);

LR_AUTO:自动根据检查点的成功与否,来确定事务是通过还是失败,用来统计事务成功率的

LR_PASS:不管怎么样,事务都是通过状态

LR_FAIL:不管怎么样,事务都是失败状态

注意:

开始和结束事务必须是成对出现的,不要交叉使用。

按照事务的名称确定是否成对。

4、如下截图就是在LR中定义好的登录事务

loadrunner_第17张图片

5、运行脚本,查看响应时间

如果想要看到日志记录中的响应时间数据,需要设置

loadrunner_第18张图片

运行脚本,查看结果

loadrunner_第19张图片

during time:开始到结束之间的所有时间,可以作为登录事务响应时间来使用

wasted time:脚本运行本身消耗的时间,也可以使用(during time-wasted time作为事务响应时间)

你可能感兴趣的:(fiddler)