gpt4 book ai didi

java - 如何以编程方式为 JMeter 设置代理设置,而无需使用命令行运行它

转载 作者:太空宇宙 更新时间:2023-11-04 11:32:33 24 4
gpt4 key购买 nike

我需要使用 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 错误的片段:

The Java HTTP implementation has some limitations: There is no control over how connections are re-used. When a connection is >released by JMeter, it may or may not be re-used by the same thread. The API is best suited to single-threaded usage - various settings are defined >via system properties, and therefore apply to all connections. There is a bug in the handling of HTTPS via a Proxy (the CONNECT is not handled >correctly). See Java bugs 6226610 and 6208335. It does not support virtual hosts. It supports only the following methods: GET, POST, HEAD, OPTIONS, PUT, DELETE and >TRACE It does not support client based certificate testing with Keystore Config.

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

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

如果有任何帮助,我将不胜感激。

谢谢

伊格尔

最佳答案

假设您从单独 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();
}
}

关于java - 如何以编程方式为 JMeter 设置代理设置,而无需使用命令行运行它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43637786/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com