浅谈配置元件之随机变量

浅谈配置元件之随机变量

1.概述

为了增强测试的真实性和多样性,JMeter 提供了多种配置元件来生成动态数据,其中“随机变量”(Random Variable) 就是一种常用的配置元件,用于生成随机数值、字符串等,以模拟不同用户请求中的变化参数。

2.目的

随机变量配置元件的主要目的是在每个迭代或每次线程执行时生成不同的随机值,这对于避免因使用固定数据导致的测试结果偏差特别有用。例如,在进行登录测试时,可以利用随机变量生成不同的用户名或密码,使得每个请求看起来都像是来自不同的用户,从而更贴近实际应用环境。

3.使用步骤

添加随机变量

  1. 打开测试计划:首先,打开或创建一个新的 JMeter 测试计划。
  2. 添加线程组:右键点击测试计划,选择“添加” > “线程 (用户)” > “线程组”,为你的测试定义用户负载。
  3. 插入随机变量:右键点击线程组,选择“添加” > “配置元件” > “随机变量”。

配置随机变量

添加随机变量后,会出现配置界面,主要包括以下设置:
● 名称:树中显示的此元素的描述性名称,例如随机用户名。
● 变量名称:
● 输出格式:进行格式转换,例如,“000”将生成至少有3位数字的数字,或“USER_000”将生成USER_nnn形式的输出。如果未指定,默认情况下则生成对应的数字,如随机生成1-100,则如果随机生成了2,则显示为2,随机生成了86,则显示为86。
● 最小值:生成的随机数的最小值,long类型。
● 最大值:生成的随机数的最大值,long类型。。
● 随机种子:随机数生成器的种子。如果在“每线程”设置为true的情况下使用相同的种子值,则每个“线程”将获得与每个Random类相同的值。如果未设置种子,则将使用Random的默认构造函数
● 每线程(用户)?:如果为False,则生成器在线程组中的所有线程之间共享。如果为True,则每个线程都有自己的随机生成器。
随机种子知识点补充:

随机种子是一个用于生成随机数序列的初始值。在计算机编程中,由于计算机产生的随机数实际上是通过一个确定性的算法生成的,所以如果使用相同的随机数生成算法和相同的初始值,就会生成相同的随机数序列。这就是为什么在需要多次运行相同的随机数生成操作时,我们可以使用随机种子来确保每次生成的随机数序列都是相同的。
在大多数编程语言中,我们可以使用随机种子函数来设置随机种子的值。这个函数可以是一个整数,该整数作为初始值传递给随机数生成算法。通常,我们可以使用当前的系统时间作为种子,以确保每次运行程序时种子都是不同的。这样可以避免生成相同的随机数序列。
随机种子对于需要重现实验结果或需要保持随机性一致的情况非常有用。例如,在机器学习中,我们经常使用随机种子来确保每次运行训练算法时都能够得到相同的随机初始化参数,以便进行结果的比较和验证。
总之,随机种子是一个用于生成随机数序列的初始值,它可以用来控制随机性并重现实验结果。在编程中,我们可以使用随机种子函数来设置随机种子的值。

引用随机变量

配置好随机变量后,你可以在HTTP 请求、正则表达式提取器或其他需要动态数据的地方引用这个变量。引用方式为${variableName},比如${randomUser}。

4.实例应用

当前添加如下脚本:
在这里插入图片描述

  1. 线程组:线程数设置为2,Ramp-Up设置为1,循环次数设置为5。
  2. 随机变量:变量名称设置为user,输出格式设置为user_,最小值为1,最大值为100,随机种子设置为1。
  3. BeanShell取样器:设置如下代码:
log.info("${user}");

情况一:设置每线程(用户)为False

该种情况下,我们可以获得如下结果

2024-06-04 20:18:03,517 INFO o.a.j.t.JMeterThread: Thread started: Thread Group 1-1
2024-06-04 20:18:03,522 INFO o.a.j.u.BeanShellTestElement: user_86
2024-06-04 20:18:03,523 INFO o.a.j.u.BeanShellTestElement: user_89
2024-06-04 20:18:03,525 INFO o.a.j.u.BeanShellTestElement: user_48
2024-06-04 20:18:03,529 INFO o.a.j.u.BeanShellTestElement: user_14
2024-06-04 20:18:03,530 INFO o.a.j.u.BeanShellTestElement: user_55
2024-06-04 20:18:03,531 INFO o.a.j.t.ThreadGroup: Started thread group number 1
2024-06-04 20:18:03,531 INFO o.a.j.t.JMeterThread: Thread is done: Thread Group 1-1
2024-06-04 20:18:03,532 INFO o.a.j.e.StandardJMeterEngine: Starting ThreadGroup: 2 : 线程组
2024-06-04 20:18:03,533 INFO o.a.j.t.JMeterThread: Thread finished: Thread Group 1-1
2024-06-04 20:18:03,534 INFO o.a.j.e.StandardJMeterEngine: Starting 1 threads for group 线程组.
2024-06-04 20:18:03,534 INFO o.a.j.e.StandardJMeterEngine: Thread will continue on error
2024-06-04 20:18:03,535 INFO o.a.j.t.ThreadGroup: Starting thread group... number=2 threads=1 ramp-up=1 delayedStart=false
2024-06-04 20:18:03,536 INFO o.a.j.t.ThreadGroup: Started thread group number 2
2024-06-04 20:18:03,537 INFO o.a.j.e.StandardJMeterEngine: All thread groups have been started
2024-06-04 20:18:03,537 INFO o.a.j.t.JMeterThread: Thread started: 线程组 2-1
2024-06-04 20:18:03,538 INFO o.a.j.t.JMeterThread: Thread is done: 线程组 2-1
2024-06-04 20:18:03,539 INFO o.a.j.t.JMeterThread: Thread finished: 线程组 2-1
2024-06-04 20:18:04,025 INFO o.a.j.t.JMeterThread: Thread started: Thread Group 1-2
2024-06-04 20:18:04,026 INFO o.a.j.u.BeanShellTestElement: user_5
2024-06-04 20:18:04,027 INFO o.a.j.u.BeanShellTestElement: user_35
2024-06-04 20:18:04,027 INFO o.a.j.u.BeanShellTestElement: user_7
2024-06-04 20:18:04,028 INFO o.a.j.u.BeanShellTestElement: user_79
2024-06-04 20:18:04,029 INFO o.a.j.u.BeanShellTestElement: user_49

可以得到如下结论:当False时,生成器在线程组中的所有线程之间共享,即随机结果出来的数据可以给线程1或者线程2使用。

情况二:设置每线程(用户)为True

该种情况下,我们可以获得如下结果:

024-06-04 20:19:38,782 INFO o.a.j.t.JMeterThread: Thread started: Thread Group 1-1
2024-06-04 20:19:38,786 INFO o.a.j.t.JMeterThread: Thread started: 线程组 2-1
2024-06-04 20:19:38,786 INFO o.a.j.u.BeanShellTestElement: user_86
2024-06-04 20:19:38,786 INFO o.a.j.t.JMeterThread: Thread is done: 线程组 2-1
2024-06-04 20:19:38,788 INFO o.a.j.t.JMeterThread: Thread finished: 线程组 2-1
2024-06-04 20:19:38,788 INFO o.a.j.u.BeanShellTestElement: user_89
2024-06-04 20:19:38,790 INFO o.a.j.u.BeanShellTestElement: user_48
2024-06-04 20:19:38,791 INFO o.a.j.u.BeanShellTestElement: user_14
2024-06-04 20:19:38,791 INFO o.a.j.u.BeanShellTestElement: user_55
2024-06-04 20:19:38,792 INFO o.a.j.t.JMeterThread: Thread is done: Thread Group 1-1
2024-06-04 20:19:38,792 INFO o.a.j.t.JMeterThread: Thread finished: Thread Group 1-1
2024-06-04 20:19:39,274 INFO o.a.j.t.JMeterThread: Thread started: Thread Group 1-2
2024-06-04 20:19:39,275 INFO o.a.j.u.BeanShellTestElement: user_86
2024-06-04 20:19:39,278 INFO o.a.j.u.BeanShellTestElement: user_89
2024-06-04 20:19:39,279 INFO o.a.j.u.BeanShellTestElement: user_48
2024-06-04 20:19:39,281 INFO o.a.j.u.BeanShellTestElement: user_14
2024-06-04 20:19:39,282 INFO o.a.j.u.BeanShellTestElement: user_55

可以得到如下结论:当True时,则每个线程都有自己的随机生成器,即每个线程都有随机结果。
综合情况一和情况二,我们也可以看到,如果我们的随机种子没有变化的时候,我们随机出来的第一个、第二个…以此类推的值都是一样的,比如此次实例中,第一个数随机值是:86,第二个数随机值是:89…

5.总结

随机变量配置元件是JMeter中实现测试数据多样性和真实性的强大工具。通过灵活运用随机变量,测试人员能够设计出更加贴近现实、有效评估系统性能的测试场景。掌握其使用方法对于提升测试覆盖率和准确性至关重要。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

认识meta

目录 认识meta camera_metadata的存储结构 camera_metadata的基本操作 申请camera_metadata 增加entry 查找entry 更新entry 删除entry 对tag的查找操作 vendor_tag_ops和vendor_cache_ops是Andriod提供的接口 propertyID Camxhal3metadatautil.cpp文件理解 Initia…

Redisson 分布式锁 - RLock、RReadWriteLock、RSemaphore、RCountDownLatch(配置、使用、原理)

目录 前言 Redisson 分布式锁 环境配置 1)版本说明 2)依赖如下 3)配置文件如下 4)项目配置 RLock 1)使用方式 2)加锁解释 3)加锁时手动设置时间 4)加锁时,到…

揭秘FL Studio21.2.8中文版一键解锁音乐创作新境界!

在音乐制作的广阔天地里,随着技术的不断进步和数字音频工作站(DAW)软件的普及,越来越多的音乐爱好者和专业制作人开始涉足音乐创作的奇妙旅程。其中,FL Studio以其强大的功能、直观的操作界面和丰富的音色资源&#xf…

LED驱动IC:HC2106,1W升压型DC/DC白光LED驱动器HC2106系列,供应给大功率白光LED灯提供能源、恒流源

LED驱动IC: HC2106:1W升压型DC/DC白光LED驱动器HC2106系列 概述:HC2106系列芯片是针对LED应用设计的PFM 控制模式的开关型DC/DC 升压恒流芯片,通过外接电阻可使输出电流值恒定在0mA~500mA。 HC2106可以给一个、多个…

算法004:盛水最多的容器

这道题比较简单,使用双指针。 要求的是最大面积,对于一个水桶(水杯来说),面积的算法是固定的,就是底乘以高。 在这个题中,我们把左边的位置设为left,右边的位置设为right&#xff…

一个月飙升 9k star!打破常规的 git 客户端

作为一名程序员,想必大家每天都要使用 git 来管理自己的代码吧。有些大佬喜欢使用命令行来进行 git 的操作,有些新入门的小白程序员则比较喜欢使用各种 git 客户端来可视化的管理代码,而有些程序员则喜欢使用 IDE 中集成的 git 功能来做代码的…

力扣234. 回文链表

给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 示例 1: 输入:head [1,2,2,1] 输出:true # Definition for singly-linked list. # c…

R语言探索与分析17-CPI的分析和研究

一、选题背景 CPI(居民消费价格指数)作为一个重要的宏观经济指标,扮演着评估通货膨胀和居民生活水平的关键角色。在湖北省这个经济活跃的地区,CPI的波动对于居民生活、企业经营以及政府宏观经济政策制定都具有重要的影响。因此&a…

打造卓越任务调度体系:实用攻略与技巧解析

写这篇文章,想和大家从头到脚说说任务调度,希望大家读完之后,能够理解实现一个任务调度系统的核心逻辑。 1 Quartz Quartz 是一款 Java 开源任务调度框架,也是很多 Java 工程师接触任务调度的起点。 下图显示了任务调度的整体流…

基于STC12C5A60S2系列1T 8051单片机实现一主单片机与一从单片机相互发送数据的RS485通信功能

基于STC12C5A60S2系列1T 8051单片机实现一主单片机与一从单片机相互发送数据的RS485通信功能的RS485通信功能 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机串口通信介绍STC12C5A60S2系列1T 8051单片机串口通信的结构基于STC12C5A60S2系列1T 8051单片机串…

zdppy_api 中间件请求原理详解

单个中间件的逻辑 整体执行流程: 1、客户端发起请求2、中间件拦截请求,在请求开始之前执行业务逻辑3、API服务接收到中间件处理之后的请求,和数据库交互,请求数据4、数据库返回数据5、API处理数据库的数据,然后给客户…

【第十一课】空间数据基础与处理——属性数据管理

一、前言 Arcgis分析离不开两大主体数据,一是空间,二是经济属性。在运用 Aecgis 进行分析时,经常会碰到一些涉及多要素的属性更改或填写, 如果按照普通的方法,每个属性进行修改或填写的话,工作量是很大的&…

Apache OFBiz 路径遍历导致RCE漏洞复现(CVE-2024-36104)

0x01 产品简介 Apache OFBiz是一个电子商务平台,用于构建大中型企业级、跨平台、跨数据库、跨应用服务器的多层、分布式电子商务类应用系统。是美国阿帕奇(Apache)基金会的一套企业资源计划(ERP)系统。该系统提供了一整套基于Java的Web应用程序组件和工具。 0x02 漏洞概…

【深入理解计算机系统第3版】补码加法

感觉这部分有点难,所以稍微整理记一下。 抱歉中英混合,来回切换输入法真的很折磨人。 负溢出 正常 正溢出 以4位补码加法为例,理解下表(书中P64) 补码最大值Tmax 2^3 - 1 7, 补码最小值Tmin -2^3 -8 xyz x yz z mod 2^4zU2Tw(z)溢…

超燃混剪热门视频素材去哪里找? 爆款超燃网站合集分享

在今天的数字时代,短视频已成为传播信息和个人表达的主流方式。无论你是混剪爱好者还是自媒体创作者,掌握如何获取和利用高质量的视频素材是关键。本文将介绍几个顶级的视频素材网站,包括国内外的平台,帮助你创建引人入胜的视频作…

【数据结构】二叉搜索树--BST,Binary Search Tree

文章目录 二叉搜索树1. 二叉搜索树的概念2. 二叉搜索树的接口2.1 查找非递归查找递归查找 2.2 中序遍历2.3 插入非递归插入递归插入 2.4 删除非递归删除递归删除 3. 二叉搜索树的应用key搜索模型kv搜索模型 5. oj题 二叉搜索树 1. 二叉搜索树的概念 二叉搜索树又称二叉排序树…

12-学生们参加各科测试的次数(高频 SQL 50 题基础版)

12-学生们参加各科测试的次数 -- 学生表中,id是唯一的,将他作为主表 -- CROSS JOIN产生了一个结果集,该结果集是两个关联表的行的乘积 -- 2行表,与3行表使用cross join,得到2*36行数据 select st.student_id, st.student_name,su.subject_na…

Vxe UI vxe-upload vue上传组件,显示进度条的方法

vxe-upload vue 上传组件 查看官网 https://vxeui.com 显示进度条很简单,需要后台支持进度就可以了,后台实现逻辑具体可以百度,这里只介绍前端逻辑。 vue 上传附件 相关参数说明,具体可以看文档: multiple 是否允许…

现代密码学-国密算法

商用密码算法种类 商用密码算法 密码学概念、协议与算法之间的依赖关系 数字签名、证书-公钥密码、散列类算法 消息验证码-对称密码 ,散列类 安全目标与算法之间的关系 机密性--对称密码、公钥密码 完整性--散列类算法 可用性--散列类、公钥密码 真实性--公…

项目雅景临居---模块2 标签管理

一、 [根据类型]查询标签列表 Autowiredprivate LabelInfoService service;Operation(summary "&#xff08;根据类型&#xff09;查询标签列表")GetMapping("list")public Result<List<LabelInfo>> labelList(RequestParam(required false)…