80%测试员被骗,关于jmeter 的一个弥天大谎!

jmeter是目前大家都喜欢用的一款性能测试工具,因为它小巧、简单易上手,所以很多人都愿意用它来做接口测试或者性能测试,因此,在目前企业中,使用各个jmeter的版本都有,其中以jmeter3.x、4.x的应该居多。

但是,不管大家使用jmeter的什么版本,都可能被jmeter的一个谎言给欺骗了,直到最近jmeter5.2.1版本发布,这个谎言才逐渐浮出水面。

应该大家在做性能测试的时候,都喜欢设置N个线程数,然后循环M次,以此来模拟真实同时N多个用户使用被测系统。对吧!

现实中被测系统,在N多个用户同时使用时,这N个用户应该都是相互独立,互不关联的,对吧!

我们用jmeter设置N个线程数,循环M次,目的就是想模拟这样N个互不关联的用户使用被测系统。但是,jmeter却在这个时候,给我们撒了一个弥天大谎。

大家先看这张图,我在jmeter5.1.1版本创建一个普通的线程组,设置线程数2、循环次数2,线程组下用一个“csv数据文件设置”获取登录的账户信息,一个普通的http取样器做登录,一个普通的http取样器做登录后获取用户列表。

为了找出这个‘谎言’,我在登录接口下面加个后置正则表达式提取器,提取登录成功后的session值,然后把session值放在下一个取样器的‘名称’中打印出来。

分析

如果完全等价于真实场景,那应该有4个用户登录,生成4个session,用4个不同的session去获取用户列表信息,对吧!

好,现在我们用这个脚本run一下,看下结果:

图片

看下结果:

图片

 

看到一个奇怪的事情没有?4个手机号都不相同,但是session只有2个。线程1的两次迭代使用了相同的session,线程2的两次迭代也使用了相同的session。

说明同一线程无论迭代多少次,都是使用相同的session,也就是线程第一次登录的用户生成的session一直用于后面的迭代。、

为了验证,我们的这个总结,我们修改线程数为3,迭代次数为永远,持续循环10秒钟,再看下run的结果。

图片

图片

看到了吗?不管迭代多少次,同一个线程下,所有用户都是使用相同的session。

原来在我们使用jmeter做性能测试时,使用多线程循环迭代多次,并不是我们理想中的真实场景。jmeter欺骗了我们。

那,这种情况,只是出现在jmeter5.1.1版本中吗?我们把相同的脚本,拷贝到jmeter3.2版本和jmeter4.0版本中,我们再来看看。

 

图片

图片

看到了吗?原来这是jmeter的家族遗传史啊,都是这样的情况。没有深入研究,你是不是一直都认为jmeter多用户迭代做性能测试,就是你理想中的模拟用户真实使用场景的呢?

这个有没有什么办法,做到你理想中的模拟用户真实的使用场景呢?

告诉大家一个好消息,在jmeter最新的5.2.1版本中,已经发生变化啦!走过、路过、不要错过,都过来看看啦!别被一个‘谎言’迷惑终身啦!

在jmeter5.2版本发布的时候,已经在 线程组 的设置中,悄悄的加上了一个复选配置项:Same user on each iteration 默认为勾选,同时,在cookie管理器、缓存管理器、授权管理器 的配置选项中,也都增加了一个 ‘Use Thread Group configuration to control clearing’ 的复选配置项。

图片

图片

加了这个,怎么用呢?

首先,我们的脚本和前面的脚本做法完全一样。

只是,要注意:

1、在线程组配置时,要去掉默认的Same user on each iteration 的勾选;

2、在cookie管理器配置中,要勾选 Use Thread Group configuration to control cookie clearing

做好了这些,我们来run一下看下:

图片

图片

这样配置后,在发起获取用户列表信息时session都是使用新登陆的用户生成的session,每次都不一样。这样,也就更真实的模拟了大量用户访问被测系统的实际情况。

好了,这个技能,你get到了吗?

 感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

23. 深度学习 - 多维向量自动求导

Hi, 你好。我是茶桁。 前面几节课中,我们从最初的理解神经网络,到讲解函数,多层神经网络,拓朴排序以及自动求导。 可以说,最难的部分已经过去了,这节课到了我们来收尾的阶段,没错,生…

基于springboot实现班级综合测评管理系统项目【项目源码+论文说明】

基于springboot实现班级综合测评管理系统演示 摘要 随着互联网技术的高速发展,人们生活的各方面都受到互联网技术的影响。现在人们可以通过互联网技术就能实现不出家门就可以通过网络进行系统管理,交易等,而且过程简单、快捷。同样的&#x…

【Django-DRF】多年md笔记第5篇:Django-DRF的Request、Response和视图详解

本文从分析现在流行的前后端分离Web应用模式说起,然后介绍如何设计REST API,通过使用Django来实现一个REST API为例,明确后端开发REST API要做的最核心工作,然后介绍Django REST framework能帮助我们简化开发REST API的工作。 Dj…

ARCGIS网络分析

一、实验名称: 网络分析 二、实验目的: 通过本实验练习,掌握空间数据网络分析的基本方法。 三、实验内容和要求: 实验内容: 利用ARCGIS软件网络分析工具及相关空间数据,查找距离“名人故居”、“博物…

Python-大数据分析之常用库

Python-大数据分析之常用库 1. 数据采集与第三方数据接入 1-1. Beautiful Soup ​ Beautiful Soup 是一个用于解析HTML和XML文档的库,非常适用于网页爬虫和数据抓取。可以提取所需信息,无需手动分析网页源代码,简化了从网页中提取数据的过…

扒一扒Bean注入到Spring的那些姿势

这篇文章我准备来扒一扒Bean注入到Spring的那些姿势。 其实关于Bean注入Spring容器的方式网上也有很多相关文章,但是很多文章可能会存在以下常见的问题 注入方式总结的不全 没有分析可以使用这些注入方式背后的原因 没有这些注入方式在源码中的应用示例 ... 所…

Mysql 递归查询子类Id的所有父类Id

文章目录 问题描述先看结果表结构展示实现递归查询集合查询结果修复数据 问题描述 最近开发过程中遇到一个问题,每次添加代理关系都要去递归查询一下它在不在这个代理关系树上.很麻烦也很浪费资源.想着把代理关系的父类全部存起来 先看结果 表结构展示 表名(t_agent_user_rela…

Linux安装Mysql详细教程(两种安装方法)

Linux之Mysql安装配置 第一种:Linux离线安装Mysql(提前手动下载好tar.gz包)第二种:通过yum安装配置Mysql(服务器有网络) 第一种:tar.gz包安装 1、 查看是否已经安装 Mysql rpm -qa | grep m…

这13个不经意却很不卫生的行为,很多人都没意识到

这13个不经意却很不卫生的行为,很多人都没意识到 北京崇文中方中医医院名医馆 2023-11-11 17:01 发表于北京 我们在生活中不经意间做出的一些动作,或者日常养成的一些行为习惯,正在悄悄伤害着我们的身体健康。可惜的是很多人都不知道这一点…

如何去阅读源码,我总结了18条心法

那么到底该如何去阅读源码呢?这里我总结了18条心法,助你修炼神功 学好JDK 身为一个Javaer,不论要不要阅读开源项目源码,都要学好JDK相关的技术。 所有的Java类开源项目,本质上其实就是利用JDK已有的类库和关键字实现…

VUE excel表格导出

js代码 //下载模板 downloadExl() { // 标题 const tHeader [‘xxx’,xxx,xx名称,电枪xx,协议xx,snxx]; // key const filterVal [agentName, stationName, equName, channelNumber, manufacturer, sn, ]; // 值 const datas [ { agentName: 你好, stationName: 我们, e…

【实战教程】改进YOLOv5与Seg网络结合:实时车道线精准识别系统(含源码及部署步骤)

1.研究的背景 随着自动驾驶技术的不断发展,车道线的实时分割成为了自动驾驶系统中的重要任务之一。车道线的准确分割可以为自动驾驶系统提供重要的环境感知信息,帮助车辆进行准确的路径规划和决策。因此,开发一种高效准确的车道线实时分割系…

Threejs_11 补间动画的实现

啥是补间动画呢?其实就是我们在threejs中移动一个物体的时候,不让他是瞬时移动,让他跟css动画的transition一样,有个过度效果,就是补间动画。补间动画如何设置呢? 补间动画实现 1.引入补间动画库 在我们…

爬取春秋航空航班信息

一、使用fiddler爬取小程序春秋航空航班信息 使用Fiddler爬取春秋航空微信小程序(手机上由于网络问题,无法进入,使用电脑版) 搜索航班信息 搜索记录 使用Fiddler查找url(没有得到有效url) 继续查找,发现航班信息列…

前端实现表格生成序号001、002、003自增

我们最终想要实现的效果如图&#xff0c;从后端获取数据之后&#xff0c;不使用data中的id&#xff0c;而是使用自己生成的按照顺序自增的序号id。 script <template><el-table :data"sticker" border style"width: 100%" id"stickerList&q…

uniapp 富文本以及移动端富文本的展示问题

富文本展示有几种方式: 1.<view v-html"content"></view> 2. uniapp自带组件 rich-text rich-text | uni-app官网 <rich-text :nodes"content"></rich-text> 3.uView组件 u-parse Parse 富文本解析器 | uView 2.0 - 全面兼…

前端js调取摄像头并实现拍照功能

前言 最近接到的一个需求十分有意思&#xff0c;设计整体实现了前端仿 微信扫一扫 的功能。整理了一下思路&#xff0c;做一个分享。 tips: 如果想要实现完整扫一扫的功能&#xff0c;你需要掌握一些前置知识&#xff0c;这次我们先讲如何实现拍照并且保存的功能。 一. windo…

HSV映射到圆锥坐标系

def bgr2hsvcone(img):arr_hsv cv2.cvtColor(img, cv2.COLOR_BGR2HSV)h arr_hsv[..., 0] / 180. * 2s arr_hsv[..., 1] / 255.v arr_hsv[..., 2] / 255.x np.cos(h * np.pi) * s * vy np.sin(h * np.pi) * s * vreturn np.stack((x, y, v), axis-1)

Java-接口

接口 接口 接口就是公共的行为规范,只要实现时符合标准就可以通用. 接口可以看成是: 多个类的公共规范,是一种引用数据类型. 使用关键字interface实现接口. 接口是不能被实例化的. 接口中的成员变量默认是 public static final 接口中只能有抽象方法,当中的方法不写,也是pu…

bclinux aarch64 ceph 14.2.10 云主机 4节点 fio

ceph -s 由于是基于底层分布式存储的云主机&#xff0c;数据仅供参考 本地云盘性能 direct1 1M读取 IOPS134, BW134MiB/s [rootceph-client rbd]# cd / [rootceph-client /]# fio -filenamefio.bin -direct1 -iodepth 128 -thread -rwread -ioenginelibaio -bs1M -size10G -n…