JMeter快速入门


有时候我们需要对自己接口的并发支持能力进行压力测试,此时就需要JMeter工具来处理;下面将通过几个例子来让你快速入门JMeter的使用。

注意:下面的是基于JMeter 5.4.3 版本进行的操作,不同版本的功能入口可能会有区别。
文章参考:https://www.cnblogs.com/spareyaya/p/12807638.html

下载和安装JMeter

因为JMeter是基于Java开发的,因此必须先安装JDK才行(建议使用jdk8),JDK的安装见:jdk安装教程

进入JMeter官网:https://jmeter.apache.org/download_jmeter.cgi 下载软件,下载后直接解压即可使用。

在控制台中进入刚刚JMeter的加压包位置,执行如下命令启动JMeter:sh ./bin/jmeter

对于Mac电脑请下载tgz格式的压缩包,解压:tar zxvf apache-jmeter-5.4.3.tgz

JMeter基础使用说明

我们在启动JMeter后等待GUI界面加载成功,启动成功后,可以通过修改界面的语言。初次启动默认语言是英语,你可以在菜单栏的Options->Choose Language->Chinese(Simplified)切换成简体中文。

一些概念说明:

  • TestPlan:测试计划,相当于一个工程,或者是一个分类;
  • Thread Group:线程组,相当于模拟的请求数。一个线程相当于一个用户请求;
  • 察看结果树:监听发送请求时各个请求的状态;
  • 聚合报告(Average report):汇总测试结果数据;

创建测试计划

右键点击TestPlan->添加->线程(用户)->线程组,完成后选择刚刚创建的线程组,在这个线程组上点击右键,添加->取样器->HTTP请求;再选择HTTP请求,在这个HTTP请求上点击右键,添加->监听器->察看结果树;再次选择HTTP请求,在这个HTTP请求上点击右键,添加->监听器->聚合报告。完成后如图所示

参数配置

测试计划(TestPlan)

选择左侧的Test Plan,右侧的名称就是测试计划的名字,注释就是一个说明。独立运行每个线程组只有在我们需要多个线程组时才会使用到,通常保持默认即可。

线程组(Thread Group)

选择左侧的Thread Group,线程组也有名称和注释。我们可以配置线程组中的线程个数(一个线程相当于一个用户请求),Ramp-up是指在多少秒内执行完一次;

下面的线程属性就是核心配置了,前面也提到,一个线程相当于一个用户请求。比如线程数填5,Ramp-up时间填1,循环次数填1,就表示在1秒内发送5次请求,执行一次。

HTTP请求

选择左侧的HTTP请求。其中协议就是请求的协议,默认是http,ip填服务器地址,也可以填域名,端口号是8100。请求方式根据接口限定选择,参数可以通过下面的按钮来操作

另外值得注意的是,左侧的节点很多时候是可以重复的,但是作用域不相同。比如当前察看结果树和聚合报告都是在HTTP请求下创建的,那么这个察看结果树和聚合报告监听的就是这个HTTP的结果。一个线程组下可以有多个HTTP请求,当察看结果树和聚合报告创建在Thread Group下,那么就是监听这个线程组下所有HTTP请求的结果。

开始测试

点击界面工具栏的绿色三角按钮开始压测,等待压测结束后,就可以选择左侧的察看结果树,就可以看到本轮测试的请求情况。

聚会报告(Average Report)说明:

  • 样本:请求的次数,计算公式是线程数*循环次数,如果线程组配置勾选了永远,那么就是你停止测试时实际发送的请求数
  • 平均值:响应时间的平均用时,单位是毫秒。比如这里的平均响应时间是38毫秒
  • 中位数:响应时间的中位数,单位是毫秒。
  • 90%百分位:90%的响应时间小于该数值,单位是毫秒。这里有90%的响应时间小于22毫秒
  • 95%百分位:含义和90%类似
  • 99%百分位:含义和90%类似
  • 最小值:本轮测试最小响应时间,单位是毫秒。
  • 最大值:本轮测试最大响应时间,单位是毫秒。
  • 异常%:本轮测试出现异常的请求比例。
  • 吞吐量:可以理解为QPS,即是我们测试的接口处理请求的能力。比如这里是平均每秒可以处理2.2次请求
  • 接收KB/Sec:响应数据的接收速率
  • 发送KB/Sec:请求数据的发送速率

Jmeter中使用变量

上面我们配置http请求的时候,服务器是直接写的IP地址,但若有很多个http请求配置,在更改了IP时,就需要一个个的去修改,这时使用变量可以很好的解决这个问题。

右键点击Thread Group,添加(add)->配置元件(Config Element)->用户定义的变量(User Defined Variables),也可以在测试计划或者HTTP请求下创建,这样作用域就是整个测试计划或者HTTP请求。然后选择用户定义的变量,并在右边点击添加按钮,添加host和port两个变量:

在JMeter中使用变量是通过${}来引用的,比如要引用host变量,就是${host},然后我们选择HTTP请求,把IP地址和端口改为引用变量的形式

Jmeter命令行测试

Jmeter不推荐我们使用界面来进行测试,其提供界面的目的是为了方便配置.jmx测试文件。jmeter命令如下:

.jmx文件就是我们通过界面设置后保存的文件。

jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]

jmeter的完整参数可以通过jmeter -?查看,这里只介绍几个常用的参数:

  • -n:非GUI模式,其实就是命令行的模式
  • -t:后跟测试文件(jmx文件)
  • -l:后跟log文件,把测试的过程输出到日志文件中
  • -e:测试结束后生成报告
  • -o:测试报告存放目录,必须是空目录

示例:

./jmeter -n -t "/Users/fred/dev/apache-jmeter-5.4.3/test_template/demo.jmx" -l "/Users/fred/dev/apache-jmeter-5.4.3/test_template/test.log" -e -o "/Users/fred/dev/apache-jmeter-5.4.3/test_template/result"

执行完成后会生成HTML文件,里面会生成相关的测试报告。

分布式测试

上面的操作都是在单台机器上操作的,但是实际上我们如果需要Jmeter在5秒内发送1000个线程发送完成请求是不能实现的,因为最终线程在进行操作的时候还是要基于CPU来实现,这样使用单台机器测试的结果其实是不准确的。因此我们需要在多台机器上操作,这就是分布式测试的由来。

其大致原理就是使用一台机器(master)来分发指令给其他机器,然后其他机器(slave)收到指令后发起请求。这些机器必须将对于端口打开且网络互通,JDK版本尽量保持一致。

然后先执行各个slave里bin目录下的jmeter-server,然后开发master机器上的JMeter的bin/jmeter.properties文件,找到remote_hosts=127.0.0.1那行,并且改为slave内网地址,地址之间用英文逗号分隔,然后打开master机器上的JMeter,像单机那样测试就可以了。


特别提醒:扫码关注微信订阅号'起岸星辰',实时掌握IT业界技术资讯! 转载请保留原文中的链接!
  目录