我尝试做什么:
我构建了一个加载测试计划并运行该测试计划的java服务。我没有使用任何Bash脚本和jmeter GUI。 Java App构建为服务,因此可以在云中运行。想法是,只是为了创建一些直径的交通数据。
当我在intellij(本地)上运行src时,一切正常。
启动应用,一切正常。
java -jar -Dserver.port=8090 diameter-service-0.0.1-SNAPSHOT.jar
运行REST请求:
localhost:8090/api/v1/encode
请求后我得到以下错误:
java.io.FileNotFoundException: file:/Users/myuser/Downloads/diameter-service-0.0.1-SNAPSHOT.jar!/jmeter/bin/saveservice.properties (No such file or directory)
我检查的第一件事是jMeter Home。 系统在控制台上输出:
HOME: file:/Users/myuser/Downloads/diameter-service-0.0.1-SNAPSHOT.jar!/jmeter
这些文件也可用,位于bin之下,并且在类路径中为slo。
/src/main/resources/jmeter/bin/saveservice.properties
/src/main/resources/jmeter/bin/jmeter.properties
/src/main/resources/jmeter/bin/user.properties
我认为jMeter Home路径没问题。 ..或者这是一个错误的推定? 方式jMeter无法加载saveservice.properties?
那是因为jmeter尝试用FILE类打开文件吗? java如何加载saveservice.properties?或者这不是必要的,因为jMeter Home已经设置好了吗?
private static final String jMeterHomePath = "/jmeter";
private static final String jMeterPropertiesFile = jMeterHomePath + "/bin/jmeter.properties";
...
File propertiesFile = FileStreamUtil.jMeterPropertiesToTempFile(jMeterPropertiesFile);
String jMeterPropertiesPath = propertiesFile.getPath();
StandardJMeterEngine jMeter = new StandardJMeterEngine(); JMeterUtils.setJMeterHome(Encoder.class.getResource(jMeterHomePath).getPath());
JMeterUtils.loadJMeterProperties(jMeterPropertiesPath);
JMeterUtils.initLogging();
JMeterUtils.initLocale();
String home = JMeterUtils.getJMeterHome();
System.out.println("HOME: "+home);
SaveService.loadProperties();
答案 0 :(得分:0)
根据SaveService class source saveservice.properties
文件的内容如下:
// some code
private static final String SAVESERVICE_PROPERTIES_FILE = "/bin/saveservice.properties";
// Property name used to define file name
private static final String SAVESERVICE_PROPERTIES = "saveservice_properties"; // $NON-NLS-1$
// some more code
public static Properties loadProperties() throws IOException{
Properties nameMap = new Properties();
try (FileInputStream fis = new FileInputStream(JMeterUtils.getJMeterHome()
+ JMeterUtils.getPropDefault(SAVESERVICE_PROPERTIES, SAVESERVICE_PROPERTIES_FILE))){
nameMap.load(fis);
}
return nameMap;
}
因此,您需要确保在JMeter Home下有bin/saveservice.properties
个文件,这样它将按预期工作。
如果您将JMeter打包到解决方案中,则需要unpack it somewhere才能使其正常运行。否则,您将需要修补前面提到的SaveService类,以便它从资源文件中读取属性。
有关JMeter测试程序化执行的更多信息,请参阅Five Ways To Launch a JMeter Test without Using the JMeter GUI文章。
答案 1 :(得分:0)
当该文件位于Jar中时,无法使用File类打开文件。 它无法处理文件URL中的感叹号(!)。
如果这是您的问题,请在此处检查解决方案: Accessing a file inside a .jar file