JMeter 简介

Apache JMeter 是一款纯 Java 编写负载功能测试和性能测试开源工具软件。相比Loadrunner而言,JMeter小巧轻便且免费,逐渐成为了主流的性能测试工具,是每个测试人员都必须要掌握的工具之一。

JMeter 主要有以下几方面用途:

  1. 性能测试:用于测试应用程序在不同负载下的性能表现
  2. 负载测试:模拟大量用户访问来观察系统的响应和稳定性
  3. 功能测试:验证应用程序的功能是否正常

测试实例

使用百度搜索接口作为本次的测试实例

JMeter 脚本编写

添加线程组

image.png

添加线程组各个属性详解:

  1. 线程数:虚拟用户数。一个虚拟用户占用一个进程或线程,设置多少虚拟用户数在这里也就是设置多少个线程数。
  2. Ramp-Up准备时长:设置的虚拟用户数需要多长时间全部启动。如果线程数为10,准备时长为2,那么需要2秒钟启动10个线程,也就是每秒钟启动5个线程。
  3. 循环次数:每个线程发送请求的次数。如果线程数为10,循环次数为100,那么每个线程发送100次请求。总请求数为10*100=1000 。如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本。
  4. Delay Thread creation until needed:直到需要时延迟线程的创建。
  5. 调度器:设置线程组启动的开始时间和结束时间(配置调度器时,需要勾选循环次数为永远) 。持续时间(秒):测试持续时间,会覆盖结束时间;启动延迟(秒):测试延迟启动时间,会覆盖启动时间

添加 HTTP 请求

右键点击“线程组” -> “添加” -> “Sampler” -> “HTTP请求”

对于本次测试接口 http://www.baidu.com/s?ie=utf-8&wd=jmeter ,HTTP 请求编写如下:

image.png

1、Web 服务器

  • 协议:向目标服务器发送 HTTP 请求协议,可以是 HTTP 或 HTTPS,默认为 HTTP
  • 服务器名称或IP :HTTP 请求发送的目标服务器名称或 IP
  • 端口号:目标服务器的端口号,默认值为80

2、HTTP 请求

  • 方法:发送HTTP请求的方法,可用方法包括 GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE 等。
  • 路径:目标 URL 路径(URL中去掉服务器地址、端口及参数后剩余部分)
  • Content encoding :编码方式,默认为 ISO-8859-1编码,这里配置为 utf-8
  • 在请求中发送的URL参数,用户可以将URL中所有参数设置在本表中,表中每行为一个参数(对应URL中的 name=value),注意参数传入中文时需要勾选“编码”

添加查看结果树

右键点击“线程组” -> “添加” -> “监听器” -> “察看结果树”

在添加查看结果数之后,运行 HTTP 请求,修改响应数据格式为“HTML Source Formatted”,可以看到本次搜索返回结果页面标题。

image.png

添加用户自定义变量

我们可以添加用户自定义变量用以Http请求参数化,右键点击“线程组” -> “添加” -> “配置元件” -> “用户定义的变量”:

image.png

新增一个参数wd,存放搜索词;并在 HTTP 请求中使用该参数,格式为 ${wd}

添加断言

右键点击“HTTP请求” -> “添加”-> “断言” -> “响应断言”

image.png

添加断言结果

右键点击“HTTP请求” -> “添加”-> “监听器” -> “断言结果”

这时,我们再运行一次就可以看到断言结果成功或失败了

image.png

添加聚合报告

右键点击“线程组” -> “添加” -> “监听器” -> “聚合报告”,用以存放性能测试报告

image.png

这样,我们就完成了一个完整 HTTP 接口的 JMeter 性能测试脚本编写

执行性能测试

配置线程组

点击线程组,配置本次性能测试相关参数:线程数,循环次数,持续时间等,这里我们配置并发用户数为10,持续时间为60s

image.png

执行测试

点击绿色小箭头按钮即可启动测试,测试之前需要点击小扫把按钮清除之前的调试结果。

image.png

分析测试报告

在性能测试执行完成之后,打开聚合报告可以看到:

image.png

  1. Label:测试的名称或标签,用于标识不同的请求或事务。
  2. # Samples:请求的总次数,也就是样本数量。显示了参与测试的总请求数。
  3. Average:所有请求的平均响应时间。帮助判断响应的整体性能。
  4. Median:中位数,表示50%的请求在该时间内完成。比平均值更能反映典型请求时间。
  5. **90% Line (90th Percentile)**:90%的请求在该时间内完成,用于识别大多数请求的响应时间情况。
  6. **95% Line (95th Percentile)**:95%的请求在该时间内完成,对响应时间的尾部有更详细的了解。
  7. **99% Line (99th Percentile)**:99%的请求在该时间内完成,用于了解极端情况下的响应时间。
  8. Min:最短响应时间,表示最优情况下的响应速度。
  9. Max:最长响应时间,显示最差情况下的响应速度。
  10. **Error %**:请求的错误百分比,帮助分析请求失败的比例。
  11. Throughput:每秒处理的请求数,表示系统的吞吐能力。
  12. Received KB/sec:每秒接收到的数据量,衡量从服务器接收的数据速率。
  13. Sent KB/sec:每秒发送的数据量,衡量发送到服务器的数据速率。

一般而言,性能测试中我们需要重点关注的数据有: #Samples 请求数,Average 平均响应时间,Min 最小响应时间,Max 最大响应时间,Error% 错误率及Throughput 吞吐量。