2017-05-09 52 views
0

我試圖做的事:加載時jmeter錯誤SaveService.loadProperties();

我構建了一個加載測試計劃並運行該測試計劃的java服務。我沒有使用任何Bash腳本和jmeter GUI。 Java App是作爲一項服務構建的,因此可以在雲中運行。這個想法是,只是爲了創建一些直徑的交通數據。

當我在intellij(本地)上運行src時,一切正常。

啓動應用程序,一切OK。

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 

的文件也可位於下紙槽,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 Class打開文件嗎? 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

打開罐子,並檢查你有這樣的資源:在類路徑目錄或在罐子 – davidxxx

+0

根'JMeter的/ bin中/ saveservice.properties'其實,我已經把它運行到了雲端。 [最新評論](http://stackoverflow.com/questions/43863635/jmeter-error-on-load-saveservice-loadproperties#comment74851362_43867845) –

回答

0

SaveService class sourcesaveservice.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; 
} 

所以,你需要確保你有bin/saveservice.properties文件在你的JMeter的首頁,這樣按預期它會奏效。

如果您要將JMeter打包到您的解決方案中,您需要登錄unpack it somewhere才能使其正常工作。否則,您將需要修補前面提到的SaveService類,以便從資源文件中讀取屬性。

請參閱Five Ways To Launch a JMeter Test without Using the JMeter GUI文章,瞭解有關JMeter測試的程序化執行的更多信息以及一些示例。

+0

好的,要解壓一些在雲中不可能的地方,我們沒有文件服務馬上。另一點是在網絡中的每一處我​​發現與該調用的Java代碼:JMeterUtils.loadJMeterProperties(jMeterPropertiesPath);這沒有意義,因爲我不使用返回值。 –

+0

嗯,你實際上可以指定自定義* saveservice.properties *文件的位置,比如'System.setProperty(「saveservice_properties」,「/ path/to/saveservice/properties」);'但是它不會像JMeter那樣成爲故事的結尾需要一些更多的屬性文件,即'upgrade.properties',並且你將無法以這種方式玩這個技巧,就像JMeter增加一個額外的斜線,即使你重寫屬性 –

0

當文件位於Jar中時,無法使用File類打開文件。 它無法處理文件url中的感嘆號(!)。

如果這是你的問題,檢查這裏的解決方案: Accessing a file inside a .jar file

+0

不,那不是我知道的問題如何從classPath獲取文件。重點在於JMeter是在文件系統環境中使用的。我現在得到解決方案來在雲中運行我的服務。我將所有道具文件從容器移動到臨時文件夾,並將JMeter指向此路徑。 –