【Jmeter】按比例分配Api压测

先看

【Jmeter】基础介绍-详细

【Jmeter】Request1输出作为Request2输入-后置处理器

继续聊提出的第二个问题,即

  2.需要按比例分配API请求并发,以模拟真实的API压力场景

做压测的时候,一般的需求都是多个API同时压,不然也看不出真正的tps是多少啊。

比如虽然接口a的需求并发不高,500个用户才请求一次,但是特别耗性能,导致其他接口tps下降严重,所以压测的时候可以将比例调的很小,但是不能忽略它,只测并发请求高的接口

说会主题,如何按比例分配压测并发量呢?使用Jmeter可以有两种实现方式

先说第一种,通过线程组的方式控制:

线程组1配置:

 线程组2配置:

 区别就是线程数不一样,当然用循环次数也可以控制,区别可以看【Jmeter】基础介绍-详细。

Request请求:

 结果:

 这里哪个请求在前完全随机,两个线程中互不干扰。

这种方式的好处就是完全并行,互不干扰,缺点就是基本没有使用场景,一般情况下,API都是有权限认证接口的,后面的接口需要依赖前面接口的输出(实现方式可以看【Jmeter】Request1输出作为Request2输入-后置处理器),这种完全隔离的方式显然无法满足需求,或者你需要自己写代码提前获取登录信息,不使用压测过程中登录返回的认证信息。

我们继续介绍第二种方式,其实就是按【Jmeter】Request1输出作为Request2输入-后置处理器中创建的线程组一样,只使用一个线程组,然后通过循环控制器来控制某个Api所占比例:

新建循环控制器:

 调整参数达到按比例分配Api压力的目的:

 执行效果:

 如上图所示,执行了一个Request1和两个Request2,而且是按顺序执行的,即这种方式可以满足【Jmeter】Request1输出作为Request2输入-后置处理器需求的同时使用。不过有两点需要注意:

  1. 这种方式按顺序执行时,变量(例如身份信息token)是会被覆盖的,即无法完全模拟多用户登录及身份信息的场景。
  2. 这种配置方式会导致api并发分配不均,即在时间段1全部请求都是Request1,时间段2全部请求都是Request2,虽然总量是按比例的,但是并不符合我们的需求。

以上两个问题,在我的测试场景中1没有影响,即用户1、2、3、4、5那个来请求Api对压测来说是不关心的,性能完全一样。这里的登录只是为了压测登录接口,同时生成一个token给下面的接口使用。问题2影响比较大,可以通过【Jmeter】基础介绍-详细中提到的Ramp-up时间参数来控制,首先按比例配置好循环控制器后,将线程数和循环次数配置为1,Ramp-up配置为0,即立刻启动,然后使用压测机跑一下用于估算一次压测流程的时间。得到这个时间后,就是我们在实际压测中需要填写到Ramp-up中的参数,比如一次完整的压测流程需要2s,我现在需要压测执行1000个线程,循环100次,即一共10w次请求,将Ramp-up时间设置为2s,即1000个线程将在2s内逐步启动,达到所有线程的启动时间覆盖第一个线程一次循环的整个时间段,来达到真实模拟多种请求并发执行的过程,解决以上提到的第二个问题。

 

本文转载于网络 如有侵权请联系删除

相关文章

  • 从青铜到王者,Maven全了解

    Maven是每个Java程序都会遇到的包管理工具,今天整理一下Maven的相关知识,从青铜到王者,一文全了解 1、maven是什么,为什么存在?项目结构是什么样子,怎么定位jar官方网站说了好多,整的多复杂一样,简单说:maven是一个管理包的工具。Maven存在的必要性是什么呐?想想开源的jar包如此之多,版本又如此之多,在没有Maven之前,我们管理jar包全部都是下载之后创建一个lib的文件夹,然后项目进行引用,在其他的项目成员需要修改一个jar的时候需要到处拷贝,在部署的时候也很麻烦,问题存在就要解决,因此出现了Maven,统一管理,统一的仓库,只需要配置是要哪个版本的包,直接下载就够了,不用拷贝,是不是很方便。现在大的问题解决了,怎么定位一个jar包呐?2、Idea的操作1.新建maven项目 File->新建->project勾选从原型(模板)创建,选择maven-archetype-qiuckstart填入项目的名字,和groupId(公司域名反过来,如com.alibaba)选择本地仓库的位置,和自定义的setting配置 一路finish,然后等待idea

  • HLA Dictionary-Allel和抗原之间的对应关系

    HLADictionary,中文名叫做HLA字典,记录了HLA-A,-B,-C,-DRB1/3/4/5和-DQB1等HLA基因的不同Allel对应的血清学分析鉴定的抗原。最新版本于2008年发布,共包含了832个HLAAllel对应的血清学抗原信息,其中,I型HLA基因有685条记录,II型HLA基因有147条记录。该文件以PDF的形式保存,链接如下https://onlinelibrary.wiley.com/doi/pdf/10.1111/j.1399-0039.2008.01183.x在该文件中,除了专家团队定义的抗原名字外,还包括了世界卫生组织WHO和国际细胞交换组织UCLA等其他机构定义的名称,示意如下在IMGT/HLA数据库中,提供了检索HLADictionary的功能,网址如下https://www.ebi.ac.uk/ipd/imgt/hla/dictionary.html用法也非常简单,在输入框中输入需要检索的记录,然后点击右边的按钮检索即可支持三种格式的数据HLAAllelExpertAssignedTypeWHOAssignedType 以HLAAllel为例,

  • Debug | Genus 跟Innvous 中cell 的命名规则

    在数字实现过程中,如果把DFT合到综合这一步,那只有综合跟布局布线是优化过程,其他步骤都是『验证』过程。所以只有综合跟布局布线会做逻辑更改,不论是综合还是布局布线都可以细分成多个步骤,在每一个细分步骤中都有逻辑的增减,对于每一步加入的cell都会有对应的命名规则,这些命名规则对于PPAdebug很有用,可以根据这些命名规则得知相应的cell是在哪一步加入的,依图索骥就可以到对应的步骤里去看,是否可以通过调整变量设置来约束工具行为以得到想要的结果。 对于Genus而言,命名规则为,可从文末参考文献中可找到support.cadence.com上对应的文章。对于Innovus而言,命名规则为,可从文末参考文献中可找到support.cadence.com上对应的文章。参考文献:https://support.cadence.com/apex/ArticleAttachmentPortal?id=a1Od0000000uuNrEAI&pageName=ArticleContent https://support.cadence.com/apex/ArticleAttachmentPo

  • 我是如何面试QA的。

    iTesting,爱测试,爱分享 最近遇见一个好玩的bug,现象是页面刷新白屏,RootCause是Header里放的cookie太多了,大小超出了4kb的限制.解决方法很简单,拆出一部分放到LocalStorage.问题解决了,但是个人觉得很有意思,平常司空见惯的,觉得"假大空不接地气"的概念,其实都真真切切的在项目中体现了,只不过我们熟生轻视,看不见而已.遂记录本文. 面试的时候经常喜欢问一个问题,HTTP协议是有状态的还是无状态的?很多同学都不知道,或者简单背一个答案,曰无状态.再问,那么HTTP协议如何保持状态?只有一小部分同学能答出来要用cookie和session.再问,有了cookie为什么还要session?更少一部分人能答出来安全。再问,不要cookie行不行?能答出URL重写的已经不错了。对于高级的测试,再继续深入,session保存在服务器内存中,随着用户的增多,服务器撑不住了怎么办?假设我使用了集群服务怎么办?这个时候聪明点的就会答sesionsticky,或者使用Memcached集中所有sessionid了。但这也带来另外一个问题,session服务器挂了怎

  • 美多商城前三天遗忘知识点回顾

    每日分享Whereveryougo,gowithallyourheart.既来之,则安之。(字面意思是无论你去哪里,请全心全意的去。)小闫语录:既来之,则安之。看似是一种无奈,一种妥协,其实却是智慧之举。我们既然已经来到这个地方,既然已经做了这份工作,那么就全心全意的去对待。我们要保持着积极向上的态度,即使枯燥的工作,我们任然可以学习收获很多。你要相信,没有任何一件事是白做的,你所学的东西,总会在以后的某一刻使用到。少一些功利心,少一些消极态度,会发现生活如此美好。美多商城前三天遗忘知识点回顾项目的远程仓库地址https://github.com/EthanYan6/E-commerce-sites.git复制在readme中有目录结构的解释:E-commerce-sites ├──Ethanyan_mall │  ├──celery_tasks │  ├──docs(用于存放一些说明文档资料) │  ├──Ethanyan_mall │  │  ├──apps(存放Django的应用) │  │  ├──__init__.py │  │  ├──libs(存放第三方的库文件) │  

  • ubuntu 14.04安装flash无效的解决方法

    原文出处:http://forum.ubuntu.org.cn/viewtopic.php?t=466528 本人非常喜欢Opera和Chromium这两款浏览器但在ubuntu14.04下安装完后发现flash无法播放没有安装flash插件因为AdobeFlash不再支持linuxGoogle便开发了PepperFlashPlayer来替代原来的AdobeFlash 下面介绍PepperFlashPlayer在安装方法第一步:安装,在终端里输入下面的命令sudoapt-getinstallpepperflashplugin-nonfree复制第二步:更新,在终端里输入下面的命令代码:sudoupdate-pepperflashplugin-nonfree--install复制第三步(非必选项):查看安装的PepperFlashPlayer版本,在终端里输入下面的命令sudoupdate-pepperflashplugin-nonfree--status复制如果Flash不运行,你需要做的有:关闭opera和Chromium浏览器,然后重新打开这两个浏览器试试如果还是不运行,重启电脑如

  • 网站接入QQ登录注意事项

    本文主要跟大家分享下我的个人博客 陈新的个人博客站点在接入QQ登录的过程中所遇到的一些问题,在这里分享给大家,方便准备想接入QQ登录功能的或者接入过程中正遇到一些问题的小伙伴快速解决问题,避免踩我已经踩过的坑。 一、跳转到QQ登录授权页面的地址 跳转到QQ登录授权页面的地址应该用:https://graph.qq.com/oauth2.0/authorize,而不是用https://graph.qq.com/oauth2.0/show这个前缀,后者这个是PC端的QQ授权页面,如果你的网站跳转到的是后面这个地址,将会导致手机端使用的QQ登录授权页面也是PC端的,这样手机端就无法使用QQ一键登录功能了,正确的应该使用前者这个地址,腾讯会自动判断跳转到PC端还是手机端的QQ登录授权页面。 手机端的QQ登录界面应该类似于如下:   二、QQ授权页面传参 不要往QQ授权页面的地址中传入参数display=pc,这个参数告诉QQ说我当前正在PC端进行QQ一件登录,因此也会造成和上述一样的问题。 以上就是本人在对接QQ登录过程中遇到的一些问题,下面附上本人的个人站中用到的QQ登

  • git 回退单个文件

    1.进入到文件所在文件目录,或者能找到文件的路径 $gitlogMainActivity.java 复制   2.回退到指定的版本 $gitreseta4e215234aa4927c85693dca7b68e9976948a35eMainActivity.java 复制   3.提交到本地参考,注意不需要gitadd。 $gitcommit-m"revertoldfilebecauseyjlcommmithaveabug" 复制    4.更新到工作目录 $gitcheckoutMainActivity.java 复制    这样就把指定的文件回退到指定的版本了。

  • python常见数学操作

    【python】计算点到直线的距离 https://blog.csdn.net/xijuezhu8128/article/details/122938215 python根据点计算直线方程 https://blog.csdn.net/asiya/article/details/117751424 齐次坐标计算交点一直线方程   https://stackoverflow.com/questions/6315486/how-to-find-intersection-point-between-lines-matlab line1=GetLineFromTwoImagePoints(p1,p2); line2=GetLineFromTwoImagePoints(q1,q2); intersection=GetPointFromTwoImageLines(line1,line2); functionline=GetLineFromTwoImagePoints(one,two) line=cross([one1],[two1]); end functionpoint=GetPoi

  • 【已解决】CentOS7使用yum安装Docker显示错误:cannot find a valid baseurl for repo: base/7/x86_64

    不得不说,Docker要求CentOS系统的内核版本高于3.10,这就让有些人开始头疼了,而要查看具体的版本可以用以下命令 uname-r 复制 当然,CentOS6.8版本也能安装Docker,但是具体命令操作与CentOS7还是有些差别,具体的安装过程可以参考docker的文档,这里就不概述了,最开始我之前学习Linux的时候一直到现在CentOS版本是6.1,显然安装不了Docker,因为CentOS6.8以下版本普遍系统内核版本为2.6.32-XXX版本,统称为2.6版本得了 总之,CentOS安装Docker要求如下: 1、Docker运行在CentOS7上,要求系统为64位、系统内核版本为3.10以上。 2、Docker运行在CentOS-6.5以上,要求系统为64位、系统内核版本为2.6.32-431或者更高版本。 关于Centos7镜像下载 如果你还在为使用centos6,为centos7镜像下载而烦扰?是的,网速贼慢,这里提供一个下载centos7镜像阿里云站点:http://mirrors.aliyun.com/centos/7/isos/x86_64/ 各个

  • 制作立体图像(上):红蓝眼镜原理

    立体眼镜分为色差式、偏光式等几种其中色差式还可以再分为红-蓝、红-绿、红-青等,是最简单,但也是效果最差的一种这里仅介绍常见的红蓝立体图像这种方式仅需要一块红蓝眼镜,淘宝上买个很便宜的就可以了,大概10块钱左右常见的红蓝眼镜也可以叫红青眼镜,即左眼红色、右眼青色(绿色和蓝色的组合)实现办法是让左眼仅看到图片中的红色部分,过滤掉绿色和蓝色右眼仅看到图片中的青色(绿色+蓝色)部分,过滤掉红色立体图片是通过将左眼看到的红色图像和右眼看到绿色、蓝色合成到一副图片的结果实际上红色在通过红色镜片时会显示为对应亮度的白色,相当于仅看到一幅灰度图绿色和蓝色通过蓝色镜片时可以显示为对应的绿色和蓝色因为工艺问题,绿色和青色通过红色眼镜因为过滤不全,并不会完全显示为黑色同样,红色透过蓝色眼镜也不会完全显示为黑色,从而影响成像质量另因为左眼、右眼都没有看到完整的色彩,所以这种方式实现的立体效果会丧失原图像中的部分信息不过我们的大脑仍然会在这些残缺的信息欺骗下合成出一幅立体效果的图像效果图:   (a)为一个白色背景下的黑色边框立方体合成效果图        

  • [转] C++ explicit关键字详解

    本文转自tiankong19999 首先,C++中的explicit关键字只能用于修饰只有一个参数的类构造函数,它的作用是表明该构造函数是显示的,而非隐式的,跟它相对应的另一个关键字是implicit,意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式). 那么显示声明的构造函数和隐式声明的有什么区别呢?我们来看下面的例子: 1classCxString//没有使用explicit关键字的类声明,即默认为隐式声明 2{ 3public: 4char*_pstr; 5int_size; 6CxString(intsize) 7{ 8_size=size;//string的预设大小 9_pstr=malloc(size+1);//分配string的内存 10memset(_pstr,0,size+1); 11} 12CxString(constchar*p) 13{ 14intsize=strlen(p); 15_pstr=malloc(size+1);//分配string的内存 16strcpy(_pstr,p);//复制字符串 17_size=strlen(_pstr)

  • DatagramSocket类 会发生线程阻塞的方法

      遇到这个问题,还告诉别人错了,这里来Mark一下。   receive()方法会使调用线程阻塞。   Java使用DatagramSocket代表UDP协议的Socket,DatagramSocket本身只是码头,不维护状态,不能产生IO流,它的唯一作用就是接收和发送数据报,Java使用DatagramPacket来代表数据报,DatagramSocket接收和发送的数据都是通过DatagramPacket对象完成的。   在接收数据前,通常需要生成一个DatagramPacket对象,给出数据字节数组及其长度。然后调用DatagramSocket的receive()方法等待数据报的到来,该方法会一直阻塞调用该方法的线程,直到收到一个数据报为止。 示例代码: //创建一个接收数据的DatagramPacket对象 DatagramPacketdata_packet=newDatagramPacket(buf,1024); //接收数据报 socket.receive(data_packet);复制   本博客所有内容为原创,转载需征求作者同意。

  • ZK分布式锁原理

    单体应用锁 在单体的应用开发场景中,涉及并发同步的时候,大家往往采用synchronized或者Lock的方式来解决多线程间的同步问题。但在分布式集群工作的开发场景中,那么就需要一种更加高级的锁机制,来处理种跨JVM进程之间的数据同步问题,这就是分布式锁。 公平锁和可重入锁的原理 最经典的分布式锁是可重入的公平锁。什么是可重入的公平锁呢?直接讲解的概念和原理,会比较抽象难懂,还是从具体的实例入手吧!这里用一个简单的故事来类比,估计就简单多了。 故事发生在一个没有自来水的古代,在一个村子有一口井,水质非常的好,村民们都抢着取井里的水。井就那么一口,村里的人很多,村民为争抢取水打架斗殴,甚至头破血流。 问题总是要解决,于是村长绞尽脑汁,最终想出了一个凭号取水的方案。井边安排一个看井人,维护取水的秩序。取水秩序很简单: (1)取水之前,先取号; (2)号排在前面的,就可以先取水; (3)先到的排在前面,那些后到的,一个一个挨着,在井边排成一队。 取水示意图,如图10-3所示。 图10-3排队取水示意图 这种排队取水模型,就是一种锁的模型。排在最前面的号,拥有取水权,就是一种典型的独占锁。另

  • Java_正则表达式和文本操作

    正则表达式语法 普通字符 字母、数字、汉字、下划线、以及没有特殊定义的标点符号,都是“普通字符”。表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的一个字符。 简单的转义字符 \n 代表换页符 \t 制表符 \^,\$,\\(,\\),\{,\},\?,\+,\*,\\[,\\],\| 匹配这些字符本身 标准字符集: 能够与‘多种字符’匹配的表达式 注意区分大小写,大写是相反的意思 \d 任意一个数字,0-9中的任意一个 \w 任意一个字母或数字或下划线,也就是A~Z,a~z,0~9,_中任意一个 \s 包括空格、制表符、换行符等空白字符的其中任意一个 . 小数点可以匹配任意一个字符,如果要匹配包括“\n”在内的所有字符,一般用[\s\S] 自定义字符集合 []方括号匹配方式,能够匹配方括号中任意一个字符 ab5@ 匹配“a”或“b”或“5”或“@” ^abc 匹配“a”,“b”,“c”之外的任意一个字符 [f-k] 匹配“f”~“k”之间的任意一个字母 [^A-F0~3]

  • STM32 CUBEIDE 串口的使用与printf重定向

    1.配置IOC文件    保存后生成代码,没有使用DMA模式   2.在main.c或者.h中添加以下代码进行重定向 #ifdef__GNUC__ /*WithGCC,smallprintf(optionLDLinker->Libraries->Smallprintf setto'Yes')calls__io_putchar()*/ #definePUTCHAR_PROTOTYPEint__io_putchar(intch) #else #definePUTCHAR_PROTOTYPEintfputc(intch,FILE*f) #endif/*__GNUC__*/ /** *@briefRetargetstheClibraryprintffunctiontotheUSART. *@paramNone *@retvalNone */ PUTCHAR_PROTOTYPE { /*Placeyourimplementationoffputchere*/ /*e.g.writeacharactertotheUSART3andLoopuntilt

  • webpack5 和 webpack4 的区别有哪些

    1、TreeShaking(强大) 如果我们的项目中引入了lodash包,但是我只有了其中的一个方法。其他没有用到的方法是不是冗余的?此时tree-shaking就可以把没有用的那些东西剔除掉,来大大减少最终的bundle体积。 usedExports:true,标记没有用的叶子 minimize:true,摇掉那些没有用的叶子 //webpack.config.js中 module.exports={ optimization:{ usedExports:true,//只导出被使用的模块 minimize:true//启动压缩 } } 复制 现在可以处理commonjs的treeshaking 2.压缩代码 内部本身就自带js压缩功能,他内置了terser-webpack-plugin插件,我们不用再下载安装。而且在mode=“production”的时候会自动开启js压缩功能。 //webpack.config.js中 module.exports={ optimization:{ usedExports:true,//只导出被使用的模块 minimize

  • bootstrap框架日期时间之年月选择及汉化

    ==》上次介绍了bootstrap框架日期时间开始日期和结束日期选择http://www.cnblogs.com/wjqblogs/p/4043198.html 今天又做了个只选择年月的日期选择,而且对其进行汉化,如下: 引入js 1jQuery.min.js 2bootstrap.min.js 3bootstrap-datetimepicker.min.js 4bootstrap-datetimepicker.zh-CN.js复制   html 1<inputclass="form-control"name="sdate"value="${sdate}"type="text"style="width:100px"id="sdate"data-date-format="yyyy-mm"readonly>复制   jQuery 1$('#sdate').datetimepicker({ 2format:'yyyy.mm', 3weekStart:1, 4todayBtn:0, 5autoclose:1, 6startView:3, 7mi

  • Vue3安装axios

    Vscode中输入下面命令安装axios至运行时环境    之后在需要访问接口的页面中导入axios    然后写调用函数  

  • iOS ReactiveCocoa(RAC)学习详解

    概述:   ReactiveCocoa(简称为RAC),是由Github开源的一个应用于iOS和OS开发的一个框架,有时间,自己也了解学习了一下这个框架的一些基本的应用,其实你要学的话网上是有很多很多的博客给你去仔细的学习这个框架,我也把自己看到的觉得很不错的博客整理出来,方便大家以后学习也方便自己巩固这些知识! ReactiveCocoa是做什么的?   引述自己学习的《最快让你上手ReactiveCocoa之基础篇》这篇博客里面的概述,说说 ReactiveCocoa的作用; 在我们iOS开发过程中,当某些事件响应的时候,需要处理某些业务逻辑,这些事件都用不同的方式来处理。 比如按钮的点击使用action,ScrollView滚动使用delegate,属性值改变使用KVO等系统提供的方式。 其实这些事件,都可以通过RAC处理 ReactiveCocoa为事件提供了很多处理方法,而且利用RAC处理事件很方便,可以把要处理的事情,和监听的事情的代码放在一起,这样非常方便我们管理,就不需要跳到对应的方法里。非常符合我们开发中高聚合,低耦

  • 【工具类】Api接口封装

    返回结果编码枚举 publicenumControllerResponseEnum{ /** *调用成功 */ SUCCESS(1,"Api调用成功"), /** *调用失败 */ FAIL(-1,"Api调用失败"), //通用异常 SERVER_EXCEPTION(500100,"服务端异常"), PARAMETER_ISNULL(500101,"输入参数为空"), //业务异常 USER_NOT_EXSIST(500102,"用户不存在"), ONLINE_USER_OVER(500103,"在线用户数超出允许登录的最大用户限制。"), SESSION_NOT_EXSIST(500104,"不存在离线session数据"), NOT_FIND_DATA(500105,"查找不到对应数据"); /** *返回编码 */ privatefinalIntegercode; /** *编码对应的消息 */ privatefinalStringmsg; ControllerResponseEnum(Integercode,Stringmsg){ this.code=code;

相关推荐

推荐阅读