Jmeter实现百分比业务比例

 

相较于LoadRunner,jmeter在复杂场景方式貌似略有欠缺。前一段时间,想实现一个功能,如有两个采样器a与b,a采样器与b采样器被执行的概率分别为1/4与3/4,那么应该怎么实现呢?

在网上找了下资料,发现网上大多都是三种做法:

1.多线程方式,比如a采样器用20个线程,b线程用60个线程,这样比例即为1:3

但是这样会产生一个问题,若按照时间维度执行,均执行10min,a采样器与b采样器的response时间不一样,那么在这段时间内a与b的请求数无法做到1:3

2.jmeter自带一个计算函数,使用该函数则可达到效果。

  

简述一下该控制器的功能,这个控制器为每个请求计数,相当于给了他一个编号。

当参数为true时,每个用户有自己的计数器,比如10个线程组,100个loop,这是计数器的值为1-100.

当选择false,全局计算器,10个线程组,100个loop,计数器值为1-10000

那么想使用1:3的比例时,则使用一个if控制器。

条件分别为 ${__counter(true,)}%4==0 与${__counter(true,)}%4!=0

详见http://blog.csdn.net/selingchen/article/details/47844375

3.使用JSR223 Sampler + Groovy

在控制器中加入下面代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int[] values = (int[])vars.getObject("RANDOM_VALUES");
if(values==null) {
    values =  [0,1,2,3,2,3,1,3,2,3] as int[];
    vars.putObject("RANDOM_VALUES",values);
}
// Increment that will be used in SwitchController value will be between 0 and 2
// because there are 3 TCs
Integer increment = (Integer)vars.getObject("INCREMENT");
if(increment==null) {
    increment = Integer.valueOf(0);
} else {
    increment = Integer.valueOf((increment.intValue()+1)%values.length);   
}
String value = Integer.toString(values[increment.intValue()]);
 
vars.put("SWITCH_VALUE", value);
vars.putObject("INCREMENT", increment);
SampleResult.setResponseData("SWITCH_VALUE from inside:"+value, null);
return "SWITCH_VALUE:"+value;

相当于每次都在给RANDOM_VALUES数组遍历,依次取里面的值,然后用if控制器判断,达到实现百分比的效果。

详见:http://www.oschina.net/translate/jmeter-control-percentage-of-sampler?cmp

针对上面三种方式进行比较:

方案一不用说,有时候达不到百分比分发请求的效果,为下策。

方案三经过试验,有一个很大的缺点,采用的是采样器,消耗就较大。尤其是遇到更加复杂的场景,比如有a,b两个场景,需要用一个JSR223采样器,a场景下面又有一个复合场景,需要按照比例分发请求(这种情况蛮常见的),这时又需要加一个采样器。这样的话,就显得太麻烦,如果用本地的jmeter,不用分布式,可能都会因为开销太大导致压力上不去。

方案二:采用jmeter本身自带的计算器,倒不失为一个好的方法。但是针对一些复杂的场景,这个计算式有点难写,

比如:3:2这个比例,我看到网上的实现都是${__counter(true,)}%2==1||${__counter(true,)}%3==0,

这种计算方式就比较复杂了,那有没有简单一点实现方式呢?

其实是有的。

比如下面场景:

那么表达式应该怎么写呢?

上面有3的倍数,5的倍数,那么取其最小公倍数15,按照15分割。

均使用If控制器,表达式分别为:

a:  ${__counter(false,)}%15 <=5

b:  ${__counter(false,)}%15 >5

c:   ${__counter(false,)}%15==1

d:   ${__counter(false,)}%15>1&& ${__counter(false,)}%15<=5

总结规律:

按照最小的公倍数分割,每个控制器取他们应占的份数。

上面的3:2的实现手段,就更容易了,一个占2/5,一个占3/5,完全不需要写那么复杂的数学表达式~~~

转自:http://www.cnblogs.com/lzlfighter/p/5731300.html

Jmeter实现百分比业务比例的更多相关文章

  1. canvas制作原生的百分比圆形比例等

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

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

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

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

    以发帖,看帖,回帖三个事物为例,这里就10个用户跑10次,进行测试下: 可以看到看帖,回帖,发帖比例是5:3:2,先来说说怎么做到的,就是通过if控制器,分别来看下几个控制器的内容, 看帖(if控制器 ...

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

    作者:Selingchen 来源:CSDN 原文:https://blog.csdn.net/selingchen/article/details/47844375

  5. jmeter-控制业务比例

    方式一: 多线程组 缺点:由于各事务相应时间一般不一致,故只能粗略的控制业务占比 实例:待补充

  6. (转)使用JMeter对秒杀示例进行性能测试

    背景 秒杀是我们ServiceComb开源团队以领域驱动设计(DDD)为背景,从零开始构建一个微服务架构的示例项目:在<秒杀开发历程>系列博文中提到它作为一个高并发压力场景的应用,采用了C ...

  7. 【性能测试实战:jmeter+k8s+微服务+skywalking+efk】系列之:性能测试场景设计

    说明: 本文是基于虚拟机环境配置设计的 性能测试需求 总tps≥100 每个业务的rt<500ms 持续稳定跑50万业务量 单场景 目的:找到单场景的性能问题,为容量场景提供参考,如果低于容量场 ...

  8. 五. SpringCloud服务降级和熔断

    1. Hystrix断路器概述 1.1 分布式系统面临的问题 复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败.这就造成有可能会发生服务雪崩.那么什么是服务雪崩呢 ...

  9. 转载:SqlServer数据库性能优化详解

    本文转载自:http://blog.csdn.net/andylaudotnet/article/details/1763573 性能调节的目的是通过将网络流通.磁盘 I/O 和 CPU 时间减到最小 ...

随机推荐

  1. Service系统服务(五):PXE基础装机环境、配置并验证DHCP服务、配置PXE引导、验证PXE网络装机、PXE+kickstart自动装机

    一.PXE基础装机环境 目标: 本例要求为后续的PXE服务器构建提供RHEL7软件仓库,完成下列任务: 1> 在CentOS真机部署Web目录/var/www/html/rh7dvd   2&g ...

  2. Service系统服务(三):查看进程信息、进程调度及终止、系统日志分析、使用systemctl工具

    一.查看进程信息 目标: 本例要求掌握查看进程信息的操作,使用必要的命令工具完成下列任务: 找出进程 gdm 的 PID 编号值 列出由进程 gdm 开始的子进程树结构信息 找出进程 sshd 的父进 ...

  3. Xcode5 统计单元测试覆盖率(仅限XCTest)

    概要 通过本篇文章,你将学会如何在Xcode5下使用统计XCTest测试代码的覆盖率,以及如何快速得到测试覆盖率的图形化报表. 为什么要特别说明Xcode5下的代码覆盖率统计,原因是,以前的方法在新环 ...

  4. 前端工程师技能图谱skill-map

    # 前端工程师技能图谱 ## 浏览器 - IE6/7/8/9/10/11 (Trident) - Firefox (Gecko) - Chrome/Chromium (Blink) - Safari ...

  5. 简单gui

    import java.awt.Button; import java.awt.Frame; import java.awt.event.WindowAdapter; import java.awt. ...

  6. upc组队赛3 Congestion Charging Zon【模拟】

    Congestion Charging Zon 题目描述 Tehran municipality has set up a new charging method for the Congestion ...

  7. Python Numpy 矩阵级基本操作(2)

    1.开方与求e指数 import numpy as np from numpy.matlib import randn print "Test sqrt and exp" arr ...

  8. Linux(四)—— 项目部署与ansible自动化部署

    目录 项目部署与ansible自动化部署 一.项目部署 二.ansible自动化部署(python自动化运维) 1.安装ansible 2.ansible例子 3.ansible自动化部署nginx ...

  9. 100个常用js代码(转载)

    作者:小萧ovo链接:https://zhuanlan.zhihu.com/p/23076321来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. JavaScript定点 ...

  10. 都 9102 年了,一起来攻克 Linux 吧!

    都 9102 年了,一起来攻克 Linux 吧! 对 Java 程序员来说,天天会和 Linux 打交道,如果你无法熟练地操作 Linux ,基本上等于少了一半的功力,也少了一半的机会-- 身边的开发 ...