Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java load SaveService.loadProperties()上的jmeter错误;_Java_Jmeter - Fatal编程技术网

Java load SaveService.loadProperties()上的jmeter错误;

Java load SaveService.loadProperties()上的jmeter错误;,java,jmeter,Java,Jmeter,我想做的是: 我构建了一个java服务,加载一个测试计划并运行该测试计划。我没有使用任何Bash脚本和jmeter GUI。java应用程序是作为服务构建的,因此可以在云中运行。我们的想法是,仅仅创建一些直径交通数据 当我在intellij(本地)上运行src时,一切正常 启动应用程序,一切正常 java -jar -Dserver.port=8090 diameter-service-0.0.1-SNAPSHOT.jar 运行REST请求: localhost:8090/api/v1/enc

我想做的是:

我构建了一个java服务,加载一个测试计划并运行该测试计划。我没有使用任何Bash脚本和jmeter GUI。java应用程序是作为服务构建的,因此可以在云中运行。我们的想法是,仅仅创建一些直径交通数据

当我在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: 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主路径是可以的。。或者这是一个错误的假设? 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();
根据
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打包到您的解决方案中,您将需要这样做才能使它工作。否则,您将需要修补前面提到的SaveService类,以便它从资源文件中读取属性


有关JMeter测试的编程执行以及一些示例的更多信息,请参阅本文

当文件位于Jar中时,无法打开文件类为file的文件。 它无法处理文件url中的感叹号(!)

如果这是您的问题,请在此处查看解决方案:

打开jar并检查您是否拥有以下资源:
jmeter/bin/saveservice.properties
在classpath目录中或jar的根目录下实际上,我已经让它运行到了云端。好的,要在云中解包一些不可能的地方,我们现在没有文件服务。另一点是我在web上的每一个地方都找到了带有该调用的java代码:JMeterUtils.loadJMeterProperties(jMeterPropertiesPath);这没有意义,因为我没有使用返回值但是,这并不是故事的结尾,因为JMeter需要更多的属性文件,即升级.properties,您将无法使用它来玩这个把戏,因为JMeter会向它添加一个额外的斜杠,即使您重写propertyNo,这不是我知道如何从类路径获取文件的问题。关键是JMeter是为在文件系统环境中使用而构建的。我现在得到了在云中运行服务的解决方案。我将所有道具文件从容器移动到临时文件夹,并将JMeter指向该路径。