JMeter豆壳采样器错误“;。。。在类';java.nio.file.path“;复制文件时
我试图使用JMeter3.0(JavaV1.8)中的BeanShell采样器在本地机器(Win7)上复制和重命名一个文件。其思想是创建具有唯一名称的新文件,并将该名称保存为变量,该变量可用于在FTP PUT请求中替代文件名 以下是我用于复制和重命名的代码:JMeter豆壳采样器错误“;。。。在类';java.nio.file.path“;复制文件时,java,jmeter,beanshell,Java,Jmeter,Beanshell,我试图使用JMeter3.0(JavaV1.8)中的BeanShell采样器在本地机器(Win7)上复制和重命名一个文件。其思想是创建具有唯一名称的新文件,并将该名称保存为变量,该变量可用于在FTP PUT请求中替代文件名 以下是我用于复制和重命名的代码: import java.text.*; import java.nio.file.StandardCopyOption.*; import java.io.IOException; import java.nio.file.Files; im
import java.text.*;
import java.nio.file.StandardCopyOption.*;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
String filename = new SimpleDateFormat("dd-MM-yyyy_hh:mm:ss").format(new Date())+".xlsx";
log.info(filename);
Path source = Paths.get("C:/dropfile/qatp/QATP_GuestRecords.xlsx");
Path target = Paths.get("C:/dropfile/qatp/"+filename);
Files.copy(source, target, REPLACE_EXISTING);
我在日志中收到的错误:
错误-jmeter.util.BeanShellInterpreter:调用bsh方法时出错:
eval源文件:内联计算:``import java.text。;进口
java.nio.file.StandardCopyOption。;导入java.io.io…“”:打字
变量声明:方法调用中出错:静态方法get(
在类“java.nio.file.path”中找不到java.lang.String)
我一直在寻找这个问题的答案,并遇到了一个:
“我猜问题在于它没有填充varargs参数。请尝试:
Path target = Paths.get(filename, new String[0]);"
我通过如下方式修改代码来尝试此解决方案:
import java.text.*;
import java.nio.file.StandardCopyOption.*;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
String filename = new SimpleDateFormat("dd-MM-yyyy_hh:mm:ss").format(new Date())+".xlsx";
log.info(filename);
Path source = Paths.get("C:/dropfile/qatp/QATP_GuestRecords.xlsx", new String[0]);
Path target = Paths.get("C:/dropfile/qatp/"+filename, new String[0]);
Files.copy(source, target, REPLACE_EXISTING);
并收到此错误:
错误-jmeter.util.BeanShellInterpreter:调用bsh方法时出错:
eval源文件:内联计算:``import java.text.;import
java.nio.file.StandardCopyOption.;导入java.io.io…'':键入
变量声明:方法调用路径.get
有人知道我为什么会遇到这个错误以及如何避免它吗?即使在普通的旧Java中,这也是对路径的误导性使用。get,它采用URI或字符串数组(varargs) 在Java中,您尝试的方法是有效的,因为静态类型允许编译器确定您传递的是单个字符串的数组。显然,BeanShell没有这样做,并且会感到困惑。在我看来,另一个答案中建议的技巧并不好:在Java中,通过连接两个字符串,同样有效(第二个是空的,所以结果是第一个字符串,这是您想要的),但它仍然混淆了BeanShell,因为还有另一个静态
get
方法,它接受两个参数
如果已将路径设置为单个字符串,请尝试以下操作:
Path source = new File("C:/dropfile/qatp/QATP_GuestRecords.xlsx").toPath();
或者,您可以使用路径。如下所示:
Path source = Paths.get("C:", "dropfile", "qatp", "QATP_GuestRecords.xlsx");
或者像这样(varargs是syntaxic sugar,用于帮助传递数组):
将路径片段作为参数传递或将整个路径字符串作为单个参数传递是完全有效的,但这似乎会使BeanShell受挫,因此,最好避免使用路径。在BeanShell中获取,除非像上一个示例那样显式传递数组。即使在普通的旧Java中,这也是对路径的误导性使用。获取,这需要URI或字符串数组(varargs)
在Java中,您尝试的方法是有效的,因为静态类型允许编译器确定您传递的是单个字符串的数组。显然,BeanShell没有这样做,并且会感到困惑。在我看来,另一个答案中建议的技巧并不好:在Java中,通过连接两个字符串,同样有效(第二个是空的,所以结果是第一个字符串,这是您想要的),但它仍然混淆了BeanShell,因为还有另一个静态get
方法,它接受两个参数
如果已将路径设置为单个字符串,请尝试以下操作:
Path source = new File("C:/dropfile/qatp/QATP_GuestRecords.xlsx").toPath();
或者,您可以使用路径。如下所示:
Path source = Paths.get("C:", "dropfile", "qatp", "QATP_GuestRecords.xlsx");
或者像这样(varargs是syntaxic sugar,用于帮助传递数组):
将路径片段作为参数传递或将整个路径字符串作为单个参数传递是完全有效的,但这似乎会使BeanShell受挫,因此,最好避免使用路径。在BeanShell中获取,除非像上一个示例那样显式传递数组。BeanShell!=Java,它不支持所有Java功能(将其视为Java 1.5,并适当修改代码
所以我建议切换到和语言,Groovy更符合Java,性能更好
还请注意,您可以使用它,它将同时适用于Beanshell和/或Groovy
import org.apache.commons.io.FileUtils;
import java.text.SimpleDateFormat;
String filename = new SimpleDateFormat("dd-MM-yyyy_hh:mm:ss").format(new Date()) + ".xlsx";
FileUtils.copyFile(new File("/tmp/QATP_GuestRecords.xlsx"), new File("/tmp/" + filename));
有关在JMeter测试脚本中使用Groovy语言的更多信息,请参阅本文。Beanshell!=Java,它不支持所有Java特性(将其视为Java 1.5,并适当修改代码)
所以我建议切换到和语言,Groovy更符合Java,性能更好
还请注意,您可以使用它,它将同时适用于Beanshell和/或Groovy
import org.apache.commons.io.FileUtils;
import java.text.SimpleDateFormat;
String filename = new SimpleDateFormat("dd-MM-yyyy_hh:mm:ss").format(new Date()) + ".xlsx";
FileUtils.copyFile(new File("/tmp/QATP_GuestRecords.xlsx"), new File("/tmp/" + filename));
有关在JMeter测试脚本中使用Groovy语言的更多信息,请参阅本文