我需要在代理后面使用Java以编程方式运行Jmeter。 问题在于我需要使用HTTPS来实现它。
我已阅读手册:http://jmeter.apache.org/usermanual/get-started.html 我现在已经使用Jmeter几个月了,感觉很舒服但是当我需要切换到HTTPS时问题就出现了。
我尝试了以下内容:(分别和所有在一起)
我知道我可以使用带-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
答案 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();
}
}