JMeter -JSR 223以毫秒为单位获取当前时间

14ifxucb  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(330)

我尝试使用以下JSR 223采样器在一个简单的负载测试中计算SSE流量延迟:

EventHandler eventHandler = eventText -> {
  count++;
  // get the time from the server
  def result = eventText.substring(eventText.indexOf("data='") + 6, eventText.indexOf("', event")).trim() as Long;  
  def currenTime = System.currentTimeMillis();
  def diff = currenTime - result;
  list.add (diff);
  resp = resp + "Time from server:" + result + ", JMeter time:" + currenTime + ", diff:"+ diff +"\n";  
};

SSEClient sseClient = SSEClient.builder().url(pURL).eventHandler(eventHandler).build();

sseClient.start();

sleep(SLEEP_TIME);

sseClient.shutdown();

来自服务器(NodeJS -JavaScript)的时间是Date.now(),JMeter上的时间是System.currentTimeMillis()

服务器和JMeter在同一台计算机上。

看起来时间方法并不一致,因为我可以看到在某些情况下JMeter时间早于服务器时间:

所以我不能相信结果...
我应该在JavaScript端或JMeter端使用任何其他方法吗?

gxwragnw

gxwragnw1#

在任何情况下都不能相信结果,因为将被测系统和负载生成器放在同一台机器上并不是最好的主意,由于race conditions的原因,您将无法获得可靠的结果。
同样根据系统.currentTimeMillis()函数JavaDoc:
以毫秒为单位返回当前时间。请注意,虽然返回值的时间单位是毫秒,但值的粒度取决于底层操作系统,可能会更大。例如,许多操作系统以数十毫秒为单位测量时间
因此,如果要测量上一个SSE和下一个SSE之间的时间差,可以考虑使用System.nanoTime()
但是,最好将JMeter移动到另一台机器上,最好是Linux,因为那里的System.currentTimeMillis()函数的精度要高得多

相关问题