簡體   English   中英

通過Java代碼運行jmeter時如何在不編輯jmx文件的情況下傳遞自定義屬性

[英]How to pass custom property when running jmeter via java code without editing the jmx file

我已經盡力了,但是我沒有運氣尋找解決方案。 基本上,我需要通過java代碼運行Jmeter時傳遞自定義屬性 ,而不在jmx文件中添加任何內容(就像通過命令行運行時一樣)。 我有一些嘗試過的jmeter屬性函數(StandardJmeterEngine setProperty,JmeterUtils setProperty),但仍然無濟於事。 我已經看到了一些解決方案,例如將屬性文件傳遞給代碼,但是似乎未讀取屬性文件。

順便說一句,最簡單的方法是通過Java代碼與屬性一起創建jmx文件,但是在運行現有jmx文件時需要傳遞該屬性。

public class TestRunJmxJava {

    @Test
    public static void executeScript() throws IOException, BiffException, JMeterEngineException {

        String slash = System.getProperty("file.separator");
        StandardJMeterEngine jmeter = new StandardJMeterEngine();

        String jmeterPath = "C:"+slash+"jmeter"+slash+"bin"+slash+"jmeter.properties";
        String uPath = "C:"+slash+"jmeter"+slash+"bin"+slash+"jd.properties";

        System.out.println(jmeterPath);

        JMeterUtils.setJMeterHome("C:\\jmeter");
        JMeterUtils.loadJMeterProperties(jmeterPath);
        JMeterUtils.loadProperties(uPath);

        JMeterUtils.getSearchPaths();
        JMeterUtils.initLogging();
        JMeterUtils.initLocale();

        SaveService.loadProperties();

        File in = new File(System.getProperty("user.dir")+slash+"jmxfolder"+slash+"TestJmeterRun.jmx");
        HashTree testPlanTree = SaveService.loadTree(in);

        jmeter.configure(testPlanTree);
        FileServer.getFileServer().setBasedir(System.getProperty("user.dir")+slash+"jmxfolder");
        System.out.println(FileServer.getFileServer().getBaseDir());

        Summariser summer = null;
        String summariserName = JMeterUtils.getPropDefault("summariser.name", "summary");//$NON-NLS-1$
        if (summariserName.length() > 0) {
            summer = new Summariser(summariserName);
        }

        String logFile = "C:\\Users\\JD\\Desktop\\sample2.jtl";

        ResultCollector logger = new ResultCollector(summer);
        logger.setFilename(logFile);

        testPlanTree.add(testPlanTree.getArray()[0], logger);

        jmeter.run();
        jmeter.exit();
    }
}

您可以為此使用“常規” Java系統屬性 ,可以用不同的方式設置它們:

  • 通過system.properties文件(位於JMeter安裝的“ bin”文件夾中
  • 通過-D命令行參數傳遞給Java可執行文件

     java -Dfoo=bar -jar /path/to/your/test.jar 
  • 通過調用System.setProperty()方法通過Java代碼

     System.setProperty("foo", "bar"); 

在所有情況下,您都應該能夠訪問${__P(foo,)}類的屬性值(確保在項目類路徑中包含ApacheJMeter_functions.jar )。

更多信息:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM