是否可以使用JMeter生成UUID v1?

是否可以使用JMeter生成UUID v1?,jmeter,uuid,Jmeter,Uuid,我阅读了JMeter的手册,发现JMeter有一个uuid()函数。它允许为JMeter测试生成UUID类型4。是否可以在JMeter中生成UUIDv1,或者可能存在某个插件。在JMeter中,您可以添加JSR 223采样器选择Java语言并执行UUID版本1的Java代码: String timeuuid = com.datastax.driver.core.utils.UUIDs.timeBased().toString(); 然后将其添加到Jmeter变量: vars.put("my

我阅读了JMeter的手册,发现JMeter有一个uuid()函数。它允许为JMeter测试生成UUID类型4。是否可以在JMeter中生成UUIDv1,或者可能存在某个插件。

在JMeter中,您可以添加JSR 223采样器选择Java语言并执行UUID版本1的Java代码:

 String timeuuid = com.datastax.driver.core.utils.UUIDs.timeBased().toString();
然后将其添加到Jmeter变量:

 vars.put("myUUID", timeuuid);

我建议采取以下步骤:

  • 下载(例如从)并将.jar放到某个地方
  • 重新启动JMeter以拾取.jar
  • 完成后,您应该能够使用以下类似工具生成UUIDv1:

  • 演示:

    参考资料:


    首先,我们将生成64个最低和最高有效位作为长值:

    private static long get64LeastSignificantBitsForVersion1() {
        Random random = new Random();
        long random63BitLong = random.nextLong() & 0x3FFFFFFFFFFFFFFFL;
        long variant3BitFlag = 0x8000000000000000L;
        return random63BitLong + variant3BitFlag;
    }
     
    private static long get64MostSignificantBitsForVersion1() {
        LocalDateTime start = LocalDateTime.of(1582, 10, 15, 0, 0, 0);
        Duration duration = Duration.between(start, LocalDateTime.now());
        long seconds = duration.getSeconds();
        long nanos = duration.getNano();
        long timeForUuidIn100Nanos = seconds * 10000000 + nanos * 100;
        long least12SignificatBitOfTime = (timeForUuidIn100Nanos & 0x000000000000FFFFL) >> 4;
        long version = 1 << 12;
        return 
          (timeForUuidIn100Nanos & 0xFFFFFFFFFFFF0000L) + version + least12SignificatBitOfTime;
    }
    
    private static long get64LeastSignificantBitsForVersion1() {
        Random random = new Random();
        long random63BitLong = random.nextLong() & 0x3FFFFFFFFFFFFFFFL;
        long variant3BitFlag = 0x8000000000000000L;
        return random63BitLong + variant3BitFlag;
    }
     
    private static long get64MostSignificantBitsForVersion1() {
        LocalDateTime start = LocalDateTime.of(1582, 10, 15, 0, 0, 0);
        Duration duration = Duration.between(start, LocalDateTime.now());
        long seconds = duration.getSeconds();
        long nanos = duration.getNano();
        long timeForUuidIn100Nanos = seconds * 10000000 + nanos * 100;
        long least12SignificatBitOfTime = (timeForUuidIn100Nanos & 0x000000000000FFFFL) >> 4;
        long version = 1 << 12;
        return 
          (timeForUuidIn100Nanos & 0xFFFFFFFFFFFF0000L) + version + least12SignificatBitOfTime;
    }
    
    public static UUID generateType1UUID() {
     
        long most64SigBits = get64MostSignificantBitsForVersion1();
        long least64SigBits = get64LeastSignificantBitsForVersion1();
     
        return new UUID(most64SigBits, least64SigBits);
    }