在配置元件中配置:添加路径:测试计划——线程组——配置元件——用户定义的变量
参数设置:参数名:参数值
在HTTP取样器中引用:${参数名}
线程组下配置的用户定义的变量,在线程组下生效,与测试计划中配置的变量冲突时,以线程组下的为准
在测试计划中配置(全局生效)
使用用户定义的变量时,不同的用户在访问时,读取的参数值完全相同,如果希望每个用户在访问时的变量不同,可以使用用户参数。
配置方法
使用用户参数时,每个用户可以取不同的数据,但是同一用户的多次循环时读取的数据是不变的。如果想让同一用户多次循环读取时的数据也不同,需要使用CSV数据文件设置的方式。
配置CSV数据文件设置:添加位置:线程组——配置元件——CSV数据文件设置
参数配置:
添加HTTP请求:引用参数值时,使用时CSV数据文件中定义的变量名${变量名}
函数对话框里面有很多可以自助生成的函数方法,需要什么用什么
我现在是通过counter函数在生成动态变化的数值
counter函数:如果counter参数设置为:TRUE,则每个用户分别从1开始计算,每循环一次加1,如果counter参数设置为:FALSE,则所有用户公用一个计数器,每发送一个请求时,取值加1
添加:线程组——HTTP取样器——断言——响应断言(断言一定是在HTTP请求的子节点下)
配置介绍:
1.测试字段:需要进行校验的部分
2.模式匹配规则:要校验的方式
测试模式:校验预期结果数据
可以在同一个HTTP请求下包含多个响应断言
配置介绍:
客户端发送请求,到收到服务器的响应的时间,要求不超过指定的时间。
实际时间,是统计的取样器结果中的load time
配置介绍:断言持续时间:配置能接受的最长的响应时间(单位:毫秒)
当请求之间有依赖关系,一个请求的入参,需要使用到之前请求的响应数据时,需要使用关联
正则表达式介绍:
应用场景:正则表达式提取器可以提取任意格式的响应数据
参数介绍:
在下一个http请求里面引用变量token
应用场景:只能适用于响应消息为HTML格式的情况
参数介绍:
应用场景:适用于返回的数据类型为JSON格式的情况
参数介绍:
跨线程组关联指的是多个请求之间有关联关系(即一个请求的参数需要使用前面请求的响应),但是两个请求不在一个线程组内,此时使用提取器无法完成关联,需要使用Jmeter属性来完成数据的传递。
生成全局变量:
使用全局变量:
jmeter脚本录制:
1、在测试计划中添加非测试元件中的HTTP代理服务器
2、配置HTTP代理服务器
3、配置浏览器的代理设置:输入IP地址和端口号
4、启动HTTP代理服务器的配置
5、进入浏览器进行操作,HTTP请求会自动记录在Jmeter中
过滤规则的配置:
Cookie管理器:
准备工作:
1.启动数据库
2.加载mysql的JDBC驱动:
方法1:在测试计划下方的位置,点击浏览添加JDBC的jar包
方法2:将JDBC的jar拷贝到lib目录,并重启jmeter
3.配置JDBC连接池的参数
编写JDBC脚本步骤:
1、添加JDBC Request请求
2、添加HTTP请求 —— 搜索请求
参数为中文时,将参数写到下方参数位置,并勾选上“编码”
3、添加响应断言
在响应断言中配置要检查的数据内容。
注意:应用JDBC Request查询出的结果时,需要加上索引(因为JDBC查询的结果保存为一个列表)
第一种配置方法:
第二种配置方法:
勾选上Interpret Condition as Variable Expression,判断条件需用使用jexl3函数。
(使用这个函数来进行判定时,Jmeter自身的执行效果要高一些)
控制子节点下的HTTP请求的执行次数
循环控制器与线程组中的循环次数的对比:
与用户定义的变量或者正则表达式提取器配合使用,循环读取用户定义的变量或者正则表达式结果中的所有数据。
配置参数:
与用户定义的变量配合使用:
与正则表达式配合使用:
又叫做集合点(LR的叫法),保证大量的请求在同一时间进行发送,形成绝对的并发
实现原因:设置同步定时器,有请求要发出时,同步定时器会暂缓请求发送,一直到积攒的请求数达到要的数量时
将所有的请求同步发送出去,形成绝对的并发(更大的压力负载)
设置Jmeter以指定的吞吐量速度往服务器发送HTTP请求。
注意:常数吞吐量定时器只是帮忙达到性能测试的负载(压力)要求,本身不代表性能有bug/无bug,对于bug的分析需要通过响应时间来判断
应用场景:当性能测试时需要模拟的负载(用户/请求)太高,一台测试机无法模拟,需要使用多台测试机一起来模拟以达到要求的负载量,这就叫分布式
原理:
分布式配置与运行:
配置:
代理机(Jmeter.property):
控制机:
运行:
label:接口名称
样本:每个接口请求的总次数
平局值:请求的平均响应时间
中位数:50%的样本都没有超过这个时间。这个值是指把所有数据按由小到大将其排列,就是排列在第50%的值
90%百分位:90%的样本都没有超过这个时间。这个值是指把所有数据按由小到大将其排列,就是排列在第90%的值
95%百分位:95%的样本都没有超过这个时间。这个值是指把所有数据按由小到大将其排列,就是排列在第95%的值
99%百分位:99%的样本都没有超过这个时间。这个值是指把所有数据按由小到大将其排列,就是排列在第99%的值
最小值:所有请求最小值
最大值:所有请求最大值
错误率:本次测试中,有错误请求的百分比
吞吐量:吞吐量是以每秒/分钟/小时的请求量来度量的。这里表示每秒完成的请求数,一般认为他为TPS
接收:收到的千字节每秒的吞吐量测试,测试机在过程中的网络传输速率
发送:发送的千字节每秒的吞吐量测试,测试机在过程中的网络传输速率
重点关心的性能指标:
每秒事务响应时间
每秒服务器处理的字节数
Bytes Received Over Time:接收
Bytes Sent Over Time:发送
基于jmeter客户端监控服务器 硬件资源
CPU:服务器CPU使用情况
memory:服务器内存使用情况
net worK:服务器网络使用情况
disks I/O:服务器磁盘I/O使用情况
(1)普通的计算方式:
TPS = 总的请求数 / 总的时间
问题:对于同一天的时间内,不同的时间段,请求速率会有波动,这样计算会被平均掉,无法测试负载高的情况
(2)二八原则:
核心:80%的请求数会集中在20%的时间内完成
TPS = 总的请求数 *80% / 总的时间 * 20
注意:二八原则的计算方法会比平均的计算方式更准确
(3)按照每天的具体业务数据进行计算(稳定性测试TPS)
当获取每天的具体业务统计数据时,就可以统计出业务请求集中的时间段作为有效业务时间;并统计有效业务时间内的总请求数
TPS = 有效业务时间的总请求数 * 80% / 有效业务时间 * 20%
(4)模拟用户峰值业务操作的并发量:(压力测试TPS)
获取每天的交易峰值的时间段,及这个时间段内的所有请求的数量
TPS = 峰值时间内的请求数/峰值时间段 * 系数
系数可以是:2、3、6、10,由项目组自己觉得要达成的性能指标
并发用户数:某一物理时刻同时向系统提交请求的用户数
平均响应时间:系统处理事务的响应时间的平均值。对于系统快速响应类页面,一般响应时间为3秒左右
可以直接用来衡量系统处理能力的指标是(吞吐量)
在系统处于轻压力区(未饱和)时,并发用户数上升,平均响应时间(基本不变),系统吞吐量(上升)
在系统处于重压力区(基本饱和)时,并发用户数上升,平均响应时间(上升),系统吞吐量(基本不变)
在系统处于崩溃区(压力过载)时,并发用户数上升,平均响应时间(上升),系统吞吐量(下降)
硬件的组成:
CPU时间的介绍:
CPU占用分类:
1、正常情况下,程序加载到内存中来执行
2、当内存不够时,会加载部分立即要执行的程序到内存中,其他的程序部分放在磁盘中(虚拟内存)
3、当立即要执行的程序执行完成后,从虚拟内存中读取其他的数据内容到实际内存中,再执行程序的处理
4、依次循环第3步,完成程序的运行
卡的原因的就是:每次都需要从虚拟内存(磁盘)中读取数据进行执行,磁盘的读取速度相对CPU和内存而言非常,因此感觉内存不足程序很卡
闪退的原因就是:在第2步中,需要加载部分立即要执行的程序到内存中,如果当前的内存空间不满足最低要求(立即要执行的程序所需要的内存)时,就会出现闪退
监控点:监控磁盘实际IO是否已经接近最大值,接近则有问题
监控点:IO队列,如果当前IO队列长度一直不为0,说明磁盘IO有问题
监控实际的网络流量,与网络带宽做对比,如果实际网络流量与网络带宽接近,则说明网络存在瓶颈,需要优化。
百兆带宽:100Mbyte/s
实际技术中衡量的宽带的单位:KB/s,因此需要换算:100/8 = 12.5MKB/s
JVM(JAVA Virtual Machine): 虚拟出来的空间,专门供JAVA程序运行
堆区:需要重点关注的部分(动态变化)
所有的对象在初始化会申请堆区的空间,如果申请的空间在使用结束没有及时的释放,那么这个空间就会被占用。—— 内存泄漏
监控点:因此在测试时,需要关注堆区的空间是否持续上升,没有下降
垃圾回收:将内存中已申请并使用完成的那部分内存空间回收,供新申请使用。
垃圾回收机制都是针对堆区的内存进行的。
因为系统在做垃圾回收时,不能够处理任何用户业务的。如果垃圾回收过于频繁,导致系统业务处理能力下降。
监控点:Full GC内存比较大,垃圾回收一次时间比较长,那么这段时间内都不能处理业务,对系统影响比较大,因此我们需要关注Full GC频率
慢查询:监控系统在运行时,所执行的所有SQL语句,检查这些SQL执行时间是否慢(自己设置一个时长,执行时间超过这个时长就是慢查询)
通过这个方法可以把系统运行时所有执行时间比较长的SQL找出来,进行优化。
如果缓存命中率过低,需要优化对应的代码和SQL查询语句,想办法提交缓存命中率
监控点:业务执行过程中SQL查询时的缓存命中率。(查询语句读取缓存的次数占总的查询次数的比例)
监控点:数据库连接池的使用率
如果数据库连接池被占满,此时如果有新的SQL语句要执行,只能排队等待,等待连接池中的连接被释放(之前的SQL语句执行完成)
如果监控发现数据库连接池的使用率过高,甚至是经常出现排队的情况,需要进行调优
对比:
页面锁:处理效率低,但是不会出现死锁
行锁:处理效率高,但是可能出现死锁
监控点:需要监控在性能测试过程中,是否有死锁出现,如果出现需要进行代码优化。
CPU:使用率不超过80%
内存:使用率不超过80%
网络:带宽
磁盘空间:
压测机主要是发送请求,发请求时往外发消息, 没有太多的磁盘操作,IO通常不会有问题
jmeter运行时会记录日志,注意磁盘空间不要被占满
一般情况下,测试人员执行性能测试时,只需要关注1、2、5就可以,判断系统是否有性能问题而开发人员要定位性能问题时,需要再次运行,并监控所有的性能指标,来进行分析并调优
1.系统指标:通过性能测试工具jmeter以图形化方式监控
2.服务器资源指标
使用jmeter性能监控插件perfmon进行监控
使用linux命令监控:
Nmon:全面监控liunx系统资源使用情况,包括CPU,内存,IO等,可独立应用监控
3.JAVA应用:jvisualvm
监控JVM内存等指标:
找到JDK的路径:/usr/libexec/java_home -V
进入bin目录:cd /Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/bin
打开Jvivusalvm:open Jvivusalvm
点击“远程”,右键添加远程主机(IP地址为linux虚拟机的IP)
点击JMX连接,选择监控,看JVM对应的监控指标。(重点关注:CPU使用、堆的内存使用)
4.数据库
自带的功能,可以在数据库配置中打开对应的开关,通过日志的方法来监控
定义:指执行速度要低于设置的时间的sql语句。帮助定位查询速度比较慢的sql语句
慢查询时的几个重要参数::
设置方法:
查询:
设置:
5.压测机资源:windows自带任务管理器
步骤:
1、确定性能问题,根据性能测试的指标进行分析,确定是否存在问题。—— 测试人员能掌握
2、确定问题原因:确定问题后,针对问题进行分析,确定可能的原因。
3、确定调整目标和解决方案(修改配置、增加资源、修改代码)
4、测试给出的解决方案
5、分析优化后的结果。
在性能调优时,1-5步通常需要循环多次,才能最终解决性能问题