获取JMeter负载测试的开始时间、结束时间和测试持续时间



我需要捕获JMeterLoad测试的StartTime(格式:2021-04-28T12:09:09000009(、EndTime(格式为:2021-04-2 8T12:09:09 000009(和测试持续时间(毫秒(。我计划在Jsr223Sampler中的SetupThreadGroup中捕获StartTime(格式:2021-04-28T12:09:09000009(和EndTime;tearDownThreadGroup中的持续时间,使用以下代码。

---设置线程

def now = new Date()
def starttime = now.format("yyyy-MM-dd'T'HH:mm:ss.ssssss", TimeZone.getTimeZone('UTC'))
vars.put("StartTime", starttime)

---TearDownThreadGroup

def now = new Date()
def endtime = now.format("yyyy-MM-dd'T'HH:mm:ss.ssssss", TimeZone.getTimeZone('UTC'))
vars.put("EndTime", endtime)
def diff = vars.get("StartTime")-endtime

低于错误

2021-04-28 18:17:11,475 ERROR o.a.j.p.j.s.JSR223Sampler: Problem in JSR223 script GetEndTime_Duration, message: javax.script.ScriptException: java.lang.NullPointerException: Cannot invoke method minus() on null object
javax.script.ScriptException: java.lang.NullPointerException: Cannot invoke method minus() on null object

您已经在变量TESTSTART.MS中保存了开始时间,您可以在脚本中使用它,例如

long starttime = Long.valueOf(vars.get("TESTSTART.MS"))
def now = new Date()
def endtime = now.format("yyyy-MM-dd'T'HH:mm:ss.ssssss", TimeZone.getTimeZone('UTC'))
vars.put("EndTime", endtime) 
def diff = now.getTime() - starttime
log.info String.valueOf(diff)

您的脚本存在多个问题:

  1. 您使用的是代表JMeterVariables类实例的vars简写,根据JMeter文档

    属性与变量不同变量是线程的本地变量;属性对所有线程都是通用的,需要使用__P或__property函数来引用

    因此您应该使用props而不是vars,请参阅Groovy应该使用的前8个JMeter Java类,以了解有关这些人手不足的的更多信息

  2. 您正在减去2个字符串

  3. 您正在从较低值(开始时间(中减去较大值(结束时间(

我的期望是,在设置线程组中,您应该使用以下代码:

def starttime = System.currentTimeMillis()
props.put("StartTime", starttime)

和在拆卸线程组中:

def endtime = System.currentTimeMillis()
def diff = endtime - props.get('StartTime')
log.info('Diff: ' + diff)

最新更新