目前网络上有很多很多Jmeter的压力测试使用指南,但是在实际使用过程中,很多朋友会遇到许多并不处于理想状态的情况,比如某些参数不知道应该往哪里放,具体怎么分析测试结果等等。

所谓压力测试,实质就是让n多个用户在同一时间并发调用同一个接口,来看一下这个接口在这种并发调用的情况下有无异常表现。博主最近基于事业部当前所负责的项目,对其做了一个简单的接口压力测试。今天就以博主所测试的实际项目为例,为大家讲一下在实际使用过程中会遇见的一些坑,该如何处理,如何避免,如何完成一次完整的压力测试。

首先,我们需要准备的材料如下:

配好的Jmeter(如果还没配可以移步我的另一篇博客查看配置及基本使用方法

被测接口(就是你要用的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,即上图中的填写方式,方可正确接收。

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看”都是用“察”字,意义如下:


今天的分享就到这了~


绵薄之力

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走


​这些资料,对于想学习【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助,需要的朋友可以点击下方插件进群免费领取:

【Jmeter基础篇】03:如何进行post接口压力测试相关推荐

  1. 接口压力测试:Postman【Postman通常用于做接口测试,同时也可以用于作为压力测试】、Jmeter【专门做压力测试】、Loadrunner、Apache AB、Webbench

    做开发的同学一定会遇到接口对接,今天介绍两个对接测试两个我个人认为比较好的测试工具 postman和jmeter 1.postman通常用于做接口测试,同时也可以用于作为压力测试 2.jmeter做压 ...

  2. 一些解密必备知识(2)- 基础篇03|解密系列

    一些解密必备知识(2)- 基础篇03 让编程改变世界 Change the world by program   软件安全是信息安全领域的重要内容,本系列视频教程将涉及到软件相关的加密.解密.逆向分析 ...

  3. 4、《Jmeter基础篇》 从此善用逻辑控制器(2)

    故事背景 上一篇,学习了6个控制器3.<Jmeter基础篇> 从此善用逻辑控制器(1).今天我们继续再学习6个. 逻辑控制器 逻辑控制器,用来确定采样器的执行顺序.一共有17个控制器.本次 ...

  4. 3、《Jmeter基础篇》 从此善用逻辑控制器(1)

    故事背景 在2.<Jmeter基础篇> Thread Group(线程组)到底怎么用中,解释线程组时,提到,"控制器"和"HTTP请求"(采集器)必 ...

  5. Jmeter验证码图片识别注册接口压力测试实战

    写在前面 前段时间写了一篇博文<Jmeter验证码注册接口压力测试实战>,前两天又登录对应的网站看了一下.发现原来滑动验证的方式改成了图片验证码的方式,防止用户多次发送手机验证码. 看到这 ...

  6. 学习笔记-JMeter 进行接口压力测试

    一.压力测试场景设置 1.场景设定:进行接口压力测试时,有单场景也有混合场景.单场景就是对一个接口进行请求:混合场景需要对多个接口进行请求,在流程类业务场景会运用到 2.压测时间设定:通常时间为10- ...

  7. Jmeter验证码注册接口压力测试实战

    主要学习的内容包括发送HTTP请求.HTTP信息头管理器.HTTP cookies管理器.用户定义的变量.响应断言.CSV数据文件设置的使用. 测试网址及测试接口等说明 提供的测试网址为: http: ...

  8. 用python做简单的接口压力测试

    一个多月没有更博了,最近研究了一下接口的压力测试,主要来说就是连续频繁的对接口的调用,来测试接口的响应速度.返回结果,找到接口的性能瓶颈,最大承受极限等. 做接口压力测试的方法和工具很多,比较常用的工 ...

  9. python分析股票支撑压力_python+requests接口压力测试500次,查看响应时间的实例

    接口压力测试500次,查看响应时间 import json import requests import logging logging.basicConfig(level=logging.INFO, ...

最新文章

  1. 数据告诉你,哪个省才是高考地狱模式?第一名,你想不到!
  2. Web 开发规范 — WSGI
  3. K-Means原理解析
  4. MAC apache配置
  5. ElasticSearch学习笔记-02集群相关操作_cat参数
  6. JS设计模式(2)策略模式
  7. c语言求两个有序表合成差集代码,两个有序链表求差集,合并为一个有序链表...
  8. python语言的变量特点随时_python程序设计——基本语言特性
  9. 冲刺阶段站立会议每天任务1
  10. [转载] python程序所需的图片通过base64编码成字符串放在代码中
  11. 计算机作业老师会批改吗,小学和初中生家长每天都按照老师的要求批改作业吗?...
  12. VS2010的详细安装
  13. 【基本办公软件】万彩办公大师教程丨彩色转化PDF为黑白PDF
  14. SAI绘制滑雪者教程
  15. 中粮营销致远A6应用探秘:高速审批执行,营销策略落地
  16. HMM详解(NLP)全网少有的最清晰透彻全面解析
  17. 【深度学习神经网络】--BatchNorm详解
  18. 最小公倍数c语言调用该函数,C语言中如何调用函数求最大公约数和最小公倍数...
  19. IVS:引领视频监控进入智能化初级阶段
  20. 使用js模拟点击a链接 无效的解决方案

热门文章

  1. 微信video 视频
  2. JAVA在线编译器模拟
  3. 笔记本新机验机最详解
  4. 【数据来源】如何选择合适的第三方数据源
  5. Java两大数据类型
  6. oracle锁矩阵,你有多了解Oracle Enqueue lock队列锁机制?
  7. 猿创征文|OpenCV 如何提高条形码识别率
  8. spring cloud 快速上手系列 -> 02-配置中心 Config -> 022-Config客户端
  9. Latex 数学符号--双括号
  10. unity之Matrix4x4.TRS(Vector3 pos, Quaternion q, Vector3 s)的原理