在性能测试中,很多时候我们都会选择Jmeter来做性能测试。但是很多测试同学并不清楚如何正确的使用Jmeter去做性能测试,不规范的操作方式难以得到我们真正想要的正确结果,导致做了无用功。
那么我们如何正确地使用Jmeter去做性能测试呢,下面我将一步步讲述,我以一个登录接口和购买商品的接口为例子。
1.我们打开Jmeter,在测试计划中添加线程组。
2.添加完线程组后,添加HTTP请求
3.添加HTTP请求参数
4.添加请求头,在配置元件中找到HTTP信息头管理器,把自己需要请求接口的请求头添加进去
5.添加购买商品接口的HTTP请求,那么这一次会有一点不同。因为购买商品请求会用到登录的token,那么在添加完购买商品的HTTP请求参数后,我们需要在登录请求中添加一个Json提取器去提取token,以及要在购买商品的请求头中也添加token。
这个提取token要注意,如果你的接口返回请求参数为下面的格式,token提取方法就是$..token
{
"success": true,
"message": "登录成功",
"data": {
"token": "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxMzgwMDEzODMwMCIsImV4cCI6MTc2ODgzOTM4MywiaWF0IjoxNzY4NzUyOTgzfQ.kCdR4HOQfzcfevOOQuX0mhnJNWgp1P9tV-eJIDZzdAJGH-kplBnH2haKldF9yaFjm-AWXRAWe15ujDX39hfRBw"
}
}
但如果接口请求返回参数为下面的例子就应该填写$.token
{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...","code":200}
但如果 token 在嵌套结构中(如{"data":{"token":"xxx"}}),则 JSON 路径应改为$.data.token。
添加完Json提取器我们继续在购买商品接口的请求头添加token,格式为下图Authorization:Bearer ${token}
6.在我们添加完两个接口以后,可以添加查看结果树,请求一下看看接口通不通,如果通了我们就可以做下一步工作,即导入CSV数据文件设置。为什么我们要使用CSV数据文件设置呢,因为我们在压测的时候,肯定是需要模拟真实用户的登录和购买商品请求,如果我们只是单纯的设置线程组以及循环次数,这并不能模拟出真实的场景,是无效的压测。
如果请求需要账号和密码,我们在工作中要如何去模拟得到数据呢,我们可以直接在对应用户的表去拉去用户的账号密码,如果密码不同,这可能会浪费时间,我们可以设置一个统一的密码。或者就是写一个脚本去批量的生成用户。
7.CSV数据文件设置,我列举了一些常用的,如果你们接口有不同,要修改配置一下设置。当然实际上的性能测试中,你们的接口参数会更多,不过原理是一样的。如果有参数的接口都应该使用csv配置。
8.修改我们接口请求配置,因为我们因为导入了CSV文件配置,Jmeter就会从CSV文件中读取数据,那么我们请求的参数也要修改一下。如下图,后续的接口也是一样的操作。
9.添加断言,在多接口压测中,我们不确定接口所有的压测请求是否都是有效的请求,所有需要添加断言。这个情况就需要添加断言去判断,一般来说我们使用响应断言是最多的。
我一般通过"success": true这个字段去判断,一般来说现在正常的接口规范,请求成功这个接口就是首先返回的是success:true,然后才是商品购买成功/失败。购买成功和失败其实都是正常业务会出现的情况,所以在压测中我会根据请求是否成功失败去进行断言,大家也可以根据自己的业务以及场景进行适当的调整。
10.后面我们可以添加聚合报告初步跑一下看看我们编写的脚本是否通了。如果都是可以正常提取到我们的数据中值,我们还可以再添加一个高斯随机定时器,因为用户在购买商品的时候可能会犹豫什么的,更贴近实际;如果要测试秒杀场景的就需要添加同步定时器。
11.当我们的脚本跑通了,并设置完线程组的压测参数就要保存。不要在页面中直接进行压测!!!Jmeter官方也是不建议我们这样操作,核心原因是GUI 模式会影响压测的准确性、稳定性和资源利用率。所以我们要使用命令的方式去操作
我们关闭页面后,打开CMD,输入jmeter -n -t 脚本路径 -l 压测结果存放路径
例如 jmeter -n -t D:\login_and_buy.jmx -l D:\result.jtl
当性能压测执行完以后呢,我们想要查看可视化的HTML报告,可以在CMD中继续输入执行
jmeter -g 压测结果存放路径 -o HTML报告的路径以及文件命名(自定义)
例如jmeter -g D:\result.jtl -o D:\jmeter_report
执行完以后我们在对应的路径可以看到一个html的文件,打开即可看到压测结果的可视化报告
当然如果你们公司有什么Skywalking这类工具就不需要我后面这些导入导出压测报告的操作,直接在Skywalking查看报告结果就行。