捕获两个正则表达式引用名称的值之间的时间差(以 Jmeter 为单位)



我在JMeter测试计划中定义了正则表达式,并且能够在user.variables中捕获简单变量中的值。但是我正在尝试在 Beanshell 后处理器中计算两个变量之间的时间差,如下所示,但我的报告中没有得到任何结果。

import javax.xml.bind.DatatypeConverter;
vars.put("old_date_submitted", "submittedDate"); // submittedDate, succeeddedDate and runningDates are regular expr. reference names
vars.put("old_date_succeeded", "succeededDate"); 
vars.put("old_date_running", "runningDate");
Calendar cal_s =       DatatypeConverter.parseDateTime(vars.get("old_date_submitted"));
Calendar cal_c = DatatypeConverter.parseDateTime(vars.get("old_date_succeeded"));
Calendar cal_r = DatatypeConverter.parseDateTime(vars.get("old_date_running"));
Date new_date1 = cal_s.getTime(); // submitted Time
Date new_date2 = cal_c.getTime(); // succeeded Time
Date new_date3 = cal_r.getTime(); // running Time
long new_date1_ms = new_date1.getTime(); // submitted Time
long new_date2_ms = new_date2.getTime();
long new_date3_ms = new_date3.getTime();
log.info("Date in milliseconds: " + new_date1_ms);
long delta1 = new_date2_ms - new_date1_ms; //calculate the difference (succeededDate - submittedDate)
long delta2 = new_date3_ms - new_date1_ms; //calculate the difference (runningDate - submittedDate)
vars.put("delta1", String.valueOf("delta1")); // store the result into a JMeter Variable
vars.put("delta2", String.valueOf("delta2")); // store the result into a JMeter Variable 

这个位:

vars.put("old_date_submitted", "submittedDate"); // submittedDate, succeeddedDate and runningDates are regular expr. reference names
vars.put("old_date_succeeded", "succeededDate"); 
vars.put("old_date_running", "runningDate");

对我来说似乎很奇怪。鉴于:

提交日期、成功日期和运行日期是常规表达式。 引用名称

我的期望是你应该在那里使用 JMeter 变量而不是硬编码的字符串,所以你应该将代码更改为如下所示:

vars.put("old_date_submitted", vars.get("submittedDate")); // submittedDate, succeeddedDate and runningDates are regular expr. reference names
vars.put("old_date_succeeded", vars.get("succeededDate")); 
vars.put("old_date_running", vars.get("runningDate"));

所以很可能你的代码在DatatypeConverter.parseDateTime失败了。

下次遇到 Beanshell 脚本的任何问题时,请考虑以下故障排除技术:

  1. 检查 jmeter.log 文件 - 如果 Beanshell 脚本失败,错误将打印在那里
  2. debug();指令添加到 Beanshell 脚本的最开头 - 它将触发调试输出到 stdout
  3. 把你的 Beanshell 代码放在 try/catch 块中,如下所示:

    try {
        //your code here
    }
    catch (Throwable ex) {
        log.error("Something went wrong", ex);
        throw ex;
    }
    

    通过这种方式,您可以获得更多"人性化"的堆栈跟踪打印到 jmeter.log 文件。

请参阅如何使用 BeanShell:JMeter 最喜欢的内置组件指南,了解有关在 JMeter 测试中使用 Beanshell 的更多信息。

最新更新