13

我有一个 Jmeter 线程组,它在uuid整个过程中多次使用该变量。

uuid定义为12345678-1234-4444-a123-${__Random(111111111111,999999999999)}

换句话说,它从一个固定的系列开始12345678-1234-4444-a123-,然后随机化最后十二个字符。

我想同时运行多个线程,这会产生以下问题。

当我uuid在线程组中定义为用户定义的变量时,它会随机化一次,然后将该值用于我的所有线程。如果我将其设置为全局,也会发生同样的事情。

完成后我将同时运行数千个线程,因此我无法手动解决或读/写磁盘。

有没有人有这方面的经验?我已经通过文档和谷歌很长一段时间了,但似乎找不到解决方案。

简而言之:我需要随机化一个变量,在整个线程组中使用该变量,并在多个同时线程中运行该线程组。该变量应该在每个不同的线程中具有不同的随机值。

4

2 回答 2

24

假设您可以简单地使用随机变量配置元素:

Variable Name:     uuid
Output Format:     12345678-1234-4444-a123-000000000000
Minimum Value:     111111111111
Maximum Value:     999999999999
Per Thread (User): True

产生的价值

  • 可以访问为${uuid};
  • 每个线程都是唯一的;
  • 在每个线程的不同采样器调用流之间保留(在每个引用期间不重新生成);
  • 在线程组的每次迭代期间生成。
Test Plan
    Thread Group
        Random Variable
        ...
        Sampler 1
        Sampler 2
        ...

例如


iteration: 1
    thread: 1
        sampler 1: VALUE_1-1
        sampler 2: VALUE_1-1
        ...
    thread: 2
        sampler 1: VALUE_2-1
        sampler 2: VALUE_2-1
        ...
    ...
iteration: 2
    thread: 1
        sampler 1: VALUE_1-2
        sampler 2: VALUE_1-2
        ...
    thread: 2
        sampler 1: VALUE_2-2
        sampler 2: VALUE_2-2
        ...
    ...

为上面给出的模式实现的示例脚本:rnd-var.jmx


根据随机变量Random Seed的字段描述:

默认是以毫秒为单位的当前时间。如果您使用相同的种子值并将 Per Thread 设置为 true,您将根据 Random 类为每个 Thread 获得相同的值。

如果使用相同的种子创建 Random 的两个实例,并且为每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。

在实现高并发场景时请记住这一点(如下面的评论中所述)。为了克服这个问题,您可以使用随机化种子,例如${__Random(MIN,MAX)}作为Seed for Random function字段值。

于 2013-05-22T15:05:22.593 回答
2

就放

12345678-1234-4444-a123-${__Random(111111111111,999999999999)}

在您需要的地方内联。

如果你把它放在你的 UDV 组件中,值只分配一次,甚至在线程启动之前。根据 jmeter 文档,该行为是可以的。请仔细阅读。

于 2019-05-20T08:59:15.360 回答