前言
以压测一个api为例。假设有一个非常简单的api http://192.168.1.111:8080/
,只是返回 helloworld 字符串。
准备
- 打开 jmeter,新建测试计划
- 在测试计划上右键 -> 线程 -> 线程组。还是在测试计划上右键 -> 监听器,添加查看结果树、汇总报告、聚合报告。
- 在线程组上右键添加取样器 - HTTP请求,填写服务器地址、端口号和url
- 点击测试计划,再点击菜单栏的保存,然后执行测试
- 执行完成后,点击查看结果树,即可查看到api响应结果。
- 以上为单元测试,查看api结果是否正确。接下来执行一个100并发的压测。
- 先在查看结果树、汇总报告和聚合报告上右键点击清除
- 点击线程组,配置并发数和压测时间
- 保存测试计划,点击运行。运行完成后,一般关注聚合报告和汇总报告中的平均值、中位值、异常率和吞吐量,如果安装了插件,一般还要关注TPS指标。
- 聚合报告示例
- TPS示例
web框架压测
顺带压测了几个web框架,分别是python的fastapi、sanic,以及go的gin、hertz。服务端和jemeter用的都是一台电脑,jemeter的压测数都为1000,四个框架都只是返回一个helloworld字符串,控制台日志也都关闭。fastapi和sanic的worker数量都设置为CPU核数。
- python之fastapi的压测结果。fastapi是我个人比较喜欢的一个python web框架,尤其喜欢自带的swagger文档,调试起来非常方便。压测的吞吐率四舍五入一下是1w,正好做一个基准。
- python之sanic的压测结果。sanic的设计比较像flask,性能比fastapi稍好些,大概是fastapi的3倍左右。
- go之gin的压测结果。gin算是go web开发比较入门级的框架了,性能大概是fastapi的5.8倍。
- go之hertz的压测结果。hertz是字节跳动开源的一个go web框架,性能比gin框架稍高,大概是fastapi的6.3倍,但个人更喜欢gin,gin的编码看起来比hertz稍微简洁一些。