性能测试工具---loadrunner
1.什么是参数化
参数化:把固定的一个值,变成动态、可变的数组,把数组的值进行值传递。数组大小可控制。
2.为什么要使用参数化,2个原因。
1、数据库校验字段值的唯一性。(数据库修改字段的唯一性,可避免参数化)
2、应用程序不允许用一个值反复操作。(开发调整不允许一个值反复操作,可避免参数化)
3、避免数据库的查询缓存,保证测试结果的真实性。(数据库在执行一条SQL查询操作时,先进行语法检查、语义分析(写法是否正确、表是否存在、是否有权限),生成执行计划,按执行计划做查询操作,如果查询的数据在数据库内存,返回数据;如果不在内存,需要从硬盘里把数据放到硬盘,返回数据,同时会缓存这条SQL的执行计划和结果。如果同样的查询操作,就直接在查询缓存里返回)(数据库关掉缓存,可避免参数化)
3.参数化有九种取值策略:
顺序+迭代,顺序+每次遇到,顺序+once
随机+迭代,随机+每次出现,随机+once
唯一+迭代,唯一+每次出现,唯一+once
随机和顺序他们取值是总的参数化内的值,但是在唯一的时候每个用户的值都是不一样的,没有交集,是总的参数化内的子集。
4.关联定义:无需要不关联,所以肯定需要用到 用到就要关联
关联:将服务器返回的、动态的、变化的值,把它保存为一个参数,以便后面需要使用这个参数的地方进行使用。(批量替换使用)
5.什么值需要进行关联:
a.服务器校验该值的合法性;
例子:session、cookie、token、时间戳(formhash等)、验证码(图片验证码、短信验证码、邮箱验证码等)等等。
验证码(①.自己写JS,解析图片,获取验证码;②.改成万能验证码)
请求成功不代表业务测试成功,要注意看回放页面是否有报错。
b.数据库,后续需要对该值进行增删改查操作。(一定是int类型的数字)
例子:insert操作 插入的值需要与其他表的数据建立关联关系/对应关系,需要进行关联。
delete操作 看请求里非手动输入的ID有多少个即可确认是否需要做关联。
update操作 where条件
select操作 where条件
6.关联函数放在什么位置?
服务器返回需要关联的参数值请求之前。
①.查看源文件;②.F12捕获(抓包);③.Tree视图的Response Body里找(/WebTours/nav.pl?in=home);④.在日志里打印服务器返回的数据(Run-time Settings→Log→Extcndcd log→Data returned by server)。
所有reg开头的函数都是预注册函数。
为什么关联函数要放在server返回值之前呢?脚本是按顺序执行的话,按理说不是返回后才能知道动态值吗?
关联函数是预注册函数;预注册:先声明后使用。
7.关联函数怎么写?
日志(Replay Log)里的内容:绿色是请求、蓝色是参数或者关联函数请求的值、红色是错误信息;
在Tree里找不到,就到扩展日志里找。(扩展日志里的内容捕获得比Tree里的内容更多)。
①.最快速的关联:右键关联。找到需要关联的值,右键把它保存为一个参数。(用左右边界出现概率较多的值)
Create Praamter---创建参数不替换 Create Correlation---创建关联函数并替换
②.在Insert→new step(Alt+Insert/右键)里输入关联函数,根据Tree视图的Response Body获取到的左右边界,设定好左右边界值。
③.用日志里打印服务器返回的数据(Run-time Settings→Log→Extcndcd log→Data returned by server),获取到的左右边界,在Insert→new step(Alt+Insert/右键)创建关联函数。
④.用IE→F12,获取到的左右边界,在Insert→new step(Alt+Insert/右键)创建关联函数。
⑤.用IE→查看源文件,获取到的左右边界,在Insert→new step(Alt+Insert/右键)创建关联函数。
web_reg_save_pram_ex数组 正则表达式的时候需要用这个函数)用Ordinal选定第一个值,如果不选定则用web_reg_save_pram默认第一个。
Ordinal:如果填写数字,那么说明从迒回的记录中取出对应顸序的值,如果填写All的话将会返回所有内容。
8.接口
我理解的:是开发人员封装好的,只需要往这个方法里传递需要的东西,比如,这个接口说,你给我传一个id,我才能给你返回你要查询的值,这时候,你就在接口后面加一个id,就OK了
App本身相当于web前端,http
开发和开发之间一定有一个接口说明文档,通过接口说明文档进行对接
http接口一般用postman测试
lr写接口时,按照条件将参数输入到地址后面,然后去网页地址栏试一下,看能不能返回信息,如果可以,再去lr里写脚本。回放的时候,把日志第二项勾选,看有没有打印结果,有就行,即使是乱码也没有关系。
Webservices
你工作时测接口吗?测什么类型的接口:http、
soapui,专业版既能做功能又能做性能,开源版本功能小一些,不能做性能测试,不能做值得传递
有一种方法是用关联函数获取这个状态码,如果是200,就代表请求正确,事物成功了,我们现在测接口,一般都这么判断。一般开发会在接口文档里写。
纯接口的话按照接口说明文档写,接口的url给你、拼参数(lr是web_submit_data,jm是http协议),https对jm是最好做的,把协议改成https,走443端口就可以了;
9.为什么参数化、关联、检查点、集合点、思考时间、事务、TPS(单位时间内,每秒通过的事务数,通过的总事务数/总耗时)、响应时间RT(事务的响应时间,end-start的时间)。
事务:事务是Loadrunner性能测试结果的基础,没有事务就没有响应时间。事务是自己定义的,一般只放一个请求,录完也可以加事务。开始事务和结束事务的事务名要一致。事物是自己定义的,想放几个放几个。事物是成对出现的,start,end。事物就是计时用的。一般一个事物里面有一个请求,可以有多个。
响应时间running time:就是end减去start的时间,即使系统对请求做出的响应时间
吞吐量:系统在单位时间内处理的请求数量
Tps:每秒通过的事物数。以后订目标,建议用tps
并发:每秒钟有多少个用户在跑,并发时间不包含加载时间。
Lr并发的实质就是多线程
思考时间lr_think_time(7): 等待时间。减少单位时间内向服务器发出的请求数,缓解服务器的压力(lr_think_time(2);等两秒之后再进行下一步。)
(从性能测试实质来说,一般不加think_time;并发量达不到测试要求,为了出测试报告,加think_time。加了think_time,会影响TPS值,前提是TPS值没有到极限。加在一个事务的外面。)
服务器处理能力是恒定的,有极限的一个值。不会因为增加了思考时间,缓解了服务器的压力,就会增加服务器的处理能力。CPU使用率高,任务多,进程多,切片更繁忙。处理的事更多。
thinktime和pacing的区别:两个都是一个等待时间,think time 可以加在任何请求前,Pacing只能加在迭代之间。think time 需要自己加,Pacing之间设置即可。
检查点web_reg_find(放在请求前)或者web_find(放在请求后):(尽量设置数字或者英文)设置检查点,检测脚本是否成功。写的操作不用加(可以通过LR中的contorl中的passed transaction和数据库中做比对),查的操作要加。reg的都是预注册函数,是放在请求前面;没有reg的放在请求的后面。
集合点:lr_rendezvous();
为了更加真实的模拟用户的瞬时并发,等待所有的并发一起执行接下来的操作。
设置集合点策略;集合点设置为100%,则需要所有用户都到集合点时再并发。加了集合点也不能保证后面的请求同时执行,可以提高顺势请求的数量。
抢购、秒杀类似的请求前,加上集合点。
10.做JDBC脚本
推荐用Jemter做JDBC的脚本,测试数据库
Loadrunner连JDBC的方式:1、装驱动;2、录制MySQL脚本;3、加载文件;4、Java Vuser
11.范围:场景(单场景、混合场景、稳定性场景)、接口、功能
一个脚本、接口 单场景(一般10~15分钟) 测试是否达到测试目标
多个脚本、接口 混合场景(一般10~15分钟) 不同的请求,测试线程死锁,数据库死锁
长时间 稳定性场景(至少12个小时) 测试是否有内存泄漏
混合场景和稳定性场景 测试可能出现的问题
性能测试必须三个场景都要测试。
单场景的测试结果更准确。单场景的TPS比混合场景的TPS大。
混合场景放集合点,也是单场景的测试结果更准确。
数据量、磁盘满了等环境因素和数据因素都会影响测试结果。
12.如何测试
1)测试响应时间----------测试多少个并发情况下XXX功能/接口的响应时间。(前提条件是多少个并发)
直接加载多少个并发用户去测试XXX功能/接口,并发运行时间10~15分钟,得出平均响应时间即可。
2)测试最大TPS----------测试XXX功能/接口的最大TPS。(TPS每秒通过的事务数,隐含条件是1s)
直接从1个用户开始测试,通过不断加压(加用户)去测试最大TPS,最大TPS的标志是随着用户的增加,TPS不再增加或者TPS反而减小,那么那个不再增加的TPS或者出现拐点的TPS就是最大的TPS。
3)测试最大并发用户数:测试XXX功能/接口,响应时间在多少秒以内。
用户直接从1开始测试,逐渐加大并发用户数,观察响应时间,直到响应时间达到多少秒,然后继续观察是否稳定,如果稳定了,那么这个并发数就是最大并发数;如果不稳定,那么需要增加或者减少用户。
13.TPS怎么评估?
1)由产品经理或者开发制定;
2)测试要有预估值
a.最精确的来源于线上的日志分析;
b.其次可以用28原则预估(80%的用户会在20%的时间段做同一件事情);例子:100个并发用户,并发运行时间10分钟,预估TPS=80/(2min*60)s
14.std标准方差
把所有曲线时间和平均值做一个比对,曲线波动越大,标准方差就越大,和90%用户响应时间结合用,意思是90%的用户小于这个值的,90%不是平均值。如果标准方差在5以内,那么取平均值,如果标准方差的值比较大,建议用90%的响应时间。
15.同样的请求响应时间不同,原因可能是:
1)缓存 不需要从应用服务器返回;
2)前两个请求都失败了。
16.加压后tps为什么会减少
随着并发的增加,导致负载过大,加到某一个用户数后,tps不再增加或者下降,就是tps的最大值。
随着用户数增加,服务器的负载高了,进程之间切换越来越大,那么cup切换换来越快,可能导致系统处理能力下降。理论来说tps是恒定的,但是也有上述说的可能。
tps处理到极限的时候,如果发送的请求大于处理请求,出现排队情况,响应时间就会越来越长
17.Loadrunner和JMeter区别
Loadrunner的响应时间会比JMeter响应时间短;
JMeter回收垃圾内存,GC会占用Java应用程序的线程(即JMeter的线程);
小规模并发,JMeter响应时间比Loadrunner短;大规模并发,Loadrunner响应时间比JMeter短;
测试时候要加检查点,注意请求是否成功。
Loadrunner的结果比较准确。
18.开发和测试,测试结果不一致。
软件硬件、环境、测试工具是否一致。
19.开发和测试的软硬件、环境以及测试工具等都一致,测试结果有差异。
属于正常现象,因为硬件与并发情况、网络原因会有少许差异,出现差异,取平均值。
20.工具的响应时间是2.9s,服务器日志的响应时间是1.8s。
判断开发那边打断点有没有打错(打计时有没有打错),同事务数同请求下。
21.响应时间图:响应时间是过程①到过程⒓相加。这只是一个最简单的系统架构webserver+db
1和12是负载均衡服务器问题;2和11是负载机到webserver的网络问题;3和9是中间件问题(排队);
4和10是代码问题;5和8是WebServer到数据库的网络问题;6和7是数据库执行问题。
看WebServer、DB的硬件问题,硬件没有问题再看中间件、SQL执行过程,最后看代码。
java程序要加JVM监控。
1)client端开始发送请求,
2)网络传输
3)线程池拿到这个数据之后,用空闲线程来拿这个请求
4)线程拿到之后开始执行这个代码(在5到8执行的时间,4处于空闲状态,挂起,然后9状态给唤醒)
5)通过网络发到数据库
6)数据库连接池拿到这个数据之后开始解析,语法检查、语义分析、open这张表,然后再开始生成执行计划,然后再让这条执行计划去内存里面取数据(黄色是内存)。如果数据在内存里面,直接把数据结果取到返回,如果不在物理内存里,需要从磁盘把数据拿到内存里面,然后再返回。
7)整个dmr处理时间,也就是整条sql语句处理时间
8)WebServer到数据库的网络问题
9)线程的唤醒操作
10)代码继续往下执行,也就是 w=new klkk w.set(jjj)这一步,执行完之后有一个return w,然后给client端
11)网络传输时间
12)一对一的接收的时间。全部接收时间完成client端就响应到了一个正确的结果
开发的响应时间是从st=starttime开始计时,et=endtime结束。
system.out(time is st-et)响应时间是从4开始到10结束。可能4和10也不全,因为4开始还需要执行int a=jjj,可能还有很多
现在我的响应时间是2.9s,开发响应时间是1.8秒,那么慢在哪儿了,1、2、3、11、12,所以可能是client端有问题,可能是网络有问题,可能线程池会有问题(比如拿不到请求)。
如果我测试2.9s,开发服务器日志里是2.8s,这样的响应时间是比较慢的,但是应该没有问题,慢的原因就是服务器处理慢。就是请求处理的慢,问题可能出现在4和10或者6和7这里。
一般来说,工具上的时间和开发的响应时间应该差不多,这样说明负载机、网络、中间件这里是没有问题的。如果相差太多,需要在负载机、网络、中间件这里去排查。
开发日志里时间显示短些,工具里显示大些原因?client端问题,网络问题,webserver问题
环境、数据、工具、脚本、场景都需要一模一样。
性能测试工具---loadrunner的更多相关文章
- 【测试】性能测试及性能测试工具Loadrunner
性能测试简介 软件系统的性能包括很多方面,有执行效率,资源占用,系统稳定性,安全性,兼容性,可靠性,可扩展性等.这些都是可以衡量一个软件系统性能好坏的指标.而性能测试是指通过自动化测试工具去模拟多种正 ...
- 性能测试工具Loadrunner使用经验小结(原创更新版)
1. 引言 1.1. 简介 loadrunner是一种预测系统行为和性能的负载测试工具,它可以轻松创建虚拟用户.创建真实的负载.定位性能问题.重复测试保证系统的高性能 globa-100的注册码:AE ...
- 性能测试工具——LoadRunner篇(一)
一.LoadRunner组件 1.Virtual User Generato——r录制最终用户业务流程并创建性能 2.Controller——组织.驱动.管理并发监控负载测试 3.Analysis—— ...
- 性能测试工具LoadRunner中进程运行和线程运行区别
loadrunner controller将使用驱动程序mmdrv运行Vuser.用户可以在controller的run-time setting中选择Vuser的运行方式, 是多进程方式or多线程方 ...
- 《软件性能测试与LoadRunner实战教程》新书上市
作者前三本书<软件性能测试与LoadRunner实战>.<精通软件性能测试与LoadRunner实战>和<精通软件性能测试与LoadRunner最佳实战>面市后,受 ...
- 性能测试工具LoadRuner你所不知道的内幕
谈到性能测试,大家一定会联想到Jmeter和LoadRunner,这两款工具目前在国内使用的相当广泛,主要原因是Jmeter是开源免费,LoadRunner 11在现网中存在破解版本.商用型性能测试工 ...
- 性能测试工具Jmeter你所不知道的内幕
谈到性能测试,大家一定会联想到Jmeter和LoadRunner,这两款工具目前在国内使用的相当广泛,主要原因是Jmeter是开源免费,LoadRunner 11在现网中存在破解版本.商用型性能测试工 ...
- 杂项-性能测试工具:LoadRunner
ylbtech-杂项-性能测试工具:LoadRunner LoadRunner,是一种预测系统行为和性能的负载测试工具.通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadR ...
- 性能测试学习第二天_性能测试工具概述Loadrunner介绍
性能测试工具概述Loadrunner介绍 http://www.51testing.com/html/42/n-6542.html 其中,T直接影响用户体验时间 性能测试的原理: 记录一个访问过程的通 ...
随机推荐
- Maven实战08_仓库
何为Maven仓库 在Maven世界中.任何一个依赖.插件或者项目构建的输出,都可以称之为构件.例如依赖log4j-1.2.15.jar是一个构件,差价maven-compile-plugin-2.0 ...
- python学习笔记4.2_正则表达式
常用正则表达式:http://tool.chinaz.com/regex/ 1.正则表达式:提供了一种在文本中灵活查找或匹配字符串模式的方法.单个表达式通常被称为regex. 2.python的re模 ...
- 05-1-操作css样式
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 2019-6-14-WPF-shows-that-some-windows-in-multithreading-will-be-locked-in-the-PenThreadWorker-constr...
title author date CreateTime categories WPF shows that some windows in multithreading will be locked ...
- [JLOI2015]战争调度【暴力+树形Dp】
Online Judge:Bzoj4007,Luogu P3262 Label:暴力,树形Dp 题解 参考了这篇blog https://www.cnblogs.com/GXZlegend/p/830 ...
- 复制字符串 _strdup _wcsdup _mbsdup
Duplicate strings.函数定义: char *_strdup( const char *strSource ); wchar_t *_wcsdup( const wchar_t *str ...
- AppServer获取参数的方法
AppServer中从APP_PARAM表中根据param_code获取param_value: appManageService.getParamValueByCode(param_code) -- ...
- 【2019云栖大会】这一场,我们好好聊聊5G和边缘计算
一年一度的科技盛会杭州云栖大会Apsara Conference就要来了9月25-27日数万名开发者将齐聚杭州云栖小镇共同探索人类科技演进的脉搏聚焦面向未来的创新.热点技术话题 5G和边缘计算是201 ...
- CF1140F - Extending Set of Points
题意:对于点集S,定义函数F(S)为对S不断扩展到不能扩展时S的点数.一次扩展定义为如果有一个平行于坐标轴的矩形的三个点在S中,则第四个点加入S. 动态在S中加点删点,每次操作完后求F(S)的值. 解 ...
- Ionic cordova-plugin-splashscreen
1.添加插件 cordova plugin add https://github.com/apache/cordova-plugin-splashscreen.git 2.设置启动画面 在根目录下面r ...