一,Jmeter简介
- Apache组织开发的开源免费压测工具
- 纯java程序,跨平台性强
- 源程序开源从网上下载
- 高可拓展性
- 可对服务器,网络或者对象模拟巨大的负载,进行压力测试
- 也可以用于接口测试
- 支持分布式,多节点部署
二,主要功能模块
- 取样器:进行脚本逻辑控制
- 线程组:压测场景控制
- 监视器:监控压测运行,获取性能指标
三,录制压测脚本
- 压测对象:http://news.baidu.com
- 压测页面:首页,国际频道,财经频道
- 步骤:
1) 访问首页
2) 单击“国际”(频道)
3) 单击“财经”频道
4) 操作手段:录制回放,上手容易,入门学习的好手段
5) 录制脚本的配置:
- 打开jmeter
- 新建压测脚本
- 添加“HTTP(S) Test Script Recorder”
- 添加线程组
- 在线程组里添加recording controller
- 打开https test script recorder
- 设定port=8088
- 设定target controller=test plan > tread group > recording controller
- 录制脚本的配置
1) 在requests filtering 添加“include” 与“exclude” url 正则匹配表达式
2) 目的:避免录制过多没必要的请求
3) include: .*\.(baidu\.com).*
4) exclude: .*\.(js|css|PNG|jpg|ico|png|gif).*
关于链接过滤的几点说明: - exclude去掉一些诸如图片,js,css等静态请求,这些静态资源一般会单独存放,不会占用服务器运算资源,所以压测的时候可以不测试这些资源
- include包含内容,只抓取baidu url的内容,不抓取其他网站的内容
- 正则表达式匹配原理快速入门说明如下:
- 单击保存按钮,命名文件名,将对jmeter脚本的更改存储到磁盘
- 打开浏览器,将浏览器的代理服务器地址指向http://localhost:8088
- 开始录制:
- 单击hhtps test script recorder中的start按钮,打开代理
- 单击弹框中的确定按钮
- jmeter的录制代理将会开启
- 开始录制:
- 在对应的浏览器中访问百度
- 切换到国际频道
- 切换到财经频道
- 停止jmeter的代理服务
- 可以看到对于的请求已经被录制到jmeter中了
- 名词解释:
- 线程数:模拟用户数
- Ramp-up时间:启动全部线程所需的时间。比如我需要启动10个线程,并且10s启动一个线程,所以我的ramp up的值就是10*10=100s。
- 验证回收
- 验证代码的正确性是测试的老本行
- 压测代码其实也是代码
- 所以,自己的代码也必须检查一下
方法:添加查看结果树回放验证
- 检验回放数据
在查看结果树中,检查请求/响应是否都成功了
四, 添加响应断言
- 检验请求/响应的正确性
- 其实就是个校验点
- 压测结果的有效性 - 请求收到正确响应的前提下
- 断言的实际值与设定值相符–>成功
- 断言的实际值与设定值不相符 -->失败
- 运行验证
运行单并发压测,验证断言添加是否正确。在查看结果树中查看结果
五, 添加聚合压测报告
- 聚合报告:比较常用的一套展示压测结果的报告
- 展示请求与响应性能参数
- 累计值压测数据值的展示。报告只展示当前的实例交互产生的结果,如果需要对服务器性能做整体了解,需要进行多次试验,取平均值等方式进行。
- 建议连续压测,如果中间有间断需要数据清零,否则是累计的值,对压测结果会有影响。
- 添加聚合压测报告
路径:线程组-添加-监听器-聚合报告 - 六,性能指标解读:
1)平均值:单个请求的平均响应时间
2)中位数:50%用户的响应时间(把用户的响应时间从小到大排序,然后取中间的用户的响应时间,底下的以此类推)
3)90%百分位:90%用户的响应时间
4)95%百分位:95%用户的响应时间
5)99%百分位:99%用户的响应时间
6)最小值:最小的请求响应时间
7)最大值:最大的请求响应时间
8)异常%:错误率
9)吞吐量:每秒钟能完成多少个请求
10)接收 KB/sec:每秒从服务器端接收到的请求数据量
11)发送 KB/sec:每秒从服务器端发送的请求数据量
12)样本:压测过程中实际产生多少个样本
注意:
平均值的困扰:个别极端结果对实际性能数据的干扰。比如我一个请求的响应时间分别是2毫秒,3毫秒,2秒,这样平均值就不正确。建议这个只当做参考。实际工作中百分位更能客观反映实际性能情形
七,Jmeter静默压测
- 静默-> 脱离ui运行jmeter压测
- 好处:命令运行更容易“搞事情”,比如后期持续集成
- 命令格式:jmeter -n -t $jmx_file -| $jtl_file
- jmx:jmeter压测程序脚本文件,压测控制过程记录在jmx文件中
- jtl文件是jmeter压测请求响应数据的原始文件
- 压测报告的生成
- 具体操作:用jmeterui录制脚本,然后用命令行进行访问,执行文件,得到jtl文件,然后在打开jtl文件,查看测试报告