Jmeter基础篇(01):如何进行post接口压力测试

您所在的位置:网站首页 压测工具使用方法 Jmeter基础篇(01):如何进行post接口压力测试

Jmeter基础篇(01):如何进行post接口压力测试

2024-07-15 01:26| 来源: 网络整理| 查看: 265

 🔥 交流讨论:欢迎加入我们一起学习!

🔥 资源分享:耗时200+小时精选的「软件测试」资料包

🔥 教程推荐:火遍全网的《软件测试》教程  

📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

目前网络上有很多很多Jmeter的压力测试使用指南,但是在实际使用过程中,很多朋友会遇到许多并不处于理想状态的情况,比如某些参数不知道应该往哪里放,具体怎么分析测试结果等等。 所谓压力测试,实质就是让n多个用户在同一时间并发调用同一个接口,来看一下这个接口在这种并发调用的情况下有无异常表现。博主最近基于事业部当前所负责的项目,对其做了一个简单的接口压力测试。今天就以博主所测试的实际项目为例,为大家讲一下在实际使用过程中会遇见的一些坑,该如何处理,如何避免,如何完成一次完整的压力测试。 呐,跟我来吧~

首先呢,我们需要准备的材料如下: 配好的Jmeter(如果还没配可以移步我的另一篇博客查看配置及基本使用方法:https://blog.csdn.net/qq_36396763/article/details/78717417 被测接口(就是你要用的url); 所需的相关参数。

我们要测的这个接口的具体作用是:扫描一个商品上的标识码,获取相关信息,并将商品出库。 也就是说每调用一次接口就相当于出库一件商品(标识码的内容是一个数字串,我们扫描之后把这个数字串存到数据库对应字段中并更新状态,就表示这个产品被出库了)。

Manager要求的并发量是500,时间10s,也就是说我们要模拟500个人在10秒钟之内同时进行扫码,然后查看并发结果。每个用户只访问一次接口。 1、首先我们建立一个测试计划:在TestPlan上右键-Threads(users)-添加线程组,如图:在这里插入图片描述 下图即为线程组页面:在这里插入图片描述 线程数:就是模仿并发用户的数量, Ramp-up: 运行全部线程的总时间,单位是秒。 循环次数:就是每个线程要循环多少次。

我设置的线程数是500,就是相当于有500个用户,运行线程的总时间是10秒。 也就是说在这10秒中之内500个用户同时访问,一秒钟有50个用户同时访问,每个用户循环一次,也就是访问一次。

2、测试计划上点击右键-Sampler-HTTP请求:在这里插入图片描述在这里插入图片描述

在这个页面中我们需要填写的部分如下: 协议:https或者http,根据我们接口的实际对应协议来写即可。 方法:我们的接口用的是POST方法,所以将方法设置为POST。 路径:即接口对应的url信息。 Content encoding:编码格式,通常为utf-8。 不存在跳页等操作,所以重定向无需额外设置。

3.POST方法的参数要写在请求体中,我们可以点击下方的Body Data,将json格式的参数写入:在这里插入图片描述

此时你如果想要继续添加信息头,点击Parameters键会发现弹出这样一个提示信息:在这里插入图片描述 因为POST请求在填写了Body Data后是无法打开Parameters栏的,如果想要添加信息头,可以使用Jmeter自带的信息头管理器:Thread Group右键-添加-配置元件-HTTP信息头管理器在这里插入图片描述

4、添加HTTP信息头管理器后,我们可以在其中添加信息头参数:

在这里插入图片描述※要注意的是Content-Type若为“x-www-form-urlencoded”结尾(此为 Jquery的Ajax请求默认方式)可能会导致向服务器发送数据不成功,运行时会报如下错误: {“timestamp”:“2019-04-10T12:29:10.560+0000”,“status”:415,“error”:“Unsupported Media Type”,“message”:“Content type ‘application/www;charset=UTF-8’ not supported”,“path”:"/esa/circulation/insert"}

我们需要将x-www-form-urlencoded改为json,即上图中的填写方式,方可正确接收。 相关博客:https://blog.csdn.net/dingxx1/article/details/79840541

5、添加用表格查看结果,查看结果树,聚合报告:Thread Group上右键-添加监听器,一个一个加上即可:在这里插入图片描述 不同监听器的具体效果略有差异,可以多使用熟悉。

全部配置好之后,点击执行按钮,开始执行。可以在监听器中看到对应的测试结果。

6.下面我们使用这三种监听器来进行分析(相关名词解释引自网络):用表格察看结果:在这里插入图片描述 对应名词解释如下: Sample:每个请求的序号 Start Time:每个请求开始时间 Thread Name:每个线程的名称 Label:Http请求名称 Sample Time:每个请求所花时间,单位毫秒 Status:请求状态,如果为勾则表示成功,如果为叉表示失败。 Bytes:请求的字节数 样本数目:也就是上面所说的请求个数,成功的情况下等于你设定的并发数目乘以循环次数 平均:每个线程请求的平均时间 最新样本:表示服务器响应最后一个请求的时间 偏离:服务器响应时间变化、离散程度测量值的大小,或者,换句话说,就是数据的分布。 在“用表格察看结果”中可以非常直观地看到:线程组名称,每个线程响应时间,返回结果是否成功,字节数等信息,对整体结果有一个大体的掌握。

察看结果树:在这里插入图片描述 对应名词解释如下: Thread Name:线程组名称 Sample Start: 启动开始时间 Load time:加载时长 Latency:等待时长 Size in bytes:发送的数据总大小 Headers size in bytes:发送数据的其余部分大小 Sample Count:发送统计 Error Count:交互错误统计 Response code:返回码 Response message:返回信息 Response headers:返回的头部信息

在**“察看结果树**”中可以详细地查看每个请求的结果: 前面是绿色的小盾牌就说明请求是通过的,返回值为200。 如果是红色的小盾牌,说明请求失败,这时候可以通过右边的取样器结果和响应数据来查看结果。

聚合报告:在这里插入图片描述 对应名词解释如下: Sample:本次测试场景共运行多少线程; Average:平均响应时间; Median:统计意义上的响应时间中值; 90% line:所有线程中90%的线程响应时间都小于xx的值; Min:响应最小时间; Max:响应最大时间; Error:出错率; Throughput - 吞吐量以“requests/second、requests /minute、 requests /hour”来衡量。 时间单位已经被选取为second,所以,显示速率至少是1.0,即每秒1个请求。 当吞吐量被保存到CVS文件时,采用的是requests/second,所以30.0 requests/second 在CVS中被保存为0.5。 Sent kb/sec - 以Kilobytes/seond来衡量的吞吐量。 在这里我们可以很直观地看到最大执行时间,最小执行时间等,以获得一个比较综合的概要。

7.若需要进行性能分析,我们需要确定对标产品,如百度阿里的某些产品(或指定性能指标)。 可以使用类似的方法测出对标产品在相同条件下的性能表现,然后用我们的产品与之进行对比,发现需要进行优化的点。

分析时会发现的比较常见的几种故障: ①被测地址写错 这样会直接报404,看一眼报告结果就知道了(可能是地址不存在,或者https写成了http等)。 ②415请求不通(请求方式问题) 上面文中有提到过,若信息头中编码格式写成了以“x-www-form-urlencoded”结尾(为 Jquery的Ajax请求默认方式)可能会导致向服务器发送数据不成功,运行时会报如下错误:{“timestamp”:“2019-04-10T12:29:10.560+0000”,“status”:415,“error”:“Unsupported Media Type”,“message”:“Content type ‘application/www;charset=UTF-8’ not supported”,“path”:"/esa/circulation/insert"} 我们需要将x-www-form-urlencoded改为json,就可以正确接收啦。 ③代码自身问题 改下代码吧~

另外Jmeter中的“cha看”都是用“察”字,意义如下:在这里插入图片描述

最后我邀请你进入我们的【软件测试学习交流群:785128166】, 大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,还会有免费直播课,收获更多测试技巧,我们一起进阶Python自动化测试/测试开发,走向高薪之路

作为一个软件测试的过来人,我想尽自己最大的努力,帮助每一个伙伴都能顺利找到工作。所以我整理了下面这份资源,现在免费分享给大家,有需要的小伙伴可以关注【公众号:程序员二黑】自提!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3