5年经验之谈 —— 手把手教你接口性能测试之JMeter性能测试篇!

news2024/11/16 6:02:46

本文是我们手把手教你接口性能测试系列文章中的完结篇,介绍如何使用JMeter工具进行接口测试和并发测试。


一、Jmeter 简介

Jmeter是由Apache公司开发的一个纯Java开源项目,即可以用于做接口测试也可以用于做性能测试,具备高移植性和扩展性,可以实现跨平台运行,可以实现分布式负载。

采用多线程,允许通过多个线程并发取样或通过独立的线程对不同的功能同时取样。

使用 Jmeter 一般用于以下两种类型的性能测试(基本能覆盖绝大多数的性能测试需求)

负载测试:通过测试系统在资源超负荷情况下的表现,以发现设计上的错误或验证系统的负载能力。

压力测试:测试系统能承受的最大负载能力。目的在于发挖掘出目标服务系统可以处理的最大负载。

Jmeter 进行性能测试的基本过程

图片

新增线程组

创建测试线程组,并设置线程数量及线程初始化启动方式。

新增 JMeter 元组

创建各种默认元组及测试元组,填入目标测试静态资源请求和动态资源请求参数及数据。

新增监听器

创建各种形式的结果搜集元组,以便在运行过程及运行结束后搜集监控指标数据。

运行&查看结果

调试运行,分析指标数据,挖掘性能瓶颈、评估系统性能状态。

二、Jmeter进行接口测试

在聊jmeter如何进行性能测试之前,我们先简单介绍一下jmeter如何进行接口测试的

1、获取接口文档

使用Jmeter进行接口测试之前,需要拿到api接口文档,对接口信息进行分析,用于接口脚本的设计准备。

通常我们可以跟项目对应开发同学获取开发接口设计文档(类如Java后端项目使用Swagger进行接口文档维护)

图片

除此之外,我们Web页面可以在开发者选项中获取相应的接口调用信息,移动端可通过Fiddler工具抓包得到相应的接口请求入参和返回信息。

有了接口文档后,我们还需要熟悉接口业务,接口地址,鉴权方式,出参,入参,错误码等...

下面我们以12306网站为例,分别获取Get类型接口和Post接口进行演示

a、在12306的车次查询页面获取Get类型接口

图片

例如上面的接口,我们可以得到的信息如下:

  1. 请求 URL: https://kyfw.12306.cn/otn/leftTicket/queryZ?leftTicketDTO.train_date=2023-01-24&leftTicketDTO.from_station=SHH&leftTicketDTO.to_station=BJP&purpose_codes=ADULT

  2. 请求方法: GET

  3. 请求头

    1. ...

    2. Connection: keep-alive

    3. Cookie: _uab_collina=******; JSESSIONID=******; guidesStatus=off; highContrastMode=defaltMode; cursorStatus=off; _jc_save_fromStation=%u4E0A%u6D77%2CSHH; _jc_save_wfdc_flag=dc; RAIL_EXPIRATION=1673539455343; RAIL_DEVICEID=******; BIGipServerpassport=******; _jc_save_toStation=%u5317%u4EAC%2CBJP; _jc_save_toDate=2023-01-10; BIGipServerindex=1104740618.43286.0000; route=6f50b51faa11b987e576cdb301e545c4; BIGipServero******4545.0000; current_captcha_type=C; _jc_save_zwdch_fromStation=%u4E0A%u6D77%2CSHH; _jc_save_zwdch_cxlx=1; fo=fcwi8s6jfgcquajch3UNhkI-pbzTa1PopuXw-4vLSsFwS******JLLAo4MZvmDbZL-yoEDOuNWhUau7y5bnrdhvGOKaoer_Dg3VT8******0pIcw6-5Bjgg; _jc_save_fromDate=2023-01-24

    4. Host: kyfw.12306.cn

    5. ...

b、在12306首页中获取Post类型接口

图片

例如上面的接口,我们可以得到的信息如下:

  1. 请求 URL: https://kyfw.12306.cn/otn/logsdk/getInfo

  2. 请求方法: POST

  3. 请求头

    1. ...

    2. Connection: keep-alive

    3. Content-Type: text/plain;charset=UTF-8

    4. Host: kyfw.12306.cn

    5. ...

POST接口请求参数可在负载中进行查看(Chrome则在载荷中进行查看,不同浏览器查看tab标签名称不一致)

图片

2、配置接口请求

a、添加线程组

图片

图片

b、添加HTTP请求

图片

图片

填充Get接口请求信息

图片

填充Post接口请求信息

图片

c、添加HTTP信息头管理器

图片

图片

维护接口请求头信息

图片

d、添加观察结果树

图片

图片

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036

3、进行接口测试

a、执行接口请求

图片

b、查看接口返回信息

图片

4、进行接口返回信息验证

JMeter以及Postman等接口测试工具,他们都是基于协议进行工作的,使用这些工具进行发送请求,当请求发送成功的时候(即协议发送成功),在查看结果树中请求样本显示绿色。比如协议状态码是200就是成功,也是仅仅代表协议发送成功,但是业务不一定成功。有可能是协议发送成功了,但是业务没有成功,但是JMeter默认不做判断。

图片

那么想要校验业务成功还是失败,就得需要进行断言,断言根据接口的响应进行断言,一般主要断言业务状态码以及messege等信息。

a、添加响应断言,并设置要校验的字段信息

图片

图片

b、添加JSON断言,并设置要校验的字段信息

图片

c、添加断言结果

图片

d、查看验证返回信息

     断言结果中只会展示错误的断言信息

    若请求的接口正常返回值,且返回信息中的字段断言信息符合期望值,则不会展示断言信息

图片

    若请求的接口返回信息中的字段断言信息有误,断言结果中会输出对应的验证结果信息

图片

查看结果树中也可在对应的接口请求下查看错误的断言信息

图片

5、Jmeter也支持文件上传/下载接口测试

这部分我们后续单独进行介绍(挖坑)

图片

6、常见的接口依赖、接口公共参数配置、参数化等,在另外的章节中展开介绍(持续挖坑...)

三、Jmeter并发测试

上面我们简单介绍了Jmeter如何进行接口测试的,下面我们更进一步,在接口功能测试完善的基础上,开展接口的另外一个层面的性能测试工作。

线程组设置

图片

图片

线程组概念

    通俗的讲,一个线程组可以看做一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户。

    多个用户同时去执行相同的一批次任务。每个线程之间都是隔离的,互不影响的。

    一个线程的执行过程中,操作的变量,不会影响其他线程的变量值。

线程数:

线程数也就是并发数,每个线程将会完全独立的运行测试计划,互不干扰。多个线程用于模仿对服务器的并发访问。

设置ramp-up:

ramp-up 用于设置启动所有线程所需要的时间。(有人称之为启动时间,有人说是准备时长,看个人喜好)

如果选择了10个线程,并且ramp-up 是100秒,那么JMeter将在100秒内使10个线程启动并运行。

每个线程将在前一个线程启动后10(100/10)秒后启动。

当这个值设置的很小、线程数又设置的很大时,在刚开始执行时会对服务器产生很大的负荷。

设置循环次数:

该项设置线程组在结束前每个线程循环的次数,如果次数设置为1,那么JMeter在停止前只执行测试计划一次。

假设

线程数:n

Ramp-Up:T

循环次数:a  

若每个循环运行时间是 t

当时间到 S = (T- T/n)时,最后一个线程启动,若要使所有线程同时运作,则需要在最后一个线程启动的时候第一个线程仍未关闭,为达到这个要求,需满足 a·t > S及a > S/t

每一个线程运行时间既是R = a·t(此处的a是大于S/t的某一值),则第一个线程在时间点为R 的时候停止,整个测试理论运行时间则是 :S + R = (1-1/n)·T + a·t

总结:

    测试中变量是 线程数 n ,每个循环时间 t 是个实践值,循环次数 a 只是为了延长单个线程的运行时间,从而保证当最后一个线程启动时,所有线程都在运行中,达到压测效果。

举个大栗子:

模拟50个用户,每人在抢票时不停的刷新了100次页面查看余票信息

1、设置线程数为50 ,我们的并发用户量就是50个用户同时登录

图片

2、添加定时器(同步定时器(Synchronizing Timer)-->用来设置集合点,其作用是:阻塞线程,直到指定的线程数量到达后,再一起释放,可以瞬间产生很大的压力

图片

3、设置集合点,当用户数量达到20个的时候再同时请求进行登录操作

图片

(1)模拟用户的数量:即指定同时释放的线程数数量,若设置为0,等于设置为线程组中的线程数量;

(2)超时时间:即超时多少毫秒后同时释放指定的线程数;如果设置为0,该定时器将会等待线程数达到了设置的线程数才释放,若没有达到设置的线程数会一直死等。如果大于0,那么如果超过超时时间中设置的最大等待时间后还没达到设置的线程数,Timer将不再等待,释放已到达的线程。

4、添加聚合报告

图片

5、执行脚本

图片

6、查看压测结果

聚合报告即压测过程结束时对每次请求及对整体请求的一次总结报告

图片

聚合报告中参数释意

Label:HTTP Request name属性值。

样本:测试的过程中一共发出了多少个请求即总线程数,(如果模拟50个用户,每个用户迭代100次,这里就显示5000),对应图形报表中的样本数目。

平均值:单个Request的平均响应时间,计算方法是总运行时间除以发送到服务器的总请求数,对应图形报表中的平均值。

中位数:50%用户的响应时间。

90%百分数:90%用户的响应时间。

最小值:服务器响应的最短时间。

最大值:服务器响应的最长时间。

异常%:本次测试中出错率,请求的数量/请求的总数。

吞吐量:默认情况下表示每秒完成的请求数。

接受KB/Sec:每秒从服务器接收到的数据量,即每秒钟请求的字节数,时间单位均为ms。

7、其他结果展示元件

a、响应时间图

图片

b、图形结果

图片

总结

      在本篇中,我们对JMeter工具作了简单的介绍,且分别从接口测试以及接口并发测试的层面进行了图文介绍。

    对于接口性能测试方面,应当还涉及到相应的服务器性能监控,以及性能监控时需要观测的性能点,

    尤其是在开展性能测试之前需要进行性能测试的需求分析、制定测试计划、编写和调试测试脚本、收集测试结果、分析测试数据整合性能测试报告,诸多流程中涉及到很多细节,

    都是我们需要去通过不断地学习和实践的。

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

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
 

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1125783.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QUIC协议包头保护(四)

一:为什么要有包头保护 学过HTTP和HTTPS都知道,随着网络的普及,人们对于信息的保护,个人的隐私越发的重视。信息加密对于未来协议的发展肯定是越来越趋于严格。QUIC作为新生代的协议,必然要站着前辈的肩膀上发展&#…

基于Python实现的复制、移动、离线化你的 Markdown 文档,清理 Markdown 引用路径中的垃圾文件

Markdown 工具箱 完整代码下载地址: Markdown 工具箱 🚩 简介 Markdown 工具箱,是我为 Markdown 笔记管理做的一个工具集。目前有以下几个功能: 复制 批量将 md 笔记(连带它的相对路径引用的图片、附件)…

c#中使用stringbuilder的Append方法写sql语句

c#中使用stringbuilder的Append方法写sql语句 c#中使用stringbuilder的Append方法写sql语句_c#strsql.append_安静点DGC的博客-CSDN博客https://blog.csdn.net/qq_26925297/article/details/81586884 特此记录 anlog 2023年8月8日

PMP考试中有哪些疑点、难点?

目前PMP考试的内容只有最后5个月是按照旧考纲,后面的考试基本上都是按照新考纲进行。因此,备考的朋友们需要学习很多新的知识点和敏捷学习方法。所以现在是给今年想要备考的朋友们提供学习建议的时候了。 01、新版考纲将主要关注以下三个新领域&#xf…

一、XSS加解密编码解码工具

一、XSS加解密编码解码工具 解释:使用大佬开发的工具,地址:https://github.com/Leon406/ToolsFx/blob/dev/README-zh.md 在线下载地址: https://leon.lanzoui.com/b0d9av2kb(提取码:52pj)(建议下载jdk8-w…

每天一道算法题——动态规划

找到工作就不更新了~ 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 示例 1: 输入: 2 输出: 2 解释: …

博客系统自动化测试

1、博客列表页面测试 测试内容 测试代码: TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class BlogListTest extends Autotest{public static ChromeDriver driver createDriver();// 准备工作TestBeforeAllstatic void ready() {driver.get(&q…

适用于 Mac 电脑的 10 款最佳数据恢复工具集

无论是个人照片还是重要的商业文档,对于那些依赖计算机获取重要文件的人来说,数据丢失都是一场噩梦。 值得庆幸的是,Mac用户可以使用各种数据恢复工具,可以帮助您恢复丢失或意外删除的文件。 在本文中,我们将采用适用于…

RAM(recognize anything)—— 论文详解

一、概述 1、是什么 RAM 论文全称 Recognize Anything: A Strong Image Tagging Model。区别于图像领域常见的分类、检测、分割,他是标记任务——即多标签分类任务(一张图片命中一个类别),区分于分类(一张图片命中一个…

Unity Meta Quest 一体机开发:前期准备和环境配置(2023 版,Oculus Integration v57)

​ 文章目录 📕教程说明📕思维导图概括📕开发者模式📕可下载的软件⭐Oculus 电脑客户端⭐SideQuest⭐Meta Quest Developer Hub⭐Unity Hub 📕安装 Unity 时需要添加的模块📕设置 Unity 的 Build Settings…

构建高性能应用的利器:Nginx反向代理及配置详解

一、Nginx概念解读 对于新事物的理解,最好的方式就是从概念入手,本文作为《Nginx专题》系列文章的第一篇,先从Nginx的名称开始来分解这个神秘的引擎。 Nginx,是engine X的缩写,发音也是engine x,2004年由…

安装dai li

https://xn–6nq44r2uh9rhj7f.com/#/knowledge 先gomai订阅, 在打开使用文档

【大数据】Kafka 实战教程(二)

Kafka 实战教程(二) 1.下载2.安装3.配置4.运行4.1 启动 Zookeeper4.2 启动 Kafka 5.第一个消息5.1 创建一个 Topic5.2 创建一个消息消费者5.3 创建一个消息生产者 1.下载 你可以在 Kafka 官网:http://kafka.apache.org/downloads&#xff0c…

绝对不可错过的6个搜索引擎网站,超级值得收藏

https://www.gobaidugle.com/ 一个全能的搜索引擎网站,支持设置多种搜索模式,可以根据需求选择双搜、三搜、单搜等方式。 如果是双搜的话你可以看到多种搜索结果,能够一键搜索到自己需要的内容,非常简单快捷。 2、懒盘搜索 htt…

物联网AI MicroPython传感器学习 之 GC7219点阵屏驱动模块

学物联网,来万物简单IoT物联网!! 一、产品简介 LED-8 * 32点阵屏显示板由 4 块单色 8x8 共阴红色点阵单元组成,通过 SPI 菊花链模式将多块显示屏连接后可以组成更大的分辨率显示屏幕,任意组合分辨率。可用于简单仪表显…

义乌再次位列第一档!2022年跨境电商综试区评估结果揭晓!

义乌跨境电商综试区捷报频传,在商务部公布的“2022年跨境电子商务综合试验区评估”结果中,中国(义乌)跨境电子商务综合试验区(以下简称:“跨境综试区”)评估结果为成效明显,综合排名…

Qt扫盲-QImage 理论总结

QImage 理论总结 一、概述二、读写图像文件三、图像信息四、像素操作1. 32位2. 8位 五、图像格式六、图像转换 一、概述 QImage类提供了一个独立于硬件的图像表示,允许直接访问像素数据,并且可以用作绘画设备。Qt提供了四个类来处理图像数据&#xff1a…

volatile-可见性案例详解

6.3 volatile特性 6.3.1 保证可见性 保证不同线程对某个变量完成操作后结果及时可见,即该共享变量一旦改变所有线程立即可见 不加volatile,没有可见性,程序无法停止 加了volatile,保证可见性,程序可以停止 public…

爱创科技携手洽洽食品,探索渠道数字化最优解!

坚果的下半场,是从吃到喝。 消费升级大潮下,健康养生理念逐渐深入人心。以“天然健康”为核心的食品新消费潮流正加速形成,一个个打着“美味与营养”黄金设定的品类风口正被不断创建,其中人气有增无减的当属植物基饮品。据相关报告…

数据结构详细笔记——树

文章目录 树的定义和基本术语结点、树的属性描述有序树与无序树树与森林 树的常考性质树的存储结构双亲表示法(顺序存储)孩子表示法(顺序链式存储)孩子兄弟表示法(链式存储) 树和森林的遍历树的遍历森林的遍…