Jmeter-BeanShell脚本中for循环里面使用random随机数函数,每次生成的都一样

这篇具有很好参考价值的文章主要介绍了Jmeter-BeanShell脚本中for循环里面使用random随机数函数,每次生成的都一样。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

预想的是每次循环生成的随机数不一样,但实际使用Random函数生成的是重复的。
以下是部分原代码:

List updateList = new ArrayList();
for(Object o: fieldList){
    Map map = new HashMap();
    map.put("id", o.get("id"));
    map.put("dataId", o.get("dataId"));
    map.put("type", "number");
    map.put("data", ${__Random(1,10000)});
    JSONObject jsonObj = new JSONObject(map);
    updateList.add(jsonObj);
}

生成的updateList为:
[{“id”:235214718648462,“dataId”:null,“data”:6708,“type”:“number”}, {“id”:318239582208002,“dataId”:333989510397954,“data”:6708,“type”:“number”}, {“id”:333989483134978,“dataId”:333989510397957,“data”:6708,“type”:“number”}]

分析原因:

在需要循环创建随机数的时候,声明Random对象时,不能将语句写在循环体内,Randon是基于系统时间相关种子来生成随机数的,而在15毫秒以内的循环里面,不断实例化对象最后产生的随机数有可能都是一样的,因为由于其有限的解决方法,系统时钟不会检测少于大约15 毫秒的时间差异。
初始化两个随机数生成器的紧凑循环中或在短期内创建两个随机数生成器可能会产生相同的随机数字序列。在大多数情况下,这不是开发人员的意图,会导致性能问题,因为实例化和初始化随机数生成器是一个代价相对较大的过程。所以,我们在实例化Random类对象的时候,尽量写在循环外部,用同一个对象去生成一组随机数,就能规避以上问题。当然,你也可以用线程Sleep等,也就是让循环中有时间间隔,这样也能达到效果;

修改后代码:文章来源地址https://www.toymoban.com/news/detail-807006.html

List updateList = new ArrayList();
Random randomData = new Random();
for(Object o: fieldList){
    Map map = new HashMap();
    map.put("id", o.get("id"));
    map.put("dataId", o.get("dataId"));
    map.put("type", "number");
    map.put("data", randomData.nextInt(1,10000));
    JSONObject jsonObj = new JSONObject(map);
    updateList.add(jsonObj);
}

到了这里,关于Jmeter-BeanShell脚本中for循环里面使用random随机数函数,每次生成的都一样的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Jmeter 中 Beanshell 的使用

    目录 前言: Beanshell 介绍 常用内置变量 log vars 和 props vars 常用方法: props 常用方法: prev 综合运用 JMeter 是一个广泛使用的性能测试工具,它支持许多不同的测试技术和方法。其中,Beanshell 是一种常用的脚本语言,它可以用来自动化测试脚本的执行和参数化测试。 Beanshel

    2024年02月16日
    浏览(60)
  • 使用BeanShell写入内容到文件【JMeter】

    ​ 在我们日常工作中,可能会遇到需要将请求返回的数据写入到文件中。在我们使用JMeter进行性能测试时,就经常能够遇到这种情况。要想达到这种目的,我们一般采取BeanShell后置处理器来将内容写入到文件。 ​ 在目前大多数的性能测试中,都是以JSON形式返回结果。因此我

    2024年02月11日
    浏览(44)
  • 【JMeter】使用BeanShell写入内容到文件

    目录 使用BeanShell写入内容到文件 一、前言 二、提取 三、写入 ​在我们日常工作中,可能会遇到需要将请求返回的数据写入到文件中。在我们使用JMeter进行性能测试时,就经常能够遇到这种情况。要想达到这种目的,我们一般采取BeanShell后置处理器来将内容写入到文件。 ​

    2024年02月12日
    浏览(38)
  • Jmeter进阶使用:BeanShell实现接口前置和后置操作

    我们使用Jmeter做压力测试或者接口测试时,除了最简单的直接对接口发起请求,很多时候需要对接口进行一些前置操作:比如提前生成测试数据,以及一些后置操作:比如提取接口响应内容中的某个字段的值。举个最常用的例子: 会员注册接口:需要使用电话号码作为入参,

    2024年02月12日
    浏览(49)
  • Jmeter(二十七):BeanShell PostProcessor跨线程全局变量使用

    在性能测试中,两个相关联的接口不一定都在同一个线程组,遇见这种情况时,我们要进行跨线程组传参,此处用登录和查询配送单两个请求举例; 1、登录请求中配置json提取器,将接口返回的token保存在变量中;  2、登录请求中配置BeanShell 后置处理程序,将token保存到全局

    2024年02月11日
    浏览(45)
  • JMeter 特殊组件-逻辑控制器与BeanShell PreProcessor 使用示例

      如果您觉得有用的话,记得给 博主点个赞,评论,收藏一键三连啊 ,写作不易啊^ _ ^。   而且听说 点赞的人每天的运气都不会太差 ,实在白嫖的话,那欢迎常来啊!!! 1. 逻辑控制器使用 流程: 1、选择你的HTTP请求; 2、单机右键-选择插入上级 3、选择逻辑控制器 1.1.

    2024年02月12日
    浏览(39)
  • 性能测试工具 jmeter 录制脚本,传递 cookie,循环执行接口

    目录 前言: 代理录制脚本 循环重复添加接口 登录并传递 cookie 给新建产品接口 循环执行脚本  在使用JMeter进行性能测试时,录制脚本是一种常用的方法。录制脚本可以帮助你捕获和重放用户与应用程序之间的交互,以模拟真实的用户行为。

    2024年02月16日
    浏览(70)
  • Shell脚本攻略:循环语句for

    目录 一、理论 1.for循环 2.echo命令 二、实验 1.实验一 2.实验二 3.实验三 4.实验四 5.实验五 6.实验六 7.实验七 8.实验八 9.实验九 (1)for循环的常见用法       ① 带列表的for循环 带列表的for循环用于执行一定次数的循环,其语法结构如下: for 变量名 in 取值列表 do   命令序列

    2024年02月06日
    浏览(40)
  • Shell脚本学习-for循环结构4

    案例1: 批量创建10个系统账号chang01~chang10,并设置密码(密码不能相同)。(密码随机8位字符) 脚本: 运行结果: 知识点:随机数密码,并且是8位字符串。  RANDOM是生成的是伪随机数,可以在里面在增加一个时间date。 修改下脚本: 运行: 先用for语句把之前创建的用户删

    2024年02月14日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包