1 JMeter是什么
Apache JMeter是Apache组织开发的一款开源软件,是一款非常好用的接口测试工具。它的特点是开源免费,简单好用。
我们在测试过程需要做接口测试的话就可以使用它,也可以用来批量造数据,接下来我们就来看看JMeter是如何使用的吧。
2 JMeter的工作原理
首先我们先了解一下JMeter的工作原理,JMeter向服务器提交请求,从服务器取回请求返回的结果,简单来说就是调接口拿数据。
3 JMeter安装
JMeter官网下载:https://jmeter.apache.org/download_jmeter.cgi
启动JMeter:将zip包解压之后,进入./apache-jmeter-x.x.x/bin目录下的jmeter.bat即可启动JMeter,cmd窗口输出JMeter启日,注意:cmd窗口不能关闭。
启动JMeter成功后可看到如下页面:
4 JMeter进行接口测试
4.1、HTTP请求
1、添加线程组:在测试计划点击右键 > 添加 > 线程组(用户)> 线程组
2、添加HTTP请求:在线程组点击右键 > 添加 > 取样器 > HTTP请求
3、配置HTTP请求:可以在路径里面填写完整的请求地址,也可以分别填写协议,服务器名称或IP,端口号,路径。
4、添加察看结果树:在线程组右键 > 添加 > 监听器 > 察看结果树
通过察看结果树我们可以看到请求头,请求体和响应头,响应体等信息,我们可以查看请求和响应,方便定位问题。
5、运行并察看结果树:点击上方绿色箭头按钮运行,然后点击察看结果树,再点击响应数据,即可查看该请求的响应数据啦。
如果出现中文乱码,在./bin/jmeter.properties进行修改,将#sampleresult.default.encoding=ISO-8859-1改为sampleresult.default.encoding=utf-8就正常了。
至此,一个完整的HTTP请求已经完成。
4.2、Dubbo请求
1、下载dubbo插件:https://codechina.csdn.net/mirrors/dubbo/jmeter-plugins-dubbo/-/releases/2.7.8?spm=1033.2243.3001.5876
2、将插件放到./lib/ext目录下,重启JMeter
3、添加Dubbo请求:在线程组右键 > 添加 > 取样器 > Dubbo Sample
4、配置Dubbo请求
5、Dubbo请求demo
6、Dubbo Sample参数详解
Protocol:注册协议,包括zookeeper、multicast、Redis、simple;
Address:注册地址,dubbo服务的IP+Port:
①、当使用zk,address填入zk地址,集群地址使用","分隔;
②、使用dubbo直连,address填写直连地址和服务端口;
Protocol:使用的dubbo协议,包括dubbo、rmi、hessian、webservice、memcached、redis,根据自己的协议类型选择对应的选项即可;
Timeout:请求超时时间,单位ms,根据dubbo具体配置填写;
Version:版本,dubbo不同版本之间差异较大,不同版本之间不能互相调用,这里指定dubbo版本,是为了方便识别和说明;
Retries:异常重试次数(类似这种分布式服务通信框架,大多都有重试机制,是为了保证事务成功率);
Cluster:集群类型,包括failover、failfast、failsafe、failback、failking;
Group:组类型,如果有的话,根据配置填写即可;
Connections:连接数,同上,根据配置填写;
Async:服务处理类型,包括sync(同步)、async(异步),根据配置填写;
Loadbalance:负载均衡策略,包括random(随机)、roundrobin(轮询)、leastactive(最少活跃数)、consistenthash(一致性哈希);
Interface:接口名(因为dubbo服务大多是开发根据规范自行命名的,因此这里需要填写完整的接口名+包名);
Method:当前接口下的方法名,按照开发提供的API文档填写即可;
Args:接口报文,根据API文档填写,如上图所示,添加输入行,输入对应的参数类型和值即可(参数类型和值如何定义填写,请参考上面的链接);
①、paramType:参数支持任何类型,包装类直接使用java.lang下的包装类,小类型使用:int、float、shot、double、long、byte、boolean、char,自定义类使用类完全名称;
②、paramValue:基础包装类和基础小类型直接使用值,例如:int为1,boolean为true等,自定义类与List或者Map等使用json格式数据;
4.3、线程组参数详解
1、线程数:虚拟用户数。可以理解1次请求。
2、Ramp-Up Period(in seconds)准备时长:设置的虚拟用户数需要多长时间全部启动。如果线程数为10,准备时长为2,那么需要2秒钟启动10个线程,也就是每秒钟启动5个线程。
3、循环次数:每个线程发送请求的次数。如果线程数为10,循环次数为100,那么每个线程发送100次请求。总请求数为10*100=1000 。如果勾选了“永远”,那么所有线程会一直发送请求,直到选择停止运行脚本。
4、Delay Thread creation until needed:直到需要时延迟线程的创建。
5、调度器:设置线程组启动的开始时间和结束时间(配置调度器时,需要勾选循环次数为永远)。
持续时间(秒):测试持续时间,会覆盖结束时间
启动延迟(秒):测试延迟启动时间,会覆盖启动时间
启动时间:测试启动时间,启动延迟会覆盖它。当启动时间已过,手动只需测试时当前时间也会覆盖它
结束时间:测试结束时间,持续时间会覆盖它
5 JMeter使用小技巧
5.1、 JMeter设置中文
方式一:在./bin/jmeter.properties进行修改,将#language=en改为language=zh_CN,长期有效。
方式二:在选项 > 选择语言 > 中文(简体),本次打开有效,重启后失效,故推荐修改jmeter.properties的方式。
5.2、设置编码
在./bin/jmeter.properties进行修改,将#sampleresult.default.encoding=ISO-8859-1改为sampleresult.default.encoding=utf-8,否则可能会出现响应中文乱码;
5.3、备份文件
在JMeter的backups路径会存储历史版本jmx文件,只要你在页面上点击保存,这里就会存新的一份jmx,所以在这里可以找到历史文件,非常友好。