Jmeter多个请求按照比例并发压测的几种方式

🍅 视频学习:文末有免费的配套视频可观看

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快

一、需求

在压测的过程中,为了能够压测整个链路,通常需要多个接口进行并发, 每个接口的请求比例不尽相同。

比如此时此刻,我在写博客,很多人在浏览博客,或者点赞、评论博客等等等,这些行为占比是不同的。

那么,我们怎么才能尽可能的模拟线上真实场景,对每个接口按照比例并发呢?

实现方法如下:

二、实现方法

设定一个用作讲解的并发场景:

比如,同一时刻,点赞博客的请求占比10%,查看博客的请求占比90%,比例是1:9。

1、对每个请求设置循环次数。

如上场景,我们可以为查看博客的请求设置循环次数为9。

右击【查看】请求→【插入上级】→【逻辑控制器】→【循环控制器】→【循环次数】设置为9→【运行】→【查看结果树】

在这里插入图片描述
在这里插入图片描述
在请求的名称后面加上这个参数,就可以看到请请求的顺序:${__counter(true,i)}

${__threadNum}:统计线程数

${__counter(true,i)}:只统计该用户的迭代次数,

${__counter(false,i)}:统计所有用户的迭代次数,

KaTeX parse error: Expected group after '_' at position 2: {_̲_threadNum}_{__counter(true,i):统计每个线程下,每个用户的迭代次数。

在这里插入图片描述
在这里插入图片描述

可以看出,【点赞】请求执行了1次,【查看】请求执行了9次

2、通过switch controller来实现实现

switch controller类似于程序中的switch函数,该Controller根据给定的值n(可以使用参数)选择执行其下的第n个子节点。

Jmeter取样器按顺序编号,第一个取样器(请求)编号为0,第二个为1,以此类推。

如果指定的编号超出了下面的节点数或者不指定,则运行第0个取样器。

如上例,我们给定的值n应该是{0,1,1,1,1,1,1,1,1,1};

0代表执行第一个取样器,也就是其下的第一个子节点——【点赞】请求; 1代表执行第二个取样器,也就是其下的第一个子节点——【查看】请求。

为了更符合线上实际场景,我们用一个random随机数来控制请求的执行顺序,而不是像方法1那样顺序执行。

操作步骤如下:

①添加BeanShell 取样器及脚本

右击【线程组】→【添加】→【取样器】→【BeanShell 取样器】→添加如下脚本

在这里插入图片描述
在这里插入图片描述

import java.util.Random;
//设置比例为1:9
int[] values = {0,1,1,1,1,1,1,1,1,1};
//利用random随机函数来按照比例随机执行http请求
int size = values.length;
Random rd = new Random();
int n = rd.nextInt(size-1);
System.out.println("value:"+values[n]);
//新建参数"SWITCH_VALUE",并将通过随机函数得到的取样器赋值给参数
vars.put("SWITCH_VALUE",String.valueOf(values[n]));

②添加Switch控制器

右击【线程组】→【添加】→【逻辑控制器】→【switch 控制器】→设置控制变量,即上一步脚本里设置的参数“SWITCH_VALUE”→运行线程组

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看出,我们共10条请求,【点赞】1条,【查看】9条。与我们最初设置的1:9的比例一致。

3、通过自定义随机变量+if控制器来实现

如上场景,我们可以通过Java脚本自定义一个min-max的随机数,然后用if控制器来控制发送哪个请求。

如上场景,点赞与查看是1:9,我们可以定义一个生成1-10的随机数,用if控制器来控制,if 随机数=1,则执行【点赞】请求,if随机数>1,则执行【查看】请求。

具体步骤如下:

①自定义随机变量

选择线程组→【添加】→【取样器】→【Java请求】 (因为要写Java脚本,所以需要先添加Java请求,在Java请求下添加取样器)

在这里插入图片描述
选择【Java请求】→【添加】→【前置处理器】→【BeanShell PreProcessor】→添加 设置自定义变量的脚本,生成随机数【randNo】

在这里插入图片描述
在这里插入图片描述

//.......自定义随机数的方法一........

import java.util.Random;
class JmeterUtil{
    public static int getRandNo(int min,int max){
        Random random = new Random();
        int randNo = random.nextInt(max)%(max-min+1) + min;
        return randNo;
    }
}
int r = JmeterUtil.getRandNo(1,10);
vars.put("randNo",r.toString());


//.......自定义随机数的方法二........
vars.put("randNo","${_Random(1,10)}"); 

②为每个请求添加if控制器,来控制比例

右击【点赞】/【查看】请求→【插入上级】→【逻辑控制器】→【如果(If)控制器】→添加随机数【randNo】的判断

在这里插入图片描述
在这里插入图片描述

在这里要注意,这里只能填一个变量来作为判断条件,而不能直接填【${randNo}=1】,这样if控制器是无法解析的,所以,我们要内置jexl3函数来实现表达式的计算。

步骤如下:

点击【工具】→选择【函数助手对话框】→选择【jexl3】函数→将表达式填入函数参数的【值】那一列→点击【生成】→点击生成的函数即可复制→将复制的函数表达式粘贴在if的判断条件框里

在这里插入图片描述
这里是点赞的if控制器,点赞的比例是1,所以我们的判断条件为randNo==1。

在这里插入图片描述
在这里插入图片描述
【查看】请求的if控制器设置同上,只是判断表达式由【&{randNo}==1】改为【&{randNo}>1】

运行结果如下:

在这里插入图片描述

可以看出,比例基本一致,【点赞】请求有2个,【查看】请求有8个,随机数不是10个数一定是1-10都会出现,所以会出现这种2:8的现象,压测过程中请求较大,故比例偏差是微乎其微的,可忽略。

4、使用JMeter内置随机数+if控制语句来实现

具体步骤:

①右击线程组→【添加】→【配置元件】→【Random Variable】→设置变量名称、随机范围

在这里插入图片描述
在这里插入图片描述
为每个请求添加if控制器的方法同方法三中的步骤一样,连变量名都一样,原样操作即可。

在这里插入图片描述

三、各种方法的优缺点

1、对每个请求设置循环次数。

优点: 操作简单易于实现

缺点: 只能顺序执行,无法随机执行

2、通过switch controller来实现实现

优点:

可以随机执行

缺点:

如果接口较多,比例偏差较大,设置起来比较费劲,例如2:10:88,数组里是2个0,10个1,88个2。

因为每次都要读一遍BeanShell 取样器,严重影响性能,使结果偏离现实。

3、通过自定义随机变量+if控制器来实现

优点:

可拓展性高,可以根据需求用脚本实现,

缺点:

学习成本高,不适宜新手

性能低,没执行一次,都要先执行下这个Java脚本

4、使用JMeter内置随机数+if控制语句来实现

优点:

易上手,操作简单

性能高,因为用的是JMeter内置随机数,所以比方法3性能更高一些。

缺点:

可拓展性差,不能根据特殊需求控制随机变量的随机性,只能设置一个随机区间。

所以,根据经验,方法4是最适用大众的按比例压测的方法。

同时,在这我为大家准备了一份软件测试视频教程(含面试、接口、自动化、性能测试等),就在下方,需要的可以直接去观看。

【2024最新版】Python自动化测试15天从入门到精通,10个项目实战,允许白嫖。。。

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

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

相关文章

HarmongOS打包[保姆级]

创建应用 首先进入 华为开发者联盟-HarmonyOS开发者官网 然后进行登录。 登录成功后,鼠标悬停在在登录右上角那个位置后再点击管理中心,进入下面这个界面。 再点击:应用服务–>应用发布–>新建–>完善信息 构建和生成私钥和证书请求…

SQL Server Management Studio (SSMS) 20.1 - 微软数据库管理工具

SQL Server Management Studio (SSMS) 20.1 - 微软数据库管理工具 请访问原文链接:https://sysin.org/blog/ssms/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 笔者注:SQL Server 2014 及之前版本内置…

[Linux] UDP协议介绍:UDP协议格式、端口号在网络协议栈那一层工作...

TCP/IP网络模型, 将网络分为了四层: 之前的文章中以HTTP和HTTPS这两个协议为代表, 简单介绍了应用层协议. 实际上, 无论是HTTP还是HTTPS等应用层协议, 都是在传输层协议的基础上实现的 而传输层协议中最具代表性的就是: UDP和TCP协议了. 以HTTP为例, 在使用HTTP协议通信之前, …

调度算法(SSTF,SCAN,CSCAN)c语言

假定当前磁头位于100号磁道,有9个进程先后提出了磁盘I/O请求:55 58 39 18 90 160 150 38 184,如果采用扫描算法或循环扫描算法,则磁头向磁道号增加的方向访问。 设计一个磁盘调度模拟系统,编程序演示下述算法的具体实…

线程池ThreadPoolExecutor源码分析

一、线程池基本概念和线程池前置知识 1.1 Java中创建线程的方式有哪些 传统答案: 继承Thread类 通过继承Thread类并重写其run方法来创建线程。具体步骤包括定义Thread类的子类,在子类中重写run方法以实现线程的具体逻辑,然后创建子类的实例…

举例说明 如何通过SparkUI和日志定位任务莫名失败?

有一个Task OOM: 通过概览信息,发现Stage 10的Task 36失败了4次导致Job失败。概览信息中显示最后一次失败的退出代码(exit code)是143,意味着发生了内存溢出(OOM,即Out of Memory)。…

QQ登录测试用例

QQ登录测试用例 常见测试方法&#xff08;可参考软件测试<用例篇>&#xff09; 等价类&#xff1a; 1、有效等价类 &#xff1a;满足需求的数据集合 2、无效等价类&#xff1a;不满足需求的数据集合 边界值错误猜测法场景法 QQ测试用例设计&#xff1a;xmind 需要完整…

C++ 55 之 多继承

#include <iostream> #include <string> using namespace std;class Base08_1{ public:int m_a;Base08_1(){this->m_a 10;} };class Base08_2{ public:// int m_b;int m_a;Base08_2(){// this->m_b 20;this->m_a 30;} };// 多继承 继承的类型都要…

九、BGP路由属性和选路

目录 一、属性分类 1.1、公认属性 1.2、可选属性 二、选路原则 0、丢弃不可达 取值越大越优 1、Preferred-Value 2、Local_Preference 取值越小越优 3、路由优先级 4、AS_Path 5、Origin 6、MED 7、路由来源 8、Next_Hop的IGP度量值 BGP路由等价负载分担&#…

流媒体传输协议HTTP-FLV、WebSocket-FLV、HTTP-TS 和 WebSocket-TS的详细介绍、应用场景及对比

一、前言 HTTP-FLV、WS-FLV、HTTP-TS 和 WS-TS 是针对 FLV 和 TS 格式视频流的不同传输方式。它们通过不同的协议实现视频流的传输&#xff0c;以满足不同的应用场景和需求。接下来我们对这些流媒体传输协议进行剖析。 二、传输协议 1、HTTP-FLV 介绍&#xff1a;基于 HTTP…

雷击保险丝选取

雷击保险丝的估算方法&#xff1a; 1、雷击浪涌实验规定的差模内阻是 2欧姆&#xff1a;(一般差模都是2欧姆) 2、差模雷击浪涌实验等级的确定。 3、差模雷击L-N防雷电路的确定&#xff08;估算防雷电路的钳位电压&#xff09;。 4、估算防雷电路中保险丝的 I^2t 的值来确定…

如何从索尼存储卡恢复数据?

Sony 存储卡广泛用于在数码相机、数码摄像机等中存储照片和视频。如果您从 Sony 存储卡中删除重要数据而未备份&#xff0c;您仍然可以找回丢失的数据。实际上&#xff0c;已删除的视频/照片或文档不会永远丢失&#xff0c;它们仍存储在 Sony 存储卡上&#xff0c;可以通过数据…

计算机组成原理之定点乘法运算

文章目录 原码并行乘法与补码并行乘法原码算法运算规则存在的问题带符号的阵列乘法器习题原码阵列乘法器间接补码阵列乘法器直接补码阵列乘法器 补码与真值的转换 原码并行乘法与补码并行乘法 原码算法运算规则 存在的问题 理解流水式阵列乘法器&#xff08;并行乘法器&#x…

会声会影色彩校正在哪里 会声会影色彩素材栏在哪 会声会影中文免费版下载

会声会影是一款功能强大的视频编辑软件&#xff0c;它可以帮助用户轻松地编辑和制作视频。在进行视频编辑时&#xff0c;色彩校正是一个重要的步骤&#xff0c;它可以调整视频的色调、亮度和对比度等参数&#xff0c;使视频更加生动和鲜明。在会声会影中&#xff0c;色彩校正功…

C#(C Sharp)学习笔记_封装【十八】

什么是封装&#xff1f; 封装是面向对象思维的三大特性之一。封装是将数据和对数据进行操作的函数绑定到一起的机制。它隐藏了对象的内部状态和实现细节&#xff0c;只对外提供必要的接口&#xff0c;从而确保对象内部状态的完整性和安全性。封装的主要目的是增强安全性和简化…

【教学类-64-02】20240610色块眼力挑战(二)-2-25宫格色差10-100(10倍)(星火讯飞)

背景需求 以下的色块眼里挑战需要人工筛选图片&#xff0c;非常繁琐。 【教学类-64-01】20240607色块眼力挑战&#xff08;一&#xff09;-0-255随机底色-CSDN博客文章浏览阅读446次&#xff0c;点赞12次&#xff0c;收藏5次。【教学类-64-01】20240607色块眼力挑战&#xff…

C语言——自定义类型:结构体

前言 本篇博客位大家介绍C语言中一块儿重要的内容&#xff0c;那就是结构体&#xff0c;关于结构体的内容&#xff0c;大家需要深入掌握&#xff0c;在后面的学习中依然会用到&#xff0c;如果你对本文感兴趣&#xff0c;麻烦点进来的老铁一键三连。多多支持&#xff0c;下面我…

食家巷助力“甘肃乡村振兴,百强主播·打call 甘味”活动

2024年&#xff0c;甘肃省“商务乡村振兴”促消费暨“百强主播打call 甘味”活动在天水市龙城广场盛大启动。 活动现场&#xff0c;来自甘肃省 14 个市州的农特产品展台琳琅满目&#xff0c;让人目不暇接。此次活动中&#xff0c;各企业带来了多款深受消费者喜爱的产品&a…

【C++提高编程-06】----C++之STL-函数对象、谓词、仿函数

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

这 10 种架构师,不合格!

大家好&#xff0c;我是君哥。 架构师这个岗位是好多程序员努力的方向&#xff0c;尤其是刚毕业的时候&#xff0c;对架构师有一种崇拜感。毕竟从初级到架构要经历好几次级别飞跃。 工作时间久了&#xff0c;发现架构师这个岗位&#xff0c;其实定义非常广泛&#xff0c;根据工…