【问题标题】:How can I set proxy settings programatically for JMeter without running it using command line如何以编程方式为 JMeter 设置代理设置而不使用命令行运行它
【发布时间】:2017-09-24 01:38:36
【问题描述】:

我需要在代理后面使用 Java 以编程方式运行 Jmeter。 问题在于我需要使用 HTTPS 来做到这一点。

我已阅读手册:http://jmeter.apache.org/usermanual/get-started.html 我已经使用 Jmeter 几个月了,感觉很舒服,但是当我需要切换到 HTTPS 时问题就开始了。

我尝试了以下方法:(单独和一起)

  1. 添加了带有代理服务器详细信息的 HTTP 请求默认配置
  2. 为每个 HTTP 请求添加了代理服务器详细信息
  3. 将带有代理服务器详细信息的 https.proxyHost 和 https.proxyPort 添加到位于 ...\apache-jmeter-3.1\bin 的 system.properties 文件中

我知道我可以使用带有 -H -P 作为参数的命令行运行 JMETER(有效),但这不是我使用 JMeter 的方式 - 我只以编程方式使用它,因此这不是选项。

这是一个描述与我的问题相关的已知 JAVA 错误的 sn-p:

Java HTTP 实现有一些限制: 无法控制如何重新使用连接。当一个连接被 JMeter 释放时,它可能会也可能不会被同一个线程重用。 API 最适合单线程使用 - 各种设置 > 通过系统属性定义,因此适用于所有连接。 通过代理处理 HTTPS 存在错误(未正确处理 CONNECT)。请参阅 Java 错误 6226610 和 6208335。 它不支持虚拟主机。 它仅支持以下方法:GET、POST、HEAD、OPTIONS、PUT、DELETE 和 >TRACE 它不支持使用 Keystore Config 进行基于客户端的证书测试。

错误链接:http://bugs.java.com/view_bug.do?bug_id=6226610

我已经阅读了这个错误,发现“Java SE Development Kit 8u131”可以解决这个问题 - 所以我下载了它,可惜它根本没有帮助。

我将不胜感激。

谢谢,

伊格尔

【问题讨论】:

    标签: java proxy jmeter


    【解决方案1】:

    如果您从一个单独的 Java 程序运行JMeter,您需要将代理参数传递给这个Java 程序。有几种方法可以做到这一点,请查看我们的Java Networking and Proxies 文章以获取全面信息,您似乎喜欢通过代码完成所有操作,因此只需在启动 JMeter 测试之前添加以下行:

    System.setProperty("http.proxyHost","your_proxy_host");
    System.setProperty("http.proxyPort", "your_proxy_port");
    System.setProperty("https.proxyHost","your_proxy_host");
    System.setProperty("https.proxyPort","your_proxy_port");
    System.setProperty("http.nonProxyHosts","");
    

    以防万一完整的代码演示如何使用JMeter APIJMeter's HTTP(S) Test Script Recorder 作为代理run an existing JMeter test

    import org.apache.jmeter.engine.StandardJMeterEngine;
    import org.apache.jmeter.reporters.ResultCollector;
    import org.apache.jmeter.reporters.Summariser;
    import org.apache.jmeter.save.SaveService;
    import org.apache.jmeter.util.JMeterUtils;
    import org.apache.jorphan.collections.HashTree;
    
    import java.io.File;
    
    public class JMeterFromCode {
    
        public static void main(String[] argv) throws Exception {
    
    
            //Define JVM Proxy Settings
            System.setProperty("http.proxyHost", "localhost");
            System.setProperty("http.proxyPort", "8888");
            System.setProperty("https.proxyHost", "localhost");
            System.setProperty("https.proxyPort", "8888");
            System.setProperty("http.nonProxyHosts", "");
    
            // JMeter Engine
            StandardJMeterEngine jmeter = new StandardJMeterEngine();
    
            // Initialize Properties, logging, locale, etc.
            JMeterUtils.loadJMeterProperties("/tmp/jmeter/bin/jmeter.properties");
            JMeterUtils.setJMeterHome("/tmp/jmeter");
            JMeterUtils.initLocale();
    
    
            // Initialize JMeter SaveService
            SaveService.loadProperties();
    
            // Load existing .jmx Test Plan
            HashTree testPlanTree = SaveService.loadTree(new File("/tmp/jmeter/bin/test.jmx"));
    
            Summariser summer = null;
            String summariserName = JMeterUtils.getPropDefault("summariser.name", "summary");
            if (summariserName.length() > 0) {
                summer = new Summariser(summariserName);
            }
    
            ResultCollector logger = new ResultCollector(summer);
            logger.setFilename("/tmp/jmeter/test.jtl");
            testPlanTree.add(testPlanTree.getArray()[0], logger);
    
    
            // Run JMeter Test
            jmeter.configure(testPlanTree);
            jmeter.run();
        }
    }
    

    【讨论】:

    • 嗨德米特里,它没有工作。我试过了,但仍然没有成功通过使用 https 的代理后面的代码运行 Jmeter。还有其他想法吗?
    • 我喜欢it doesn't work 这样的问题和问题,仅此而已。你对我有什么期望?您是否愿意至少在 JMeter 中打开调试日志并查看 jmeter.log 文件,如果您无法找出其中的原因,请使用该信息更新您的问题?
    • 对此我很抱歉。
    • 工作正常。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    • 2015-05-25
    • 2012-11-24
    • 2011-01-19
    • 2021-11-25
    • 1970-01-01
    相关资源
    最近更新 更多