Jmeter 如何在beanshell从6小时开始进行弧下测试

Jmeter 如何在beanshell从6小时开始进行弧下测试,jmeter,beanshell,Jmeter,Beanshell,我正在使用jmeter保存应用程序的响应,我想使用beanshell后处理器从该时间中减去6小时 String timeforrequest = vars.get("response time"); import org.joda.time.DateTime; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; String inputDateString

我正在使用jmeter保存应用程序的响应,我想使用beanshell后处理器从该时间中减去6小时

   String timeforrequest = vars.get("response time");
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

String inputDateString = vars.get("response time"); //in the format "2013-10-26 09:36:00 AM "
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd hh:mm:ss a ");
DateTime time = formatter.parseDateTime(inputDateString);
DateTime newtime = time.minusHours(6);
vars.put("newtime", newtime.toString());
我们收到的时间格式如下

   "2013-10-26 09:36:00 AM "

您可以在beanshell处理器中使用常规java代码

   String timeforrequest = vars.get("response time");
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

String inputDateString = vars.get("response time"); //in the format "2013-10-26 09:36:00 AM "
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd hh:mm:ss a ");
DateTime time = formatter.parseDateTime(inputDateString);
DateTime newtime = time.minusHours(6);
vars.put("newtime", newtime.toString());
您可以从m2存储库下载joda time jar。

示例代码:

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;


String timeforrequest = vars.get("response time");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a");
Date before = sdf.parse(timeforrequest);
Calendar cal = Calendar.getInstance();
cal.setTime(before);
cal.add(Calendar.HOUR, -6);
Date after = cal.getTime();
String newtimeforrequest = sdf.format(after);
log.info("\n\n" + newtimeforrequest + "\n");
演示:

参考资料:

  • 类JavaDoc-我不能保证代码适用于所有日期和时间值,因为对于时钟以0和1开始的系统,格式可能不同。您可能需要修改我的SimpleDataFormat模式
  • 和类JavaDocs-有关所用方法的更多信息
  • -有关在JMeter测试中使用Beanshell脚本的一般信息

谢谢@RaGe,但我收到以下错误-jmeter.util.BeanShellInterpreter:调用bsh方法时出错:eval源文件:内联评估:``import java.time.format.DateTimeFormatter;导入java.time.LocalDateTime;进口…'':方法调用错误:在中找不到方法信息(java.time.LocalDateTime)是的,我正在使用java 8,很抱歉之前应该提到。嗯,您需要将包含
java.time
包的java JAR复制到
lib/ext
文件夹中,从而将其提供给jmeter。除了我不确定哪个JRE jar包含
java.time
。我正在更改我的答案以使用joda时间。您必须在
lib/ext
文件夹中放置一个joda time jar才能工作。仍在获取错误类型的变量声明:方法调用格式化程序。ParseDateTime您在my answer和@Dmitri T的answer的解析行中都遇到异常。显然,您在问题中给出的datetime模式与您试图解析的字符串不匹配。获取此错误:类型化变量声明:方法调用sdf.Parses还想指出,我使用的是beanshell后处理器,因为我获取的responsetime值不是您的
response time
变量值未设置或与2013-10-26 09:36:00 AM的模式不匹配。我的代码假定
响应时间
,请注意“响应”和“时间”之间的空格。抱歉,时间是2013年10月26日9:36:00,所以我更改了MM/dd/yyyyy hh:MM:ss a“但它仍然不起作用。您已经拥有了自己找出正确代码所需的一切。如果您甚至无法复制粘贴响应的一部分,我无法保证有效的解决方案