Java Jmeter 2.10 HTTP 记录器抛出 keytool 异常

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/19550472/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-12 18:16:30  来源:igfitidea点击:

Jmeter 2.10 HTTP recorder throws keytool exception

javaapachejmeter

提问by hhcib

I am trying to investigate jmeter and have quickly run into some problems. I am attempting to follow the tutorial at http://jmeter.apache.org/usermanual/jmeter_proxy_step_by_step.pdf. When I attempt to start the recorder I get a cannot create proxy error. The logs give me this message:

我正在尝试调查 jmeter 并很快遇到了一些问题。我正在尝试按照http://jmeter.apache.org/usermanual/jmeter_proxy_step_by_step.pdf 上的教程进行操作。当我尝试启动记录器时,出现无法创建代理错误。日志给了我这条消息:

2013/10/23 13:40:54 INFO  - jmeter.util.JsseSSLManager: Using default SSL protocol: TLS 
2013/10/23 13:40:54 INFO  - jmeter.util.JsseSSLManager: SSL session context: per-thread 
2013/10/23 13:54:32 WARN  - jmeter.protocol.http.proxy.ProxyControl: Could not open/read key store C:\apache-jmeter-2.10\bin\proxyserver.jks (The system cannot find the file specified) 
2013/10/23 13:54:32 INFO  - jmeter.protocol.http.proxy.ProxyControl: Creating Proxy CA in C:\apache-jmeter-2.10\bin\proxyserver.jks 
2013/10/23 13:54:32 ERROR - jmeter.protocol.http.proxy.ProxyControl: Could not initialise key store java.io.IOException: Cannot run program "keytool" (in directory "C:\apache-jmeter-2.10\bin"): CreateProcess error=2, The system cannot find the file specified

I don't know why the exe would not be picked up as it is part of java and in my path or why the jmeter zip would exclude a necessary file so I copied keytool from my java install into the directory it was looking for it and tried again. when I did I got this:

我不知道为什么 exe 不会被选中,因为它是 java 的一部分并且在我的路径中,或者为什么 jmeter zip 会排除一个必要的文件,所以我将 keytool 从我的 java 安装复制到它正在寻找的目录中,再试一次。当我这样做时,我得到了这个:

ERROR - jmeter.protocol.http.proxy.ProxyControl: Could not initialise key store java.io.IOException:

错误 - jmeter.protocol.http.proxy.ProxyControl:无法初始化密钥存储 java.io.IOException:

I received a code of -1073741515, which as a beginner is not helpful. I tried these things with and without pointing to my proxy server, no difference in the results. I am on a windows 7 system 64 bit, and am using jdk 1.7.

我收到了 的代码-1073741515,这对初学者没有帮助。我在指向和不指向我的代理服务器的情况下尝试了这些事情,结果没有区别。我使用的是 64 位 Windows 7 系统,并且使用的是 jdk 1.7。

Any suggestions on what steps I can take to correct the issue?

关于我可以采取哪些步骤来纠正问题的任何建议?

Edit: here is the complete log

编辑:这是完整的日志

    2013/10/23 15:34:06 INFO  - jmeter.util.JMeterUtils: Setting Locale to en_US   
2013/10/23 15:34:06 INFO  - jmeter.JMeter: Loading user properties from: C:\apache-jmeter-.10\bin\user.properties   
2013/10/23 15:34:06 INFO  - jmeter.JMeter: Loading system properties from: C:\apache-meter-2.10\bin\system.properties   
2013/10/23 15:34:07 INFO  - jmeter.JMeter: Copyright (c) 1998-2013 The Apache Software Foundation   
2013/10/23 15:34:07 INFO  - jmeter.JMeter: Version 2.10 r1533061   
2013/10/23 15:34:07 INFO  - jmeter.JMeter: java.version=1.7.0_21   
2013/10/23 15:34:07 INFO  - jmeter.JMeter: java.vm.name=Java HotSpot(TM) 64-Bit Server VM 
2013/10/23 15:34:07 INFO  - jmeter.JMeter: os.name=Windows 7   
2013/10/23 15:34:07 INFO  - jmeter.JMeter: os.arch=amd64   
2013/10/23 15:34:07 INFO  - jmeter.JMeter: os.version=6.1   
2013/10/23 15:34:07 INFO  - jmeter.JMeter: file.encoding=Cp1252   
2013/10/23 15:34:07 INFO  - jmeter.JMeter: Default Locale=English (United States)   
2013/10/23 15:34:07 INFO  - jmeter.JMeter: JMeter  Locale=English (United States)   
2013/10/23 15:34:07 INFO  - jmeter.JMeter: JMeterHome=C:\apache-jmeter-2.10   
2013/10/23 15:34:07 INFO  - jmeter.JMeter: user.dir  =C:\apache-jmeter-2.10\bin   
2013/10/23 15:34:07 INFO  - jmeter.JMeter: PWD       =C:\apache-jmeter-2.10\bin   
2013/10/23 15:34:07 INFO  - jmeter.JMeter: IP: xxxxxxxx Name: xxxxx FullName: xxxxx   
2013/10/23 15:34:07 INFO  - jmeter.JMeter: Loaded icon properties from org/apache/jmeter/images/icon.properties   
2013/10/23 15:34:07 INFO  - jmeter.engine.util.CompoundVariable: Note: Function class names must contain the string: '.functions.'   
2013/10/23 15:34:07 INFO  - jmeter.engine.util.CompoundVariable: Note: Function class names must not contain the string: '.gui.'   
2013/10/23 15:34:07 INFO  - jmeter.gui.action.LookAndFeelCommand: Using look and feel: javax.swing.plaf.metal.MetalLookAndFeel [Metal, CrossPlatform]   
2013/10/23 15:34:08 INFO  - jmeter.util.BSFTestElement: Registering JMeter version of JavaScript engine as work-round for BSF-22   
2013/10/23 15:34:08 INFO  - jmeter.protocol.http.sampler.HTTPSamplerBase: Cannot find .className property for htmlParser, using default   
2013/10/23 15:34:08 INFO  - jmeter.protocol.http.sampler.HTTPSamplerBase: Parser for text/html is    
2013/10/23 15:34:08 INFO  - jmeter.protocol.http.sampler.HTTPSamplerBase: Parser for application/xhtml+xml is    
2013/10/23 15:34:08 INFO  - jmeter.protocol.http.sampler.HTTPSamplerBase: Parser for application/xml is    
2013/10/23 15:34:08 INFO  - jmeter.protocol.http.sampler.HTTPSamplerBase: Parser for text/xml is    
2013/10/23 15:34:08 INFO  - jmeter.protocol.http.sampler.HTTPSamplerBase: Parser for text/vnd.wap.wml is org.apache.jmeter.protocol.http.parser.RegexpHTMLParser   
2013/10/23 15:34:08 INFO  - jmeter.gui.util.MenuFactory: Skipping org.apache.jmeter.protocol.http.control.gui.WebServiceSamplerGui   
2013/10/23 15:34:08 INFO  - jmeter.gui.util.MenuFactory: Skipping org.apache.jmeter.protocol.http.modifier.gui.ParamModifierGui   
2013/10/23 15:34:08 INFO  - jmeter.protocol.http.proxy.ProxyControl: HTTP(S) Test Script Recorder SSL Proxy will use keys that support embedded 3rd party resources in file C:\apache-jmeter-2.10\bin\proxyserver.jks   
2013/10/23 15:34:09 INFO  - jmeter.samplers.SampleResult: Note: Sample TimeStamps are START times   
2013/10/23 15:34:09 INFO  - jmeter.samplers.SampleResult: sampleresult.default.encoding is set to ISO-8859-1   
2013/10/23 15:34:09 INFO  - jmeter.samplers.SampleResult: sampleresult.useNanoTime=true   
2013/10/23 15:34:09 INFO  - jmeter.samplers.SampleResult: sampleresult.nanoThreadSleep=5000   
2013/10/23 15:34:22 WARN  - jmeter.protocol.http.proxy.ProxyControl: Could not open/read   key store C:\apache-jmeter-2.10\bin\proxyserver.jks (The system cannot find the file specified)   
2013/10/23 15:34:22 INFO  - jmeter.protocol.http.proxy.ProxyControl: Creating Proxy CA in C:\apache-jmeter-2.10\bin\proxyserver.jks   
2013/10/23 15:34:22 ERROR - jmeter.protocol.http.proxy.ProxyControl: Could not initialise key store java.io.IOException: Cannot run program "keytool" (in directory "C:\apache-jmeter-2.10\bin"): CreateProcess error=2, The system cannot find the file specified  
    at java.lang.ProcessBuilder.start(Unknown Source)
    at org.apache.jorphan.exec.SystemCommand.run(SystemCommand.java:142)
    at org.apache.jorphan.exec.SystemCommand.run(SystemCommand.java:125)
    at org.apache.jorphan.exec.KeyToolUtils.genkeypair(KeyToolUtils.java:123)
    at org.apache.jorphan.exec.KeyToolUtils.generateProxyCA(KeyToolUtils.java:181)
    at org.apache.jmeter.protocol.http.proxy.ProxyControl.initDynamicKeyStore(ProxyControl.java:1275)
    at org.apache.jmeter.protocol.http.proxy.ProxyControl.initKeyStore(ProxyControl.java:1205)
    at org.apache.jmeter.protocol.http.proxy.ProxyControl.startProxy(ProxyControl.java:431)
    at org.apache.jmeter.protocol.http.proxy.gui.ProxyControlGui.startProxy(ProxyControlGui.java:485)
    at org.apache.jmeter.protocol.http.proxy.gui.ProxyControlGui.actionPerformed(ProxyControlGui.java:370)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access0(Unknown Source)
    at java.awt.EventQueue.run(Unknown Source)
    at java.awt.EventQueue.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.run(Unknown Source)
    at java.awt.EventQueue.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
    at java.lang.ProcessImpl.create(Native Method)
    at java.lang.ProcessImpl.<init>(Unknown Source)
    at java.lang.ProcessImpl.start(Unknown Source)
    ... 46 more

采纳答案by UBIK LOAD PACK

Since JMeter 2.10, recording has been improved to better handle embedded resources and creation of certificates on the fly. This makes recording complex HTTPS websites much easier.

自 JMeter 2.10 以来,记录已得到改进,以更好地处理嵌入式资源和动态创建证书。这使得记录复杂的 HTTPS 网站变得更加容易。

To add these features, JMeter now uses keytool utility (available in JDK) so you need to ensure your configuration is correct, read this wiki page before starting:

为了添加这些功能,JMeter 现在使用 keytool 实用程序(在 JDK 中可用),因此您需要确保配置正确,在开始之前阅读此 wiki 页面:

Also ensure you read:

还要确保您阅读:

Note it is much better to use a JDK7. (jdk7 should be installed on the system)

请注意,使用 JDK7 会好得多。(系统上应该安装jdk7)

If you don't want to read the long answer (which you should :-) ), then: Ensure you have JAVA_HOME and PATH set correctly, to do it: Open jmeter.bat and add this (at the top after launch.exe command):

如果您不想阅读冗长的答案(您应该 :-) ),那么: 确保您已正确设置 JAVA_HOME 和 PATH,以执行此操作:打开 jmeter.bat 并添加此内容(在 launch.exe 之后的顶部)命令):

SET JAVA_HOME=Path to JDK

SET PATH=%PATH%;%JAVA_HOME%\bin

SET JAVA_HOME=JDK 的路径

设置路径=%PATH%;%JAVA_HOME%\bin

Restart JMeter and retest.

重新启动 JMeter 并重新测试。

If it doesn't work, you can workaround by defining the following JMeter property in user.properties:

如果它不起作用,您可以通过在 user.properties 中定义以下 JMeter 属性来解决:

proxy.cert.alias=anything

proxy.cert.alias=任何东西

回答by eugene.polschikov

Also I would recommend you to consider alternatives in automatic script writing. Actually there are some ways of .jmx scripts writing:

此外,我建议您考虑使用自动脚本编写的替代方案。其实.jmx脚本有几种写法:

  1. using proxy as described in the tutorial you've given

  2. using badBoy tool .

    http://www.badboy.com.au/http://www.badboysoftware.biz/docs/http://www.youtube.com/watch?v=OX9NbYuE07I

    benefits: easy record, easy export to jmeter.

  3. using blazemeter chrome extenstion:

    http://community.blazemeter.com/knowledgebase/articles/231479-chrome-extension

    benefits: You can export the script written to jmeter and/or to cloud as well and run it on the cloud.

    As soon as you try these approaches probably you'll find out what you've missed.

  1. 使用您提供的教程中所述的代理

  2. 使用 badBoy 工具。

    http://www.badboy.com.au/ http://www.badboysoftware.biz/docs/ http://www.youtube.com/watch?v=OX9NbYuE07I

    好处:容易记录,容易导出到jmeter。

  3. 使用 blazemeter chrome 扩展:

    http://community.blazemeter.com/knowledgebase/articles/231479-chrome-extension

    好处:您可以将编写到 jmeter 和/或云的脚本导出并在云上运行。

    一旦您尝试这些方法,您可能会发现您错过了什么。

回答by Markowski_JM

Since the version JMeter 2.10, you must configure the var PATH in Windows.

从 JMeter 2.10 版本开始,您必须在 Windows 中配置 var PATH。

The problem become from new PROXY HTTPS.

问题来自新的代理 HTTPS。

To avoid configuration of JMeter and JDK from Oracle, I make a package for installation.

为了避免从 Oracle 配置 JMeter 和 JDK,我制作了一个安装包。

A new package was created for JMeter 2.11

为 JMeter 2.11 创建了一个新包

回答by Steve Quail

Try running JMeter from a command prompt with admin privs, works for me !

尝试使用管理员权限从命令提示符运行 JMeter,对我有用!