一、 JMeter简介
Apache JMeter是一款免费的基于java开发的性能测试软件,最开始是用于测试web项目性能的,后来发展到支持各种其他功能。
JMeter可以用于测试静态以及动态资源,网页动态程序的性能。也可以对单台服务器、服务器集群、网络或者某个可以测试的对象进行重压负载模拟测试从而分析在不同压力下的性能表现。
JMeter支持对许多不同的应用、服务器、协议等类型进行负载性能测试:
- Web-HTTP, HTTPS (Java, NodeJS, PHP, ASP.NET, ...)
- SOAP / REST Webservices
- FTP
- 通过JDBC测试数据库
- LDAP
- 通过JMS测试消息中间件(Message-oriented middleware via JMS)
- Mail - SMTP(S), POP3(S) 以及 IMAP(S)
- 本地命令或者shell脚本(Native commands or shell scripts)
- TCP
- Java objects
二、 下载安装
JMeter全称Apache JMeter,是apache基金会下面的顶级项目,完全开源免费的,可以在官网https://jmeter.apache.org/ 下载程序。
该软件无需安装,下载完成解压即可运行,windows下可以通过解压目录中的bin/jmeter.bat直接启动,在linux环境中可以使用bin/jmeter.sh命令启动,JMeter是完全基于java开发的,所以需要提前安装JVM环境才能运行,目前最新的是JMeter5,该版本最少需要jdk8才能运行,需要注意。
三、使用教程
以windows环境中为例,通过bin/jmeter.bat启动成功以后,我们会看到一个图形化界面,通过图形化界面,可以方便的添加各种压测任务。
上图是一个已经创建好的压测任务示例图。
一般jmeter任务可以通过打开.jmx后缀结尾的已经保存的任务,或者通过左上角的File -> New创建新的压测任务。
如果看需要中文的操作界面的话,可以通过左上角的 Options -> Choose language -> Chinese (Simplified)设置为简体中文,虽然有简体的中文,但是有些部分并没有完全中文化,还是有部分是英文展示的,不过基本还是能看懂的。
下面演示一个完全新建一个简单对于接口的压测任务:
左上角的File -> New创建一个新的压测计划
在新建的TestPlan上面点击右键,Add -> Threads(Users) -> ThreadGroup 添加一个线程组,在这个线程组中,可以设置压测需要的同时访问的线程数,压测的持续时间或者压测的次数
对压测的条件进行设置,
右键ThreadGroup,Aampler-> Http Request 添加一个HttpRequest,新增了一个具体的访问压测地址,此处我只添加了一个,可以同时添加多个,如果需要指定一个接口多少个并发访问,可以添加多个ThreadGroup,在这些ThreadGroup下面添加HttpRequest请求链接。
最后就是添加监控了,对于压测结果需要进行监控汇总等。右键ThreadGroup -> Listener -> Summary Report , View Result Tree
一般Summary Report一项就够了,包含了总请求次数、平均响应时间、最大时间、最小时间、吞吐量、错误率、数据发送速率、数据接收速率等。
衍生,如果压测的时候想要模拟实际情况或者不想要请求内容太单一,可以是用CSV数据集进行动态配置,通过配置的一些列请求参数集,可以实现压测请求参数是一个数据集合而不是单一的请求。
右键TestPlan -> Add -> Config Element -> CSV Data Set Config导入外部测试数据集,需要制定FileName,Variable Name,其他的默认即可,最多额外注意一下字符集
四、 Linux系统无界面进行压力测试
一般我们实际部署的项目部署在linux服务器上,后端程序一般的调用是内网间调用的,使用公网IP访问压测网络延迟对于压测的结果影响很大,所以还是在linux服务器上面测试才能反映真实的性能情况。
可以通过有界面的jmeter配置好压测的一系列数据,然后保存问.jmx的压测任务,通过 ~/apache-jmeter-5.0/bin/jmeter -n -t xxx.jmx -l xx.jtl 命令,将压测的结果保存到jtl文件中,然后传回该文件,在jmeter中直接打开该文件查询压测结果数据: