[Jmeter篇]如何使用Postman和Jmeter进行网页性能测试-万字精品文章带你入门性能测试_postman性能测试
前言:本人测试萌新,如果有什么做的不好的地方,请大家多多包涵,我会尽力改进的
文章目录
- 一、性能测试的必要性
- 二、常用的性能测试工具
- 三、认识Jmeter
-
- 线程属性部分
- 取样器错误后执行动作
- 线程运行时间/状态
- JSON操作符(可跳过)
-
- 例子
- 1. 基础语法
- 2. 数组操作
- 3. 过滤器语法(`?(@.key 条件)`)
- 四、Jmeter使用技巧
-
- 运行与清理
- 添加插件
- 五、性能测试阶段(重要)
-
- 5.1.1登陆页面网络通信测试
- 5.1.2登陆页面性能测试
- 5.2.1 列表页面测试初阶
- 5.2.2列表测试进阶配置
-
- 使用JSON提取器
- 5.3用户个人信息接口
- 5.4博客详情页
- 5.5博客发布页
- 5.6JSON断言
- 5.7添加同步定时器(集合点)
- 5.8事务控制器
- 5.9CVS数据文件设置
- 5.10 cookie管理器
- 5.11 梯度测压线程组
- 六、出具性能测试报告
一、性能测试的必要性
性能测试是保证软件系统在高负载或大量用户使用下仍能稳定运行的关键步骤,主要目的是验证系统的响应时间、并发处理能力、稳定性和资源使用情况是否满足业务需求。
举个简单的例子:假如一个电商网站双十一活动当天访问量暴涨,如果没有做性能测试,服务器可能在用户点击“结算”按钮时直接崩溃,造成巨大的经济损失和用户信任流失。
一句话总结:性能测试并不是可选项,而是保障系统质量、用户满意度和业务成功的关键环节。
二、常用的性能测试工具
三、认识Jmeter
线程属性部分
线程数 相当于虚拟用户的数量,或者说是并发数
Ramp-Up时间 表示,十个虚拟用户发送请求必须在Ramp-Up时间内完成,或者说是性能测试运行时间
循环次数 表示请求循环几遍,当勾选永远的时候,性能测试永远都不会结束,但是我i们可以通过勾选调度器,来规定请求时间
结果
添加聚合报告可获得
取样器错误后执行动作
HTTP请求在性能测试运行的过程中如果出现了接口错误我们要采取什么措施?
选择默认即可,无需修改
线程运行时间/状态
黄色感叹号左边代表运行的时间
黄色感叹号点击后会出现运行状态
JSON操作符(可跳过)
参考文献
例子
{ \"store\": { \"book\": [ { \"category\": \"fiction\", \"author\": \"Author A\", \"price\": 12.99 }, { \"category\": \"history\", \"author\": \"Author B\", \"price\": 8.99 }, { \"category\": \"fiction\", \"author\": \"Author C\", \"price\": 15.50 } ], \"bicycle\": { \"color\": \"red\", \"price\": 19.95 } }}
1. 基础语法
$
$
.
$.store.book
[]
$.store[\'book\']
*
$.store.book[*].author
..
$..author
2. 数组操作
[0]
$.store.book[0]
[-1]
$.store.book[-1]
[0,1]
$.store.book[0,1]
[0:2]
$.store.book[0:2]
[?()]
$.store.book[?(@.price > 10)]
3. 过滤器语法(?(@.key 条件)
)
@.price > 10
@.category == \'fiction\'
@.price <= 20 && @.author
四、Jmeter使用技巧
运行与清理
第一个绿色的按钮代表运行
第二个扫把代表清理之前运行所产生的数据
在右上角我们可以看见运行时间
添加插件
点击链接
将下载好的插件放到jmeter下lib/ext⽂件夹下
然后点击
就可以开始愉快的使用插件了
五、性能测试阶段(重要)
5.1.1登陆页面网络通信测试
在进行性能测试之前,我们首先需要确认该网址可以被正常测试,此时我们就需要使用postman对该网址进行测试,首先我们在登录界面时按下F12按钮,然后切换到network界面
勾选选项preserve log,然后切换到Fetch/XHR界面,就能看到login借口了
随后,我们打开postman界面,输入url,方法改为post
但是此时我们进行send,发现
所以我们需要在network界面切换至
正常情况下,此处应加密,但是为了测试方便,此处不进行加密
把内容输入到对应的key值中,再次进行send,此时
5.1.2登陆页面性能测试
我们打开Jmeter,右键测试计划,选择线程组,随后右键线程组添加取样器,添加HTTP请求,随后添加网页参数;
随后我们点击页面底部的添加,将我们的参数填入
随后我们在工具栏里找到运行按钮,点击运行
发现此时跳出弹窗
这个弹窗的意思是在运行之前我们需要先进行保存
点击yes,将他保存在自己的电脑上
再次点击运行,我们此时发现没有任何变化,原因是我们没有添加监听器
右键线程组,选择添加->监听器,我们选择第一个查看结果树
此时,再次运行我们就能获得结果了
我们主要关注的内容是响应数据里的响应体,请求里的响应头和响应体,以及响应接口
5.2.1 列表页面测试初阶
在使用postman进行接口测试之前我们发现,在进行性能测试时,一个页面的,协议,IP,端口号,这三个东西是不会变的, 所以我们添加以下元件
当取样器中存在未配置的选项,会直接去http请求默认值里面取,作用域是整个线程组。
此时,我们使用postman去请求一下这个页面,发现请求失败。
此时我们可以发现,通过post登陆界面可以获取到一个信息
我们可以发现,在请求头里面有一个名为user_token_header的参数
此时,我们将这个参数放到列表页中,发现,请求成功
在发现了这些情况之后,为了能在Jmeter上运行我们的性能测试,我们需要再添加一个信息头管理器
在这里插入图片描述
添加好数据之后我们运行Jmeter,发现运行成功
但是我们发现一个问题,在我们登录的界面,也出现了我们的请求头user_token_header,为了解决这种情况,我们把http信息头管理器,拖动入列表页,让他成为列表页的子接口
此时,我们再运行,就发现登陆界面的请求头里面没有该信息了
5.2.2列表测试进阶配置
虽然我们通过以上方法可以正常访问列表页,但是这个信息头是会“过期”的,为了能进行自动化性能测试,我们开始进阶配置!
使用JSON提取器
通常情况下我们只选择main sample only
Names of created variables:(变量名)将提取好的数据保存在该变量下
JSON Path expressions:JSON提取表达式
其他选项我们目前不用
接下来我们在查看结果树页面,选择该选项
输入$.data我们就成功取到了token
所以,我们将表达式填入到JSON提取器内,然后将表达式的值,放入http信息头管理器内
注意:引用变量必须要使用规定的格式
再次运行,我们发现成功把登录接口返回值里面的data数据作为了列表页接口的请求头信息
5.3用户个人信息接口
按照惯例,我们先在postman上对该接口进行测试 ,发现加上token之后可以GET到
于是我们将它放到Jmeter上面运行
运行过后,我们发现一个问题
发生这个问题的原因是,信息头管理器取到了列表页的data
若多个接口中都有符合条件的JSON提取字段,就会发生覆盖
解决方案
5.4博客详情页
在进行postman测试之后,我们把这个接口放到Jmeter中,此时我们会发现一个问题,就是虽然发生了请求越界,但是却不会发生报错现象
为了避免这种现象,我们可以把列表页的blogid拿出来使用
考虑到有可能有多个接口会需要id,所以我们选取用户定义变量
通过这种方法,我们可以一键测试多个需要相同元素的页面
5.5博客发布页
在postman测试过程中,需要注意的一个点是在post过程中需要在body里的raw加上json内容
把这个接口放入Jmeter中
但是,运行之后,我们发现请求失败
经过仔细排查,发现问题的原因
我们的Jmeter的Content-Type和网页的内容不一样
把Jmeter的内容放到postman上面,确认就是该问题导致测试失败
于是我们在信息头管理器中加入内容
运行之后发现,原因是其他的接口并不需要这个文件
进行优化
5.6JSON断言
通过以上的测试,我们发现有时候请求获得了非预期的数据其实是不对的,而且在实际情况中会出现高并发的测试内容,所以为了验证准确性,我们就需要加入JSON断言
5.7添加同步定时器(集合点)
我们在测试过程中发现,在多线程数运行时,往往做不到同一时间开始运行而实现的高并发,所以我们
模拟用户组的数量(并发数):当已经准备好的线程达到或者大于某个数量的时候就开始发送请求
重要:并发数应小于线程组里配置的线程数,并且应成整数倍
错误例子:当我线程组设置了六个,同步定时器设置为3个,按理说运行好之后就会退出可是我们发现运行了两分钟依然没有退出,准备好的线程数量为“2”
打开信息界面,发现一开始准备好了四个线程直接发送出去了
所以我们在使用的时候最好把循环次数永远和调度器打开,能避免我们最后一次并发达不到要求的情况
5.8事务控制器
在添加了事务管理器之后我们可以把类似的请求放在一起,就像这样而所产生的现象则是在我们的聚合报告里面多出了一列。事务控制器可以让我们更好的了解到Jmeter运行的状况
5.9CVS数据文件设置
为了更好的模拟用户使用的情况,我们可以添加一个CVS数据文件设置
接下来,我们在工作目录下,创建一个包含有账号名和密码的csv文件(通过execl)
导入数据可得
5.10 cookie管理器
正常情况下我们所使用的网页都是有cookie信息的,所以此时我们需要添加cookie信息管理器
该元件是全自动获取cookie的,所以基本上没有配置的必要
5.11 梯度测压线程组
(插件exter、thread)
This group will start:启动多少个线程,同线程组中的线程数
First, wait for:等待多少秒才开始压测,⼀般默认为0
Then start:⼀开始有多少个线程数,⼀般默认为0
Next,add:下⼀次增加多少个线程数
threads every:当前运⾏多⻓时间后再次启动线程,即每⼀次线程启动完成之后的的持续时间;
using ramp-up:启动线程的时间;若设置为5秒,表⽰每次启动线程都持续5秒
**thenhold loadfor:**线程全部启动完之后持续运⾏多⻓时间
finally,stop/threadsevery:多⻓时间释放多少个线程;若设置为5个和1秒,表⽰持续负载结束之后每1秒钟释放5个线程
**举例解读:每隔2s启动5个线程,这5个线程必须在1s内启动完成准备,达到20个线程位置,持续时间60s,持续时间结束之后每隔1s关闭五个线程
横坐标为时间,纵坐标为启动的线程 **
接下来我们把上面线程组的内容都拉下来,并且添加元件
结果如下
我们发现响应时间增大,吞吐量降低
线程数
响应时间
吞吐量
六、出具性能测试报告
在cmd下
Jmeter -n -t 脚本⽂件 -l ⽇志⽂件 -e -o ⽬录-n : ⽆图形化运⾏-t : 被运⾏的脚本-l : 将运⾏信息写⼊⽇志⽂件,后缀为jtl的⽇志⽂件-e : ⽣成测试报告-o : 指定报告输出⽬录
注意!:日志⽂件和⽬录可以不存在,若为已经存在的情况下需要保证内容为空,否则会出现错误!
运行结果
双击打开html文件