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