如何在不使用命令行运行JMeter的情况下以编程方式设置代理设置

时间:2017-04-26 14:57:39

标签: java proxy jmeter

我需要在代理后面使用Java以编程方式运行Jmeter。 问题在于我需要使用HTTPS来实现它。

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

我尝试了以下内容:(分别和所有在一起)

  1. 添加了具有代理服务器详细信息的HTTP请求默认配置
  2. 为每个HTTP请求添加了代理服务器详细信息
  3. 同时添加了https.proxyHost& https.proxyPort与代理服务器详细信息到system.properties文件找到... \ apache-jmeter-3.1 \ bin
  4. 我知道我可以使用带-H -P作为参数的命令行运行JMETER(可行)但这不是我使用JMeter的方式 - 我只是以编程方式使用它因此这不是一个选项。

    这是一个描述与我的问题相关的已知JAVA错误的片段:

      

    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”可以解决这个问题 - 所以我下载了它,唉它根本没用。

    我将不胜感激。

    感谢,

    人Yigal

1 个答案:

答案 0 :(得分:0)

鉴于您从单独的 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","");

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

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();
    }
}