2017-04-26 78 views
1

我需要使用代理之後的Java以編程方式運行Jmeter。 問題在於我需要使用HTTPS來做到這一點。如何以編程方式爲JMeter設置代理設置而無需使用命令行運行它

我已閱讀手冊:http://jmeter.apache.org/usermanual/get-started.html 我已經使用Jmeter幾個月了,感覺很舒服,但是當我需要切換到HTTPS時,問題就開始了。

我曾嘗試以下:(單獨和一起)

  1. 添加與代理服務器細節
  2. 添加了代理服務器的詳細信息到每個HTTP請求
  3. 添加了一個HTTP請求默認值配置https.proxyHost &將https.proxyPort與代理服務器的詳細信息發送到位於... \ apache-jmeter-3.1 \ bin中的system.properties文件

我知道我可以使用-H -P作爲參數(這有效)使用命令行來運行JMETER,但這不是我如何使用JMeter - 我僅以編程方式使用它,因此這不是一個選項。

這是描述與我的問題已知的Java缺陷的代碼段:

Java的HTTP實現有一定的侷限性: 有過怎樣被重新使用的連接沒有控制權。當連接被JMeter釋放時,它可能被相同的線程重新使用或不被重用。 API最適合單線程使用 - 通過系統屬性定義各種設置,因此適用於所有連接。 通過代理處理HTTPS時存在一個錯誤(CONNECT未正確處理)。請參閱Java錯誤6226610和6208335. 它不支持虛擬主機。 它僅支持以下方法:GET,POST,HEAD,OPTIONS,PUT,DELETE和> TRACE 它不支持使用密鑰存儲配置進行基於客戶端的證書測試。

錯誤鏈接:http://bugs.java.com/view_bug.do?bug_id=6226610

我讀過的bug,看到「Java SE的開發工具包8u131」將解決這個問題 - 所以我下載了它,可惜它並沒有幫助的。

我將不勝感激任何幫助。

感謝,

人Yigal

回答

0

給你從你需要代理的參數傳遞給該的Java程序的單獨 Java程序運行JMeter的。有關於如何可以這樣做多種方式,檢查我們的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(); 
    } 
} 
+0

德米特里嗨,它沒有工作。我試過了,但仍然沒有成功,通過代理使用https運行代碼。任何其他想法? –

+0

我喜歡「它不工作」的問題和評論,就是這樣。你對我有什麼期望?你會如此友好,至少打開JMeter中的調試日誌,並查看* jmeter.log *文件,如果你沒有找出原因,用這些信息更新你的問題? –

+0

對此我很抱歉。 –

相關問題