【问题标题】:Generate random number for concurrent request without duplicate为并发请求生成随机数而不重复
【发布时间】:2020-05-08 00:22:11
【问题描述】:

目前正在运行负载测试,jmeter 同时触发每秒 300 个请求。我的应用程序需要生成不重复的随机数,但是有这么多请求它失败了。我不能将它存储在 set ot Map 中以防止重复,因为它需要更多的计算时间。

到目前为止我已经尝试过

  1. System.currentTimeMillis();

  2. System.nanoTime()

  3. ThreadLocalRandom

所有这些实现在某些时候都提供了重复。

【问题讨论】:

  • 在没有地图的情况下使用 nanoTime 生成不重复的唯一方法是同步源。
  • 已经有几个关于非重复随机数的问题(有答案),例如Java generating non-repeating random numbers 你读过吗?如果你有,那么我认为他们不会帮助你。你能解释一下为什么吗?
  • @Abra 我已经尝试了一些。并发请求失败。如果我第一次运行 1000 请求它的工作。在第二批中,我尝试再次运行 1000 请求失败。

标签: java multithreading jmeter


【解决方案1】:

你可以使用JMeter的__Random函数。

从菜单中转到您的函数助手,然后从下拉列表中选择您的随机函数。您可以非常轻松地生成和复制随机函数。

这里是一个例子:${__Random(000000100,999999999,)}

更多参考资料,您可以查看:Functions and Variables

【讨论】:

    【解决方案2】:
    1. 每个 JMeter 线程(虚拟用户)都有其编号,可通过 __threadNum() 函数访问。线程组的迭代可以使用__V()__threadGroupName()函数组合获得,如:

      ${__V(__jm__${__threadGroupName}__idx,)}
      

      所以构造如下:

      ${__threadNum}${__V(__jm__${__threadGroupName}__idx,)} 
      

      应为您提供在单次测试执行期间不会重复的唯一编号。

    2. 如果您需要多次重复测试并且系统将“知道”第 1 点的方法 - 您可以在 setUp Thread Group 的某处预先生成真正随机数的唯一列表并将其存储到CSV 文件,在主线程组中,您将能够使用普通 CSV Data Set Config 引用生成的数据

    【讨论】:

      猜你喜欢
      • 2014-10-02
      • 2012-08-30
      • 2015-07-12
      • 1970-01-01
      • 2018-07-03
      • 1970-01-01
      • 1970-01-01
      • 2012-01-23
      相关资源
      最近更新 更多