${__time} 函数输出不正确
${__time} function output is incorrect
我试图在 BeanShell 后处理器中使用格式为“${__time(yyyy-MM-dd)}”的 jmeter 时间函数获取今天的日期。但在执行 Beanshell 后处理器后,结果显示为“1996”。基本上 "time" 函数通过减去“2018-03-19”=1996 等值来显示结果。
请帮助我解决此问题,以便我可以获得当前日期和时间。
豆壳代码如下
import org.apache.jmeter.gui.GuiPackage;
import org.apache.commons.io.FilenameUtils;
String testPlanFile = GuiPackage.getInstance().getTestPlanFile();
String testPlanFileDir = FilenameUtils.getFullPathNoEndSeparator(testPlanFile);
vars.put("testPlanFileDir", testPlanFileDir);
//create the file in test plan file dir and print current time and Date
FileOutputStream f = new FileOutputStream(testPlanFileDir+"/CurrentDate.txt", true);
PrintStream p = new PrintStream(f);
this.interpreter.setOut(p);
//current date and time;
print("Current date is:"+${__time(yyyy-MM-dd)});
f.close();
您应该根据 JMeter 移动到 JSR223 后处理器 Best Practices:
Since JMeter 3.1, we advise switching from BeanShell to JSR223 Test Elements
在那之前你可以通过引用函数调用来修复它
print("Current date is:"+"${__time(yyyy-MM-dd)})";
此修复会将函数的 return 值视为字符串。
目前它将其视为数字减法:2018-3-19=1996,然后将其转换为字符串
将时间函数调用设置为预处理器的参数(顺便迁移到 JSR223 + Groovy 以提高性能)
然后将其与变量 Parameters:
一起使用
- 性能anti-pattern#1:假定您使用GuiPackage class you won't be able to execute your test in non-GUI mode, consider migrating to FileServer代替
- 性能anti-pattern #2:不推荐使用Beanshell,因为在高负载的情况下它可能成为瓶颈。因为 JMeter 3.1 it is recommended to use JSR223 Test Elements and Groovy language 任何形式的脚本
- 性能 anti-pattern #3:不要在脚本主体中内联 JMeter Variables or Functions 它们会破坏 Groovy 已编译脚本的缓存功能,并可能解析为会导致意外行为的内容(例如你的情况),编译失败甚至数据丢失。
所以:
- 添加 JSR223 PostProcessor 而不是 Beanshell
将以下代码放入"Script"区域:
String testPlanDir = org.apache.jmeter.services.FileServer.getFileServer().getBaseDir()
File currentDate = new File(testPlanDir + File.separator + "CurrentDate.txt")
currentDate << new Date().format("yyyy-MM-dd")
尝试使用 JSR223 后处理器 和语言 Groovy 并将其放入脚本区域:
def a = new Date().format('yyyy-MM-dd')
new File('Example.txt').withWriter('utf-8') {
writer -> writer.writeLine 'Current date is : ' + a.toString() }
(适用于 JMeter 4.0)
我试图在 BeanShell 后处理器中使用格式为“${__time(yyyy-MM-dd)}”的 jmeter 时间函数获取今天的日期。但在执行 Beanshell 后处理器后,结果显示为“1996”。基本上 "time" 函数通过减去“2018-03-19”=1996 等值来显示结果。 请帮助我解决此问题,以便我可以获得当前日期和时间。 豆壳代码如下
import org.apache.jmeter.gui.GuiPackage;
import org.apache.commons.io.FilenameUtils;
String testPlanFile = GuiPackage.getInstance().getTestPlanFile();
String testPlanFileDir = FilenameUtils.getFullPathNoEndSeparator(testPlanFile);
vars.put("testPlanFileDir", testPlanFileDir);
//create the file in test plan file dir and print current time and Date
FileOutputStream f = new FileOutputStream(testPlanFileDir+"/CurrentDate.txt", true);
PrintStream p = new PrintStream(f);
this.interpreter.setOut(p);
//current date and time;
print("Current date is:"+${__time(yyyy-MM-dd)});
f.close();
您应该根据 JMeter 移动到 JSR223 后处理器 Best Practices:
Since JMeter 3.1, we advise switching from BeanShell to JSR223 Test Elements
在那之前你可以通过引用函数调用来修复它
print("Current date is:"+"${__time(yyyy-MM-dd)})";
此修复会将函数的 return 值视为字符串。 目前它将其视为数字减法:2018-3-19=1996,然后将其转换为字符串
将时间函数调用设置为预处理器的参数(顺便迁移到 JSR223 + Groovy 以提高性能)
然后将其与变量 Parameters:
一起使用- 性能anti-pattern#1:假定您使用GuiPackage class you won't be able to execute your test in non-GUI mode, consider migrating to FileServer代替
- 性能anti-pattern #2:不推荐使用Beanshell,因为在高负载的情况下它可能成为瓶颈。因为 JMeter 3.1 it is recommended to use JSR223 Test Elements and Groovy language 任何形式的脚本
- 性能 anti-pattern #3:不要在脚本主体中内联 JMeter Variables or Functions 它们会破坏 Groovy 已编译脚本的缓存功能,并可能解析为会导致意外行为的内容(例如你的情况),编译失败甚至数据丢失。
所以:
- 添加 JSR223 PostProcessor 而不是 Beanshell
将以下代码放入"Script"区域:
String testPlanDir = org.apache.jmeter.services.FileServer.getFileServer().getBaseDir() File currentDate = new File(testPlanDir + File.separator + "CurrentDate.txt") currentDate << new Date().format("yyyy-MM-dd")
尝试使用 JSR223 后处理器 和语言 Groovy 并将其放入脚本区域:
def a = new Date().format('yyyy-MM-dd')
new File('Example.txt').withWriter('utf-8') {
writer -> writer.writeLine 'Current date is : ' + a.toString() }
(适用于 JMeter 4.0)