JMeter多个请求按照比例并发压测的几种方式_jmeter按比例调用接口(3)

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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

可以看出,【点赞】请求执行了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控制语句来实现

优点:

易上手,操作简单

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

中…(img-PTIOQZnz-1715800514988)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

  • 16
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jmeter中进行多接口压测的步骤如下: 1. 首先,确保你已经下载并安装了jmeter,并且设置了简体中文语言选项。 2. 在jmeter中创建一个新的线程组,用于模拟多用户同时进行接口调用。 3. 在线程组中添加多个http请求,每个请求对应一个待测试的接口。 4. 可以添加聚合报告,以便查看测试结果的汇总信息。 5. 可以使用表格查看结果来查看每个接口的详细响应数据。 6. 在每次运行之前,可以清空上一次测试的结果,以确保结果的准确性。 7. 可以设置http请求的默认值,例如消息头信息,以便在多个请求中共享相同的设置。 8. 调节并发线程数,以模拟系统的不同负载情况,并检测系统的性能。 9. 在master机器上执行启动命令,可以选择指定其中一台机器或者全部的slave机器进行压测。 - 方式一:指定其中一台机器或者多台执行命令,并指定-R参数和slave机器的IP地址。 - 方式二:全部的slave机器同时进行压测执行命令并指定-r参数。 注意:在执行命令之前,请确保slave和master的host配置已正确设置,并且不是使用127.0.0.1或localhost作为IP地址。 以上是在jmeter中进行多接口压测的一般步骤,根据具体的需求和场景,你可能还需要进行其他的配置和调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [jmeter多个接口怎么进行测试?接口脚本如何编写?](https://blog.csdn.net/weixin_67553250/article/details/123658603)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [JMeter教程:简单压测实例, Jmeter单用户模拟调用接口,多用户模拟调用接口](https://blog.csdn.net/qq_37767455/article/details/121442075)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值