JMeter使用
JMeter 简介
Apache JMeter 是一款纯 Java 编写负载功能测试和性能测试开源工具软件。相比Loadrunner而言,JMeter小巧轻便且免费,逐渐成为了主流的性能测试工具,是每个测试人员都必须要掌握的工具之一。
JMeter 主要有以下几方面用途:
- 性能测试:用于测试应用程序在不同负载下的性能表现
- 负载测试:模拟大量用户访问来观察系统的响应和稳定性
- 功能测试:验证应用程序的功能是否正常
测试实例
使用百度搜索接口作为本次的测试实例
- 接口地址:http://www.baidu.com/s?ie=utf-8&wd=jmeter性能测试
- 请求参数:ie-编码方式,默认为 utf-8;wd-搜索词
- 返回结果:搜索结果,可以通过校验结果中是否含有搜索词wd来判断本次请求成功或失败
JMeter 脚本编写
添加线程组

添加线程组各个属性详解:
- 线程数:虚拟用户数。一个虚拟用户占用一个进程或线程,设置多少虚拟用户数在这里也就是设置多少个线程数。
- Ramp-Up准备时长:设置的虚拟用户数需要多长时间全部启动。如果线程数为10,准备时长为2,那么需要2秒钟启动10个线程,也就是每秒钟启动5个线程。
- 循环次数:每个线程发送请求的次数。如果线程数为10,循环次数为100,那么每个线程发送100次请求。总请求数为10*100=1000 。如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本。
- Delay Thread creation until needed:直到需要时延迟线程的创建。
- 调度器:设置线程组启动的开始时间和结束时间(配置调度器时,需要勾选循环次数为永远) 。持续时间(秒):测试持续时间,会覆盖结束时间;启动延迟(秒):测试延迟启动时间,会覆盖启动时间
添加 HTTP 请求
右键点击“线程组” -> “添加” -> “Sampler” -> “HTTP请求”
对于本次测试接口 http://www.baidu.com/s?ie=utf-8&wd=jmeter ,HTTP 请求编写如下:

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”,可以看到本次搜索返回结果页面标题。

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

新增一个参数wd,存放搜索词;并在 HTTP 请求中使用该参数,格式为 ${wd}
添加断言
右键点击“HTTP请求” -> “添加”-> “断言” -> “响应断言”

添加断言结果
右键点击“HTTP请求” -> “添加”-> “监听器” -> “断言结果”
这时,我们再运行一次就可以看到断言结果成功或失败了

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

这样,我们就完成了一个完整 HTTP 接口的 JMeter 性能测试脚本编写
执行性能测试
配置线程组
点击线程组,配置本次性能测试相关参数:线程数,循环次数,持续时间等,这里我们配置并发用户数为10,持续时间为60s

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

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

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