性能测试概览
什么是性能测试?
性能测试针对系统的性能指标,建立性能测试模型,制定性能测试方案,制定监控策略,在场景条件之下执行性能场景,分析判断性能瓶颈并调优,最终得出性能结果来评估系统的性能指标是否满足既定值.
性能测试计划
测试环境、测试数据、测试模型、性能指标、压力策略、准入准出和进度风险。
性能测试指标:
并发用户数:实际使用系统的用户总数,同时向服务器发送请求的数量.
响应时间:反映完成某个操作所需要的时间。标准的设定从同行业的对比数据,找到使用系统的样本用户且统计.
系统吞吐量:每秒事务数,反应系统处理能力。
响应时间有多大的提升,TPS 有多大的提高,资源有多少的节省。
性能测试工作流程
性能需求指标:时间指标,容量指标,资源利用率指标.
性能模型:业务模型,监控模型.
性能方案:测试环境,测试数据,测试模型,性能指标,压力策略,准入准出,进度风险.
性能监控:系统架构,系统监控,中间件监控,缓存监控,队列监控,负载均衡监控,熔断监控,链路监控.
性能场景执行:基准场景,容量场景,稳定性场景.
性能结果/报告:场景结果整理,监控结果整理,性能整体分析,性能结论,优化建议,运维建议.
性能场景
在既定的环境(包括动态扩展等策略)、既定的数据(包括场景执行中的数据变化)、既定的执行策略、既定的监控之下,执行性能脚本,同时观察系统各层级的性能状态参数变化,并实时判断分析场景是否符合预期。
基准性能场景:每一个业务都压到最大TPS,从而为后续场景做数据比对.
容量性能场景:所有业务根据比例加到一个场景中,在数据,软硬件环境,监控等的配合下,分析瓶颈并调优的过程.
稳定性性能场景:时长,在长时间运行下,观察系统的性能表现,分析瓶颈并调优的过程.
异常性能场景:根据不同的业务结构和部署结构分析而来.
性能分析思路
瓶颈的精准判断(TPS曲线,响应时间的曲线,),线程递增的策略,性能衰减的过程,响应时间的拆分,构建分析决策树,场景的比对.
TPS曲线:多有
线程
线程:线程是程序中的一个执行流,测试中一个线程就是一个虚拟用户。
多线程:多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务.一个进程是由一或多个线程组成,进程只负责资源的调度和分配,线程才是程序真正的执行单元,负责代码的执行.多线程可以提高CPU的利用率.
性能测试工具:
loadrunner和jmeter,前端性能工具推荐webpagetest和Yslow
Linux命令
Top命令
什么是Top
Linux下常用的性能分析工具,能够实时监控系统的运行状态,主要显示系统中各个进程的资源使用情况,并根据cpu及内存等进行排序,类似于windows系统中的任务管理器,可以实时查看系统的各种资源状态。
首先前五行显示的系统资源的总体统计信息:
第一行:类似于update命令,他可以快速简洁的获取系统的负载,依次显示现在时间,多少个用户,系统1分钟、5分钟、15分钟的平均负载。up xx days, HH:MM:系统当前时间和系统已运行时间, 当前登录用户数,系统平均负载可以运行任务的平均数量(3个数值分别统计最近1,5,15分钟的系统平均负载)系统平均负载:单核CPU情况下,0.00 表示没有任何负荷,1.00表示刚好满负荷,超过1侧表示超负荷,理想值是0.7。
第二行:Tasks 任务(进程)系统现在共有的进程数,运行中进程数,休眠中的进程数,停止状态的进程数,僵尸状态进程数。
第三行:cpu状态信息,具体属性说明如下:
0.2% us:用户空间占用CPU的百分比
0.3% sy:内核空间占用CPU的百分比
0.0% ni:改变过优先级的进程占用CPU的百分比
99.6% id:空闲CPU百分比,反映一个系统cpu的闲忙程度,越大越空闲。
0.0% wa:IO等待占用CPU的百分比
0.0% hi:硬中断(Hardware IRQ)占用CPU的百分比
0.0% si:软中断(Software Interrupts)占用CPU的百分比
0.0% st:Steal time虚拟机被hypervisor偷去的CPU时间
第四行:内存信息:
物理内存总量:total 空闲的内存总量:free 使用中的内存总量:used 缓存的内存总量:buffers
第五行(Swap):交换分区
总的交换空间大小;空余空间交换空间大小;已经使用交换空间大小;cached缓冲的交换空间大小
进程列表说明:
PID: 进程pid USER: 拉起进程的用户
PR: 该列值加100为进程优先级,若优先级小于100,则该进程为实时(real-time)进程,否则为普通(normal)进程,实时进程的优先级更高,更容易获得cpu调度,以上输出结果中,java进程优先级为120,是普通进程,had进程优先级为2,为实时进程,migration 进程的优先级RT对应于0,为最高优先级
NI: 进程的nice优先级值,该列中,实时进程的nice值为0,普通进程的nice值范围为-20~19
VIRT: 进程所占虚拟内存大小(默认单位kB) RES: 进程所占物理内存大小(默认单位kB)
SHR: 进程所占共享内存大小(默认单位kB) S: 进程的运行状态 %CPU: 采样周期内进程所占cpu百分比
%MEM: 采样周期内进程所占内存百分比 TIME+: 进程使用的cpu时间总计 COMMAND: 拉起进程的命令
常用参数说明:
M:根据驻留内存大小进行排序;
P:根据CPU使用百分比大小进行排序;
T:根据时间/累计时间进行排序;
d:屏幕刷新间隔时间;
p<进程号>:指定进程
netstat
# 用于显示本机网络链接、运行端口、路由表等信息
netstat
# 参数解释:
# -n 拒绝显示别名,能显示数字的全部转换为数字
# -l 仅列出有在 Listen(监听)的服务状态
# -p 显示建立相关链接的程序名
# -t 显示TCP相关选项
# -u 显示udp相关选项
# -i 显示自动匹配接口的信息
# -c 每隔一个固定时间,执行该 netstat 命令
sar
sar -- (System Activity Reporter 系统活动情况报告)是目前Linux上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告
(1)文件的读写情况
(2)系统的调用的使用情况
(3)磁盘I/O
(4)CPU效率
(5)内存使用状况
(6)进程活动及IPC有关的活动
# 参数说明
# n 和 t 组合定义为次数和采样间隔
# -o file将命令结果以二进制形式放在file中
# options为命令行参数
# -A 所有报告的总和
# -u CPU利用率
# -v 进程、节点、文件和锁表状态
# -r 显示系统内存的使用情况
# -B 内存分页情况
# -b 缓冲区使用情况
#
sar [options][-A][-o file] t [n]
strace
# 是一个集诊、调式、统计与一体的工具,用strace对应用的系统调式和信号传递的跟踪结果来对应用进行分析,以达到解决问题或是了解应用工作过程的目的。
# 参数说明
# -p 跟踪指定的程序
# -f 跟踪由fork子进程系统调用
# -c 统计每一系统调用的所执行的时间,次数和出错的次数
# -t 在输出中的每一行前加上时间信息,-tt时间确定到微秒级。
# -e 输出过滤器,通过表达式,过滤掉不想要的输出
# -o filename 默认将strace的结果输出到stdout,通过-o可以将输出写入到filename文件中
JMeter
概览
Jmeter是什么?
Apache组织使用纯java开发的一个开源免费测试工具,
可以实现接口和性能测试。用于对软件做压力测试,最初被设计用于Web应用测试,但后来扩展到其他测试领域。
可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、 Java 对象、数据库、FTP 服务器, 等等。
能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回期望的结果。
安装配置:
(1)官网下载解压http://jmeter.apache.org/ ,配置环境变量: 在系统变量框,点击“新建”,建立一个变量:JMETER_HOME,值为你解压的jmeter安装路径。
(2)配置classpath=%JMETER_HOME% %JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib/logkit-2.0.jar; 确定即可.
(3)在安装目录bin目录,点击 JMeter.bat 启动 JMeter 工具。
文件目录:
bin目录:主要存放可执行文件,主程序的jar包,配置文件,日志文件等。
常用文件:
jmeter.bat:windows下的应用启动文件。
jmeter.sh:linux下启动文件。
jmeter.log:应用运行的日志文件。
jmeter.properties:系统配置文件,经常需要根据需要修改。
说明:jmeter.bat/jmeter.sh:启动脚本中,可以对Jmeter的启动参数JVM堆内存大小进行配置,默认为512M,建议修改成1024M。* setHEAP=Xms1024m-Xmx1024m*
docs目录:存放Jmeter官方API文档,便于进行二次开发。
extras目录:扩展插件目录,常用的是 Jmeter与ant集成的文件。
lib\ext目录:该目录存放的是Jmeter的插件或者扩展组件。Jmeter会自动在lib和ext下寻找需要的类。一般扩展的依赖包,会打成jar包放入ext目录。
printtable_docs目录:该目录存放的是官方用户手册。
组件介绍:
三大模块:线程组,取样器,监视器.
线程组:用来控制压测环境,模拟用户,也叫Users。一个线程组模块可以包含多个线程,每个线程代表一个用户,这样可以模拟高并发下的请求,并根据网站的响应信息来判断网站的相关性能。
取样器:进行脚本逻辑控制。模拟用户操作向服务器发送请求,告诉Jmeter发送怎样的请求到服务器,并等待响应.每个取样器可以生成一个或多个采样结果.
监视器:监控压测的运行,从而获取一些性能指标.
线程数:虚拟用户数,即并发数,一个线程表示一个虚拟用户;
Ramp-Up Period:所有线程启动的时间,单位s。通过这个参数可以设置每个线程间的启动间隔;
循环次数:测试循环的次数,如果勾选了“永远”,那么所有线程会一直发送请求,直到手动停止运行脚本;
监听器(Listener):是用来监听系统资源的元件。它是用来对测试结果数据进行处理和可视化展示的一系列元件。 图形结果、查看结果树、聚合报告、用表格察看结果都是我们经常用到的元件。
聚合报告(aggregate report):对于每个请求,它统计响应信息并提供请求数,平均值,最大,最小值,错误率,大约吞吐量(以请求数/秒为单位)和以kb/秒为单位的吞吐量.
测试计划(Test Plan):使用 Jmeter 进行测试的起点,它是其它 Jmeter 测试元件的容器。
线程组(Thread Group):代表一定数量的并发用户,它可以用来模拟并发用户发送请求。
采样器(sampler):定义实际的请求内容,被线程组包含,比如HTTP请求、java请求等。
监听器(Listener) :响应结果的显示,统计等。
逻辑控制器(Logic Controller) :帮助用户控制Jmeter的测试逻辑及执行顺序。
断言(Assertions) :用来检查从服务器获得的响应内容是否符合预期。
配置元件(Config Element) :初始化默认值和变量,以便采样器使用。
前置处理器(Pre Processors)和后置处理器(Post Processors) :请求前后的处理操作。
定时器(Timer):为采样器设置等待时长。
每个接口请求会显示独立的一行数据,每行有13个字段,含义分别如下:
Label:请求名或者请求标签,每个JMeter 的组件(例如 HTTP Request)都有一个 “名称” 属性,这里显示的就是“名称”属性的值。
Samples:表示你这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示就是100.
Average:平均响应时间,默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,也可以以Transaction 为单位显示平均响应时间。
Median:中位数,也就是所有请求响应时间中排在中间的那个响应时间点,就是50% Line,参考90% Line解释。
90% Line:90%用户请求响应时间,如果把某次任务的所有请求的响应时间按从小到大排序,它是指排在90%处那个点的请求的响应时间,也就是说有90%的请求的响应时间小于等于这个响应时间。后面的50/60/70/80/90/95/99 % Line 也是类似的含义。
95% Line:95%用户请求响应时间,请参考90% Line解释。 99% Line:99%用户请求响应时间,请参考90% Line解释。Min:最小响应时间,所有请求样本中的最小响应时间。 Max:最大响应时间,所有请求样本中的最大响应时间。
Error%:本次测试中“出现错误的请求数/请求的总数”百分比值。
Throughput:吞吐量,服务器一定时间范围内处理的请求数。在本报告中它的含义其实其实是吞吐率,表示每秒完成的请求数(Request per Second),此指标代表服务器的处理能力,比如支付宝峰值处理量达到12万笔/秒。
Received KB/sec:每秒从服务器端接收到的数据量。 Sent KB/sec:每秒从客户端发送到服务器端的数据量。
测试计划
线程组:(1)断言、定时器、监听器、配置元件、后置处理器
(2)逻辑控制器
(3)Sampler
jmeter操作数据库:
接口测试中对数据进行查询,传入数据作为请求参数,或者断言时查看数据是否正确写入数据库。接口或者性能测试,通过接口并发请求,批量实现数据的构造,数据恢复操作。快速实现对数据库的增删改查。
添加数据库驱动:将对应的数据库驱动jar包放入jmeter的lib目录下,以mysql驱动为例,重启jmeter生效。
添加JDBC Connection Configuration(数据库配置连接池)添加路径:测试计划->添加->配置元件->JDBC Connection Configuration. 添加线程组及JDBC Request. 查看执行sql语句响应数据
Jmeter接口测试之参数关联:
关联:请求之间通过传递参数建立联系。一般需要将一个请求的响应参数,作为另一个请求的入参。比如登录后的操作,第一步实现登录请求,然后将请求返回的token提取出来保存到一个变量中,后续请求作为入参使用。
Grafana工具
实时展示JMeter压测数据,数据范围可选,界面更友好.
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。