前言
压力测试是每一个Web应用程序上线之前都需要做的一个测试,他可以帮助我们发现系统中的瓶颈问题,减少发布到生产环境后出问题的几率;预估系统的承载能力,使我们能根据其做出一些应对措施。所以压力测试是一个非常重要的步骤,下面介绍一款压力测试工具JMeter。
关于JMeter
Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。
Apache jmeter 可以用于对静态的和动态的资源(文件,Servlet,Perl脚本,java 对象,数据库和查询,FTP服务器等等)的性能进行测试。它可以用于对服务器、网络或对象模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能。你可以使用它做性能的图形分析或在大并发负载测试你的服务器/脚本/对象。
官网:传送门
使用前须知
由于jmeter是用Java编写的,所以我们事先要有Java环境,这里我的JDK版本是1.8,jmeter版本是5.1.1。
下载完jmeter包之后解压,进入bin目录。我使用的是win10下的GUI界面,因此直接运行jmeter.bat文件,过一会会出现一个cmd窗口,以及jmeter页面。
在生成的cmd窗口中,我们可以看到这么一段话:
================================================================================
Don't use GUI mode for load testing !, only for Test creation and Test debugging.
For load testing, use CLI Mode (was NON GUI):
jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
& increase Java Heap to meet your test requirements:
Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file
Check : https://jmeter.apache.org/usermanual/best-practices.html
================================================================================
意思是,不要使用GUI版的jmeter来进行负载测试,GUI版本只用来进行压力测试的创建和调试。进行负载测试使用命令行:
jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
之所以不使用GUI版本进行负载测试,是因为Java编写的GUI本身会占用不少资源,在执行大量并发测试时,如果是同一台计算机,既要生成这么多的线程,还要处理这么多的请求,对结果的影响是很大的。
一些参数的含义:
-n 指定JMeter以非GUI模式运行
-t 包含测试计划的jmx文件的名称(.jmx测试脚本)
-l 记录样本结果日志的jtl文件名称
-j JMeter运行日志文件名称
-r 在JMeter属性"remote_hosts"所指定的服务器中运行测试
-R [远程服务器列表]在指定的远程服务器上运行测试
-g [CSV文件路径]只生成报表
-e 负载测试后生成报表
-o 负载测试完成后,用于存放所生成报表的文件夹(文件夹必须不存在or文件夹内为空)
中括号里面分别要填负载测试文件的位置、测试结果生成文件位置和web报告生成路径。
GUI使用步骤
1、新建一个测试计划,然后右键测试计划,添加一个线程组。对线程组进行线程、循环次数的设置,总共会执行线程数 * 循环次数
次;
2、右键线程组,配置元件 -> HTTP请求默认值,设置协议为http,设置ip地址
3、添加取样器 -> http请求,填写要测试的接口的对应的url;
4、添加监听器 -> 聚合报告;
5、保存我们的测试计划为jmx文件。
然后我们可以点击GUI的启动来测试一下效果,这里就不贴图了。
我们也可以用命令行来进行测试,使用linux进行测试使用了以下命令:
./bin/jmeter.sh -n -t goods_list.jmx -l result.jtl
。
生成结果在聚合报告中查看,点击浏览,选择jtl文件即可。
如何测试redis的性能
- 100个并发连接,100000个请求
redis-benchmark.exe -h localhost -p 6379 -c 100 -n 100000
各参数:- -h:地址
- -p:端口
- -c:连接数
- -n:请求数
- 存取大小为100字节的数据包
redis-benchmark.exe -h localhost -p 6379 -q -d 100
- 只测试某些操作的性能(set,lpush)
- 只测试某些数值存取的性能
redis-benchmark.exe -n 100000 -q script load "redis.call('set', 'language', 'java')"
:查看set language java
这条命令的执行速度。