由于项目需要,最近对产品的性能做了简单的性能测试,调研了常用的几款性能测试工具。
- | LoadRunner | Jmeter | Locust |
---|---|---|---|
授权方式 | 商业收费 | 开源免费 | 开源免费 |
开发语言 | C/Java | Java | Python |
测试脚本形式 | C/Java | GUI | Python |
并发机制 | 进程/线程 | 线程 | 协程 |
单机并发能力 | 低 | 低 | 高 |
资源监控 | 支持 | 不支持 | 不支持 |
报告与分析 | 完善 | 简单图表 | 简单图表 |
支持二次开发 | 不支持 | 支持 | 支持 |
分布式压力 | 支持 | 支持 | 支持 |
测试平台 | 控制端只能是window,压测端可以是window/linx | window/linux | window/linux |
本地测试环境
部署环境 | MacBook Pro |
---|---|
内存 | 8 GB |
处理器 | 2.7 GHz Intel Core i5 |
Jmeter
Jmeter是Apache提供的一款功能比较齐全的性能测试工具。用例既可以通过GUI进行编写,也可以通过录制脚本的方式创建。另外,Jmeter也可以作为应用的功能/回归测试,通过设定结果断言,脚本会自动判断请求是否返回了正确结果。
Jmeter GUI是Jmeter的图形模式,提供可视化的编辑方式,多样的监听器,适合于创建测试计划以及脚本调试。
下图是以Jmeter GUI方式配置压力

然而,GUI方式需要耗费较多的系统资源(尤其是脚本中的监听器),从而影响里Jmeter单机性能。因此在大压力场景下CLI方式较为合适,此外,CLI方式可以生成HTML测试报告。
参考命令
jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
-
jmx file:测试计划的文件名称
-
result file:输出文件路径,可以是结果日志名称
-
Path to output folder:要保存的report文件路径
-
-n:非GUI模式执行JMeter
-
-t:执行测试文件所在的位置
-
-l:保存测试结果的文件,jtl文件格式
-
-e:测试结束后,生成测试报告
-
-o:指定测试报告的存放位置
-
-H:帮助
使用方式:
- 直接生成HTML报告
jmeter -n -t /Users/zhang/Desktop/worksapce/***/***.jmx -e -l test.txt -o test.html

- 根据已有的jtl类型文件生成HTML
jmeter -g test.txt -o test1.html
ref:
线程组内并发参数设置(JMeter之Ramp-up Period(in seconds)说明)
LoadRunner
成熟的商业软件,价格极其昂贵,功能最为丰富和全面,网上的学习资料较多。目前只支持windows平台,单机难以产生较高的并发压力,linux&docker可以作物负载发生器
Locust
采用多线程/多进程来模拟多用户时,线程数会随着并发数的增加而增加,而线程之间上下文的的切换损耗资源的,IO的阻塞和线程的sleep会不可避免的导致并发效率下降;正因如此,LoadRunner和Jmeter这类采用进程和线程的测试工具,都很难在单机上模拟出较高的并发压力。
Locust采用python脚本编写,使用了协程(gevent)机制并发。由于协程自身特点,避免了并发场景下由于多线程/多进程切换造成的资源开销,极大提高了系统资源利用率,大大提高了单机并发效率。
此外Locust的代码结构清晰,核心代码量也只有几百行,可扩展性也非常不错。
性能指标监控和测试报告图表方面比较缺失,数据统计不如LoadRunner及Jmeter完备。
统计报表页面

- Type: 请求的类型,例如GET/POST。
- Name:请求的路径。
- request:当前请求的数量。
- fails:当前请求失败的数量。
- Median:中间值,单位毫秒,一半的服务器响应时间低于该值,而另一半高于该值。
- Average:平均值,单位毫秒,所有请求的平均响应时间。
- Min:请求的最小服务器响应时间,单位毫秒。
- Max:请求的最大服务器响应时间,单位毫秒。
- Content Size:单个请求的大小,单位字节。
- reqs/sec:是每秒钟请求的个数。
同样的Locust也有no-web方式,以减少客户端资源消耗
locust -f load_test.py --host=https://www.baidu.com --no-web -c 10 -r 2 -t 1m
启动参数:
--no-web 表示不使用Web界面运行测试。
-c 设置虚拟用户数。
-r 设置每秒启动虚拟用户数。
-t 设置设置运行时间。
ab
ab 测试工具是 Apache 提供的一款测试工具,具有简单易上手的特点,适合于单接口测试,实际项目中比较鸡肋。
具有基本性能统计数据,无统计报表

网友评论