在JMeter测试计划中如何控制业务比例

性能测试混合场景中,我们需要组合多个业务操作到场景中来。
比如有一个论坛的业务分布如下:
开新帖与回复帖子的比例为2:3,
那么我们在JMeter测试计划中如何控制其比例呢?

下面我们介绍两种方式:

1.多线程组方式

2.逻辑控制器控制

多线程组方式:

我们知道JMeter是用线程组来模拟虚拟用户的,JMeter还可以支持一个计划中多个线程组。

利用这个特性我们可以把开新帖业务放在一个线程组中,回帖业务放在另外一个线程组中。

为了制造出业务量的比例关系,我们通过控制线程数来达到效果。如下图:

ReplayTopic为回帖线程组,添加90个线程;
SendTopic为开新帖线程组,添加60个线程,刚好是3:2

当然,这只能是近似的,如果这两个事务的响应时间不一样,最终完成的业务数比例也会不一样。

当前线程数是在假定两个业务的响应时间一样的情况下,所以这完全是理想状况。

可以看出,这种方式控制并不完美。

下面我们用第2种方式:

控制器控制

 

下图是一个IF控制器,IF控制器可以使用表达式来做为条件,这样我们事以获取迭代次数来决定

是回帖还是开帖,比如一共3次迭代,第1次与第3次迭代时开新帖,1,2,3次迭代都会进行回帖

接下来我们就要获取迭代次数,JMeter函数助手提供了一个__counter函数,可以用来获取当前的
迭代次数。

好,我们思路有了,迭代次数也能获取到,那如何保持3:2的比例呢?这就是一个数学问题了。

不卖观子,直接上代码:
${__counter(true,)}%2==1||${__counter(true,)}%3==0
上面__counter(true,)是获取当前迭代次数,%是取余,也就是除2余1与3整除时执行开新帖。

以9次迭代为例,回帖9次,1,3,5,6,7,9
次迭代时都会开新帖,回刚好是6次

9:6=3:2

基本上保护了3:2的比例。

转载至:http://mp.weixin.qq.com/s?__biz=MjM5Mjg0MzMzMw==&mid=210023366&idx=2&sn=a6868ea94bb2c5794b99cc455ad5ee17&scene=1&srcid=09137Euoiki9ZPFcXyB6zzNY#rd

时间: 2024-10-13 12:52:25

在JMeter测试计划中如何控制业务比例的相关文章

jmeter通过if控制器控制业务比例

以发帖,看帖,回帖三个事物为例,这里就10个用户跑10次,进行测试下: 可以看到看帖,回帖,发帖比例是5:3:2,先来说说怎么做到的,就是通过if控制器,分别来看下几个控制器的内容, 看帖(if控制器):勾选“interpret condition as variable expression”,这时expression中不能直接填写条件表达式,需要借助函数将条件表达式计算为true/false,可以借助的函数有_jexl3和_groovy,比如${__groovy(${__counter(tr

JMeter性能测试中控制业务比例

性能测试混合场景中,我们需要组合多个业务操作到场景中来.比如有一个论坛的业务分布如下:发布新帖与回复帖子的比例为2:3,那么我们在JMeter测试计划中如何控制其比例呢? 可以通过以下两种方式解决:多线程组方式 逻辑控制器控制 多线程组方式: JMeter是用线程组来模拟虚拟用户的,JMeter支持一个计划中多个线程组.利用这个特性我们可以把发布新帖业务放在一个线程组中,回帖业务放在另外一个线程组中.通过控制线程数来达到需求的业务量的比例关系. 回帖线程组,添加90个线程:发布新帖线程组,添加6

jmeter --- 测试计划里的元件

1.线程组 线程组元件是任何一个测试计划的开始点.在一个测试计划中的所有元件都必须在某个线程组下.顾名思义,线程组元件控制JMeter执行你的测试计划时候使用的线程数量.对线程组的控制允许你: 设置线程数 设置ramp-up period 设置测试要执行的次数 每个线程将会完全独立的运行测试计划,互不干扰.多个线程用于模仿对服务器的并发访问. ramp-up period指示JMeter用于达到全部选择的线程的时间.如果选择了10个线程,并且ramp-up period是100秒,那么JMete

面试常问问题:银行网上支付项目中怎么控制多线程高并发访问?

面试常问问题:银行网上支付项目中怎么控制多线程高并发访问? synchronized关键字主要解决多线程共享数据同步问题. ThreadLocal使用场合主要解决多线程中数据因并发产生不一致问题. ThreadLocal和Synchonized都用于解决多线程并发访问.但是ThreadLocal与synchronized有本质的区别: synchronized是利用锁的机制,使变量或代码块在某一时该只能被一个线程访问.而ThreadLocal为每一个线程都提供了变量的副本,使 得每个线程在某一时

从头开始-04.C语言中流程控制

分支结构: if语句:当条表达式满足的时候就执行if后面大括号中语句 三种格式: if,if else , if else if else 特点:1.只有一个代码块会被执行 2.若有else那么必有一个代码会被执行 3.一个if语句中只能以if开头,最多只能有一个else,可以有任意个else if switch(表达式){ case 常量: ... break; case 常量1: ... break; default: ... break; } : 使用场景:当一个变量只有几个固定的取值的时

select标签中怎样控制option的显示数量

最近做项目,需要动态加载数据显示到下拉列表中. 刚开始用select标签,由于数据较多,一次性全部加载,下拉列表会拖得很长,不忍直视(默认会显示20个). 我想控制select中的option显示的个数,例如:只显示5个,其余的通过滚动条来控制显示. 经过反复折腾,发现直接操作select标签无法达到目的,于是改换策略,用input标签和ul标签来模拟select标签. 效果: Demo下载 select标签中怎样控制option的显示数量,布布扣,bubuko.com

百度 主页中在控制台中

try{ if(window.console&&window.console.log) {console.log("一张网页,要经历怎样的过程,才能抵达用户面前?\n 一位新人,要经历怎样的成长,才能站在技术之巅?\n 探寻这里的秘密:\n 体验这里的挑战:\n 成为这里的主人:\n 加入百度,加入网页搜索,你,可以影响世界.\n"); console.log("请将简历发送至 %c [email protected]( 邮件标题请以“姓名-应聘XX职位-来自

[4] D3.js中使用scale(比例)

本人的个人博客为: www.ourd3js.com csdn博客为: blog.csdn.net/lzhlzz 转载请注明出处,谢谢. 在上一节中使用了一个很重要的概念 - scale (这个不知道翻译成什么,暂且叫它比例).本节将重点介绍它的相关使用方法. 在介绍 scale 之前,先介绍两个经常和 scale 一起出现的函数,在上一节中也出现了. d3.max() d3.min() 它们用于求一个数组中的最大值和最小值,如果是一维数组,使用方法如下: var dataset = [ 30,

Python学习(二):入门篇:python中流程控制与函数编写

python中流程控制与函数编写 Last Eidt 2014/5/2 转载请注明出处http://blog.csdn.net/jxlijunhao 一,流程控制 1)布尔逻辑 Python中利用True来表示逻辑真,False来逻辑假 not :非 and:与 or   :或 ==  :逻辑等 >>> False==True False >>> False==False True >>> not False True >>> Fal