加载时的jmeter错误SaveService.loadProperties();

时间:2017-05-09 07:23:10

标签: java jmeter

我尝试做什么:

我构建了一个加载测试计划并运行该测试计划的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();

2 个答案:

答案 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