在所有线程中使用相同的随机变量

Posted

技术标签:

【中文标题】在所有线程中使用相同的随机变量【英文标题】:Use same random variable in all threads 【发布时间】:2021-11-26 22:44:46 【问题描述】:

我有测试计划:

线程组(用户 3,循环 2) 随机变量 HTTP 请求

我希望仅在每个循环中更改变量,因此在每次迭代下,所有三个线程都应该发送相同的值。

所以我想要这样的东西:

请求随机变量 = X

请求随机变量 = X

请求随机变量 = X

请求随机变量 = Y

请求随机变量 = Y

请求随机变量 = Y

我尝试了很多解决方法,但找不到合适的解决方案。

附:我不想从文件中读取变量。我需要生成它们

【问题讨论】:

【参考方案1】:

无论你“想要”什么,最好的选择是在setUp Thread Group 的某处预先生成随机值并将其写入文件,然后在“主”线程组中使用CSV Data Set Config 来读取这些值。

但是,如果这仍然不是您“想要”的东西,这里还有另一种“解决方法”,希望它对您来说足够“合适”:

    将JSR223 PreProcessor 添加为您“想要”使用随机变量参数化的请求的子项

    将以下代码放入“脚本”区域:

    if (props.get('foo_' + vars.getIteration()) != null 
        props.put('foo_' + vars.getIteration(), org.apache.commons.lang3.RandomUtils.nextInt(0, 100))
    
    

    在需要时使用以下__groovy() function 引用“生成的”随机值:

    $__groovy(props.get('foo_' + vars.getIteration()),)
    

演示:

【讨论】:

好的,谢谢。我已将其标记为答案。我找不到任何其他解决方案。我以两种方式运行测试: 1. 正如你所说,我创建了 .csv 文件并从那里读取变量。 2.我添加了Counter元素,所有线程都相同,每次迭代更新一次

以上是关于在所有线程中使用相同的随机变量的主要内容,如果未能解决你的问题,请参考以下文章

多线程

在 C# 中使用线程填充随机数的数组

如何使进程与随机数量的活动线程同步?

线程同步

独立同分布(iid)

JMeter之随机变量的使用