2020-03-06
JMeter
官页 官页 - 用户手册 Download Apache JMeter
Apache JMeter 是Apache组织开发的基于Java的压力测试工具; 用于对软件做压力测试, 它最初被设计用于Web应用测试, 但后来扩展到其他测试领域;
java -jar ApacheJMeter.jar
File -> New 新建JMeter的 测试面板 Test Plan
[Test Plan] -> Add -> Threads Users -> Threads Group 添加线程组
Threads Group 配置
- Action to be taken after a sampler error 取样器错误后要执行的动作
Countinue: 遇错误继续执行, 不影响场景运行; 默认为继续 Start Next Thread Loop: 执行下次循环, 当前循环剩余sampler不再执行; Stop Thread: 停止当前线程, 其他线程继续执行; Stop Test: 执行完剩余线程后停止测试; Stop Test Now: 立即停止所有测试线程;
- Thread Prop 线程属性
Number of Threads: 即并发线程数 Ramp-Up Period: 并发用户加载时间, 如设置为1, Number of Threads 设置为100, 则执行时1s内要加载100并发数; Loop Count: 总循环设置, 这个要*线程数量
-
Same user on each iteration 每次迭代相同的用户..
-
Delay Thread creation until needed 延迟线程创建, 直到需要时才创建.. (??没搞懂啥意思)
-
Specify Thread Lefetiime (规定线程生命周期)
Duration: 线程时间, 设置后线程超过该时间会停止 Startup delay: 开始延时, 启动测试后先等待这个时间再开始.
修改 jvm参数
打开jmeter安装目录/bin/jmeter.bat 修改默认堆内存大小
set HEAP=-Xms1g -Xmx4g
MQTT 压力测试
安装MQTT插件
copy the downloaded JAR files into $JMETER_HOME/lib/ext folder. After restarting the JMeter mqtt-jmeter
测试插件 mqtt-jmeter
The plugin is a standard JMeter plugin. You can download the latest version of mqtt-jmeter from here, and then copy the downloaded JAR files into $JMETER_HOME/lib/ext folder. After restarting the JMeter, you can see “MQTT samplers” provided by this plugin.
从github下载您需要的release版本, 解压mqtt–xmeter-jar-with-dependencies.jar.zip, 将生成的jar文件放到JMeter安装主目录的lib/ext下, 重启JMeter, 就可以看到插件成功加载;
[Test Plan] -> Add -> Sampler -> MQTT Connect
连接操作取样器
Server name or IP: 指向被测MQTT服务器地址; 【注】为灵活起见, 属性值都可以引用JMeter的系统或自定义变量; Port number: 通常TCP连接的端口时1883, SSL连接则是8883; 请参照服务器的具体配置; Timeout(s): 连接超时设置, 以秒为单位; Protocols: 客户端与服务器通过SSL加密通道连接时, 可以选择单向或者双向认证(Dual);
User authentication: 如果服务器配置了用户认证, 您需要提供相应的用户名和口令; ClientId prefix: 标识客户端的固定前缀, 每个连接(虚拟用户)再添加一个uuid串, 整个作为客户标识; Keep alive(s): 心跳信号发送间隔; 例如, 300表示客户端每隔300秒向服务器发出ping请求, 以保持连接活跃; Connection keep time(s): 连接建立后, 保持该连接的时长; 例如, 1800表示1800秒之后连接将被关闭, 即使一直发送心跳信号; Connect attempt max: 第一次连接过程中, 尝试重连的最大次数; 超过该次数则认为连接失败; Reconnect attempt max: 后继连接过程中, 尝试重连的最大次数; 超过该次数则认为连接失败;
添加结果监听
[Test Plan] -> Add -> Listener -> View Result Tree
多线程组并行
多个线程组并行时, 在本地 JMeter 脚本中, 请不要勾选测试计划(Test Plan)属性中的 Run Thread Groups consecutively (i.e one at a time), 即独立运行每个线程组(例如在一个组运行结束后启动下一个);
(https://help.aliyun.com/document_detail/116635.html)
一个MQTT 关注和推送 测试配置
Http 压力测试
函数 随机数, UUID
(https://www.cnblogs.com/wei9593/p/11944062.html)
配置元件 HTTP 信息头管理
Add → config Element → HTTP Header Manager
管理请求头, 会附加到每个请求里面
采样器 HTTP 请求
服务器名或ip: 填写服务器ip地址(例如: 192.168.1.23) 路径: 填写url接口剩余部分; 协议: 向目标服务器发送http请求时的协议, 可以是http或者是https, 默认值为http 方法: 发送http请求的方法, 可用方法包括get, post, head, put, options, trace, delete等; Content encoding: 内容编码方式 路径: 目标url路径(不包括服务器地址和端口) 自动重定向: 如果选中该选项, 当发送http请求后得到的响应是302/301时, jmeter自动重定向到新的页面; Use keep Alive: 当该选项被选中时, jmeter和目标服务器之间使用keep-Alive方式进行http通信, 默认选中 Use multipart/from-data for http post:当发送http post请求时, 使用Use multipart/from-data方法发送, 默认不选中; 同请求一起发送参数: 在请求中发送URL参数, 对于带参数的URL, jmeter提供了一个简单的对参数化的方法; 用户可以将url中所有参数设置在本表中, 表中的每一行是一个参数值对(对应URL中的名称 名称1=值1 ) 同请求一起发送文件: 在请求中发送文件, 通常, http文件上传行为可以通过这种方式模拟;
监听器 聚合报告
聚合报告各指标:
Label: 每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性, 这里显示的就是 Name 属性的值
Samples: 表示你这次测试中一共发出了多少个请求, 如果模拟10个用户, 每个用户迭代10次, 那么这里显示100
Average: 平均响应时间——默认情况下是单个 Request 的平均响应时间, 单位为毫秒; 当使用了 Transaction Controller 时, 也可以以Transaction 为单位显示平均响应时间
Median: 中位数, 也就是 50% 用户的响应时间
90% Line: 90% 用户的响应时间
Min: 最小响应时间
Max: 最大响应时间
Error%: 本次测试中出现错误的请求的数量/请求的总数
Throughput: 吞吐量——默认情况下表示每秒完成的请求数(Request per Second), 当使用了 Transaction Controller 时, 也可以表示类似 LoadRunner 的 Transaction per Second 数
KB/Sec: 每秒从服务器端接收到的数据量, 相当于LoadRunner中的Throughput/Sec
压测结果查看
运行完后, 聚合报告会显示压测的结果; 主要观察Samples, Average, error, Throughput;
Samples:表示一共发出的请求数 Average: 平均响应时间, 默认情况下是单个Request的平均响应时间(ms) Error%:测试出现的错误请求数量百分比; 若出现错误就要看服务端的日志, 配合开发查找定位原因 Throughput:简称tps,吞吐量, 默认情况下表示每秒处理的请求数, 也就是指服务器处理能力, tps越高说明服务器处理能力越好;
压测结果的分析
有错误率同开发确认, 确定是否允许错误的发生或者错误率允许在多大的范围内;
Throughput吞吐量每秒请求的数大于并发数, 则可以慢慢的往上面增加; 若在压测的机器性能很好的情况下, 出现吞吐量小于并发数, 说明并发数不能再增加了, 可以慢慢的往下减, 找到最佳的并发数;
压测结束, ·登陆相应的web服务器查看CPU等性能指标, 进行数据的分析;
最大的tps:不断的增加并发数, 加到tps达到一定值开始出现下降, 那么那个值就是最大的tps;
最大的并发数: 最大的并发数和最大的tps是不同的概率, 一般不断增加并发数, 达到一个值后, 服务器出现请求超时, 则可认为该值为最大的并发数;
压测过程出现性能瓶颈, 若压力机任务管理器查看到的cpu, 网络和cpu都正常, 未达到90%以上, 则可以说明服务器有问题, 压力机没有问题;
影响性能考虑点包括: 数据库, 应用程序, 中间件(tomact, Nginx), 网络和操作系统等方面;
(https://blog.csdn.net/a656678879/article/details/80053645)
HTTP 接口 测试配置
WebSocket
安装
plugins-manager
Download plugins-manager.jar and put it into lib/ext directory, then restart JMeter.
在工具栏 Options(选项) → Plugins Manager
MySQL 压力测试
-
在测试计划主面板 add directory or jar to classpath 添加驱动.
-
在 JDBC Request 取样器前 需要添加
JDBC Connection Configuration配置元素, 配置连接; Variable Name for created pool 设置连接的名称, JDBC Request 的Variable Name of poll .. 填写