赞
踩
需求调研-环境搭建-脚本编写-准备数据-执行测试-回归调优-测试报告
关联是将服务器返回的数据通过一定的规则过滤出来,将其保存成参数,以供后续代码中使用
当服务器返回的数据是动态变化的,且后续脚本中需要使用这个变化的数据时,才需要做关联
a)通过eclipse等工具手动编写一个Java类,实现JavaSamplerClient接口
b)将要写的代码放到JavaSamplerClient接口对应的实现方法中,如果需要暴露出参数,将参数添加到getDefaultParameters方法中
c)脚本调试通过后,将写好的脚本达成runnable jar,将jar包和依赖的lib文件夹放到Jmeter的lib/ext下,重启Jmeter
d)在Jmeter中添加JavaSampler,选择jar包中的测试类
a)被测接口调用前需要对参数做一些逻辑处理,可以使用BeanShell前置处理器
b)需要对接口的返回值做一些逻辑判断,可以使用BeanShell断言
a)首先线下必须要有专门的性能测试环境
b)线下环境单台机器配置和线上不能相差很大,可以通过单台的机器性能推算出多台机器性能(需考虑一定的性能损耗)
c)如果线下机器配置很差,只能测试出程序有无性能问题,这样线下测试出来的数据对线上没有太大参考意义
d)如果想获取比较准确的线上性能情况,建议最好做线上的性能测试
cpu使用率:<80%
load值:<cpu的核数
系统内存:使用率<80%
磁盘IO:<100%-90%
网络IO:<带宽上限
线程状态:runnable、waitting、timed-waitting、blocked、terminated
最影响性能的是blocked状态(阻塞,锁)的线程,timed-waitting(限时等待)
持久代中主要存放静态数据、常量、类的基本信息等
老年代中主要存放对象的实例和数组等
应用服务器的cpu高,先要看tps和响应时间,如果tps比较高,我们认为是正常的cpu消耗;如果tps比较低,那么往往某些代码过于消耗cpu,可以考虑使用jprofiler分析下
数据库服务器cpu高,往往是因为sql语句执行效率比较低,可以通过对数据库慢查询是监控,结合执行计划进行分析,是否是相关表没有索引或索引未生效
内存泄露的根本原因是Jvm中老年代中存在着大量存活的对象,这些对象不能被GC回收掉,从而占满了整个老年代,造成Jvm一直处于FGC的状态,程序没有响应,服务器报OOM错误
内存泄露主要通过分析老年代中占用空间最大的类都有哪些,然后去代码中找对应的类的创建。通常可以使用jdk提供的jvisualvm和jmap进行堆内存的分析
a)压力机本身性能瓶颈
b)网络IO瓶颈
c)中间件(tomcat/nginx/mysql)连接数限制
b)Java线程的阻塞、等待
e)本系统资源的瓶颈(cpu、内存、磁盘、网络等)
f)其他外部系统响应时间过长,造成本系统的time-wait
一般基本的场景包括:基准测试、单交易测试、混合测试、稳定性测试
其他场景的可选场景:高可用性测试、异常测试等,以及其他的结合各自项目业务的场景
a)调用业务接口构造数据
b)直接写jdbc代码造数据
c)存储过程造数据
tps:每秒事务量,代表了系统的处理能力,tps越高,性能越好
响应时间:从发出请求到接受到系统响应数据所花费的时间,响应时间越短,性能越好
吞吐量:网络上行和下行流量的总和,吞吐量是网络瓶颈定位的重要指标
错误率:在压测过程中系统出现错误的比例
集合点是测试脚本中的一个标记,当每个虚拟用户执行到标记处时,会停留在标记处等待其他的虚拟用户,当达到预期设置的并发数时,标记处的所有用户同时启动执行后续的请求
集合点会产生瞬间高并发,但是也会降低平均压力。所以在压测过程中,如果有要求瞬间高并发的业务,就需要使用集合点,比如抢购,秒杀之类的业务。
没有类似业务则不需要加集合点
一般性能测试都是在局域网内进行,在压测过程中,可以监控到服务器上网卡的流量,判断此流量是否已经达到局域网内网络设备的上限,比如路由器、交换机、网卡等
在这些设备中,一般是服务器网卡网络吞吐量最低。服务器的网卡大多是千兆网卡,换算成MB=1000/8=125MB
通常情况下,cpu使用率和load值是正比关系,即cpu使用率越高,load值越高。但是在一些特殊情况下,也会出现cpu使用率不高,但是load值较高的情况
比如某系统只能使用CPU中的单核运行,它可以占用单核cpu100%,但从整体cpu使用率来看,只是使用了一小部分。而随着并发的增大,单核CPU的任务队列会越来
越长,造成了load值较高
参数化把测试脚本中的请求数据动态化,避免使用单一固定参数进行压测。这也是为了更加真实的模拟用户的请求
buffer和cache都是Linux中的缓存机制,cache里一般会缓存一些文件的内容,buffer会缓存一些需要写入磁盘的数据。
Linux会利用空闲的内存做一些缓存,加快文件的访问速度。如果系统可用内存不足时,Linux会释放掉buffer和cache所占用的内存。
所以内存占用中有大量的buffer和cache也是正常现象
1、如果在脚本中不使用或不判断乱码部分的数据,那可用忽略此问题,因为乱码并不影响性能
2、如果需要使用乱码数据,可以通过压测工具提供的一些方法进行编码转换(如LR的lr_convert_encoding_string函数,Jmeter修改配置文件等方式)
Loadrunner同时支持进程和线程发压。当选择进程时,每个虚拟用户单独启动一个进程,当选择线程时,每50个线程启动一个进程
Jmeter只支持线程发压
进程和线程的主要区别为,进程之间是独享内存的,线程之间是共享内存的。使用进程压测占用的资源会大一些。在高并发下,会减少压测工具自身的异常情况
在测试脚本中,事务定义的业务流程越短越好。同时脚本中不要写过多复杂的逻辑,对于一个复杂的场景,可以考虑把脚本拆解成多个简单的脚本
a> 没有任何途径进行需求调研的情况下,可以跳过需求调研,直接开始压测。
b> 压测完成后,可以把本次压测数据开会讨论,共同决定是否满足性能需求;
c> 或者根据行业内的通用指标规范,比如高频接口响应时间<100ms,低频<200ms的标准来判断
通用类场景:
a> 单接口测试场景
b> 混合接口测试场景
c> 高可用性场景(集群情况下)
d> 网络异常场景(如有必要)
e> 稳定性场景
f> 其他业务相关场景
a> 先了解协议的格式,数据交互
b> 查找压测工具是否支持本协议
c> 如果不支持,通过自己写代码的方式发送协议包进行测试
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。