性能测试之Jmeter的入门使用
Jmeter概述
Jmeter官网:https://jmeter.apache.org/
Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。
它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。
JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。
安装Jmeter
安装Jmeter需要安装JDK。
Jmeter下载地址:https://jmeter.apache.org/download_jmeter.cgi
Jmeter文档:https://jmeter.apache.org/usermanual/get-started.html
解压下载的Jmeter包,得到Jmeter目录
bin:核心可执行文件,包含配置
jmeter.bat: windows启动文件
jmeter: mac/linux启动文件
jmeter-server:mac/Liunx分布式压测使用的启动文件
jmeter-server.bat:mac/Liunx分布式压测使用的启动文件
jmeter.properties: 核心配置文件
语言切换: 默认#language=en 改为 language=zh_CN
extras:插件拓展的包
lib:核心的依赖包
ext:核心包
junit:单元测试包
启动Jmeter
执行jmeter.bat脚本以启动Jmeter
语言切换:
修改jmeter.properties文件: 默认#language=en改为 language=zh_CN (永久有效)
菜单栏-> options -> choose language (临时有效)
Jmeter的基本使用
添加线程组
添加->threads->线程组(控制总体并发)
线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数。
Ramp-Up Period(in seconds)准备时长:设置的虚拟用户数需要多长时间全部启动。如果线程数为10,准备时长为2,那么需要2 秒钟启动10 个线程,也就是每秒钟启动5 个线程。
循环次数:每个线程发送请求的次数。如果线程数为10,循环次数为100,那么每个线程发送100 次请求。总请求数为10*100=1000 。如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本。
Delay Thread creation until needed:直到需要时延迟线程的创建。
调度器:设置线程组启动的开始时间和结束时间(配置调度器时,需要勾选循环次数为永远)
持续时间(秒):测试持续时间,会覆盖结束时间
启动延迟(秒):测试延迟启动时间,会覆盖启动时间
启动时间:测试启动时间,启动延迟会覆盖它。当启动时间已过,手动只需测试时当前时间也会覆盖它。
结束时间:测试结束时间,持续时间会覆盖它。
添加Http请求
线程组->添加-> 取样器 -> HTTP请求 (一个线程组下面可以增加多个取样器)
名称:
采样器名称
注释:
对这个采样器的描述
web服务器:
默认协议:http
服务器名称或IP :请求的目标服务器名称或IP地址
默认端口是80
路径:服务器URL
当发送POST请求时,使用Use multipart/from-data方法发送,默认不选中。
添加察看结果树
线程组->添加->监听器->察看结果树
添加聚合报告
线程组->添加->监听器->聚合报告
lable: sampler的名称
Samples(样本): 一共发出去多少请求,例如10个用户,循环10次,则是 100
Average(平均值): 平均响应时间
Median(中位数): 中位数,也就是 50% 用户的响应时间
90% Line : 90% 用户的响应不会超过该时间 (90% of the samples took no more than this time. The remaining samples at least as long as this)
95% Line : 95% 用户的响应不会超过该时间
99% Line : 99% 用户的响应不会超过该时间
min(最小值) : 最小响应时间
max(最大值) : 最大响应时间
Error%(异常):错误的请求的数量/请求的总数
Throughput(吞吐量): 吞吐量——默认情况下表示每秒完成的请求数(Request per Second) 可类比为qps
KB/Sec: 每秒接收数据量
添加断言
增加断言: 线程组 -> 添加 -> 断言 -> 响应断言
pply to(应用范围)
Main sample only: 仅当前父取样器进行断言,一般一个请求,如果发一个请求会触发多个,则就用sub sample(比较少用)
测试的响应字段:
响应文本:即响应的数据
响应代码:http的响应状态码
响应信息:http响应代码对应的响应信息
Response Header: 响应头
URL样本:
文档(文本):
请求数据:
模式匹配规则:
包括:包含在里面就成功
匹配:响应内容完全匹配,不区分大小写
equals:完全匹配,区分大小写
字符串:
否:
或者:
测试模板:
相应字段的值
自定义失败消息:
匹配后响应信息
添加断言结果
线程组-> 添加 -> 监听器 -> 断言结果
断言内容:取样器名称
断言失败,查看结果树任务结果颜色标红,反之绿色。
每个取样器可以添加单独的结果树,然后同时加多个断言,最外层可以加个结果树进行汇总
执行测试
线程组配置
http请求配置
设置断言
工具栏启动执行
查看结果树
聚合报告
断言结果
自定义变量
很多变量在全局中都有使用,或者测试数据更改,可以在一处定义,到处使用,如:服务器地址。
线程组->添加 ->配置原件-> 用户定义的变量
引用方式${XXX},在接口中变量中使用
CSV可变参数
读取CSV或Txt文本文件里面的参数
线程组->添加 -> 配置原件-> CSV数据文件设置
Jmeter.csv文件内容如下:
value1、value2分别对应Jmeter.csv文件内容中的A、B两列的值
使用${}引用即可
数据库压力测试
添加数据库驱动程序
添加JDBC取样器
线程组 ->添加->取样器-> jdbc request
设置使用哪个JDBC连接配置
Query Type 查询类型
select Statement :查询
Update Statement:修改
Callable Statement: 存储过程
Prepared select Statement :预编译查询(?占位符)
Prepared Update Statement:预编译修改(?占位符)
Commit :事务提交
Rollback:事务回滚
Auto Commit(false):自动提交事务
parameter values 参数值
parameter types 参数类型
variable names sql执行结果变量名
result variable names 所有结果当做一个对象存储
query timeouts 查询超时时间
Limit ResultSet:分页,返回数量
handle results 处理结果集
添加JDBC配置
Max Number of connections : 最大连接数
MAX wait :最大等待时间
Auto Commit: 是否自动提交事务
DataBase URL : 数据库连接地址 jdbc:mysql://127.0.0.1:3306/demo
JDBC Driver Class : 数据库驱动,选择对应的mysql
username:数据库用户名
password:数据库密码
执行测试
简单测试
预编译查询
查看结果树
添加Debug取样器,查看详细信息
结果分析总结
需要确定是否允许错误的发生或者错误率允许在多大的范围内
Throughput吞吐量每秒请求的数大于并发数,则可以慢慢的往上面增加。若压测的机器性能很好的情况下,出现吞吐量小于并发数,说明并发数不能再增加了,可以慢慢的往下减,找到最佳的并发数
压测结束,登陆相应的web服务器查看CPU等性能指标,进行数据的分析
最大的tps,不断的增加并发数,加到tps达到一定值开始出现下降,那么那个值就是最大的tps
最大的并发数:最大的并发数和最大的tps 是不同的概率,一般不断增加并发数,达到一个值后,服务器出现请求超时,则可认为该值为最大的并发数
压测过程出现性能瓶颈,若压力机任务管理器查看到的cpu、网络都正常,未达到90%以上,则可以说明服务器有问题,压力机没有问题。
影响性能考虑点包括:数据库、应用程序、中间件(tomact、Nginx)、应用属于CPU密集型还是IO密集型、网络和操作系统等方面
JMeter Address Already in use异常
原因
windows本身提供的端口访问机制问题。Windows提供给TCP/IP 链接的端口为1024-5000,并且要四分钟来循环回收。因此,在短时间内跑大量的请求时会将端口占满。
解决方案
参考:https://docs.microsoft.com/zh-CN/troubleshoot/windows-client/networking/connect-tcp-greater-than-5000-error-wsaenobufs-10055
使用CMD命令,执行regedit命令打开注册表
2.在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
下
右击parameters,添加一个新的DWORD,名字为MaxUserPort
双击MaxUserPort,输入数值数据为65534,基数选择十进制
同理,添加 TCPTimedWaitDelay:30 等待回收时间,单位秒
退出注册表编辑器,然后重启计算机
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/137050.html