首页 > 其他分享 >浅谈配置元件之随机变量

浅谈配置元件之随机变量

时间:2024-06-04 20:31:13浏览次数:25  
标签:INFO 20 浅谈 04 2024 线程 06 随机变量 元件

浅谈配置元件之随机变量

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

标签:INFO,20,浅谈,04,2024,线程,06,随机变量,元件
From: https://blog.csdn.net/u012151594/article/details/139453180

相关文章

  • 浅谈正向代理和反向代理(案例介绍)
    公司一般主要以反向代理为主(最典型的Nginx负载均衡)一、正向代理客户端Client不直接访问服务器Server,通过代理服务器Proxy访问正向代理是客户主动使用的代理正向代理:最典型的案例就是通过爬虫爬取网络数据,如果请求次数过多该网站会屏蔽你的IP(封禁一段时间在访问、无......
  • 浅谈SpringBoot配置文件
    文章目录一、配置文件作用二、配置文件分类三、SpringBoot内置的配置文件格式3.1、.properties3.1.1、.properties配置语法3.1.2、.properties读取方式3.2、.yml/.yaml3.2.1、.yml配置语法3.2.2、.yml读取形式四、两种配置文件优缺点4.1、.properties4.2、.yml4.2.1、......
  • Unreal 浅谈TWeakObjectPtr
    【USparkle专栏】如果你深怀绝技,爱“搞点研究”,乐于分享也博采众长,我们期待你的加入,让智慧的火花碰撞交织,让知识的传递生生不息!前言在Unreal的开发过程中,正确的引用和管理UObject是十分重要的,尤其Unreal有着它自己的UObject的GC机制,这使得对UObject的有效引用和管理变得尤为......
  • 【杂记-浅谈DDos攻击、浅析SYN Flood攻击、Dos及DDos攻击区别】
    一、DDosDistributedDenialofService分布式拒绝服务攻击什么是DDos攻击DDoS攻击是一种常见的网络攻击形,攻击者利用恶意程序对一个或多个目标发起攻击,企图通过大规模互联网流量耗尽攻击目标的网络资源,使目标系统无法进行网络连接、无法提供正常服务。DDoS攻击会给攻......
  • 线程概念浅谈
    1.为什么要有线程我们知道一个集成应用场景需要多个进程同时调度执行各自的功能,那么多进程的本质就是产生多个执行流,每个执行流执行不同的代码和功能,但是一个进程由PCB(task_struct)、进程地址空间、页表、文件描述符表等资源组成,是一个资源集合,创建的开销较大,那么为了满足用户的......
  • bet8链接:浅谈LKL对Linux和新的成果
    由bet8链接 вт989点сс编译,LinuxKernelLibrary(LKL)设计为Linux核心的移植版本,在目录arch/lkl中,约有3500行的程式码。LKL与应用程式连结,以运作于使用者空间,依赖由主机作业系统提供的一组主机端的功能,例如semaphore,POSIXThreads,malloc、计时器(timer)......
  • 浅谈C++函数
    目录一、函数的概念二、调用函数的两个前提三、函数传参的三种形式四、函数返回类型一、函数的概念函数是C++程序的基本模块,通常一个C++程序由一个或多个函数组成。函数可以完成用户指定的任务,一般分为库函数和用户自定义的函数。函数由函数头和函数体组成,函数头中包......
  • Java中继承与接口的区别(浅谈)
    在Java中,继承和接口是两种不同的方式来实现代码的复用和扩展。以下是它们之间的主要区别:1.继承:继承是面向对象编程中的一种方式,允许一个类继承另一个类的属性和方法。继承的主要目的是为了实现代码的复用,即子类可以继承父类的属性和方法,从而避免重复编写相同的代码。此外,继......
  • 浅谈一下C#和java的线程不同点
    C#和Java在线程处理方面有一些显著的区别,这些区别主要体现在线程的创建、管理和生命周期控制上。以下是一些主要的区别:线程的创建和管理Java:Java中线程的创建通常是通过继承Thread类或实现Runnable接口来实现的。Java提供了线程组(ThreadGroup)的概念,允许将线程组织在一起......
  • 浅谈C#中取消令牌CancellationTokenSource
    基础操作CancellationTokenSourcecancellationTokenSource=newCancellationTokenSource();cancellationTokenSource.Token.Register(()=>{Console.WriteLine("取消了1111");});......