如何通过java代码运行jmeter时传递自定义属性而不编辑jmx文件

时间:2017-09-12 18:44:42

标签: java jmeter

我尽了最大努力,但我没有找到解决方案的运气。基本上我需要通过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();
    }
}

1 个答案:

答案 0 :(得分:2)

你可以使用" normal" Java System Properties为此,可以通过不同的方式设置它们:

  • 通过 system.properties 文件(位于JMeter安装的" bin"文件夹中
  • 通过传递给Java可执行文件的-D command-line argument

    java -Dfoo=bar -jar /path/to/your/test.jar
    
  • 通过调用System.setProperty()方法

    来通过Java代码
    System.setProperty("foo", "bar");
    

在所有情况下,您都应该能够访问属性值${__P(foo,)}(确保在项目类路径中包含ApacheJMeter_functions.jar

更多信息: