Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.3k views
in Technique[技术] by (71.8m points)

java - Jmeter 2.10 HTTP recorder throws keytool exception

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:

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.10inproxyserver.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.10inproxyserver.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.10in"): 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:

ERROR - jmeter.protocol.http.proxy.ProxyControl: Could not initialise key store 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.

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-.10inuser.properties   
2013/10/23 15:34:06 INFO  - jmeter.JMeter: Loading system properties from: C:apache-meter-2.10insystem.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.10in   
2013/10/23 15:34:07 INFO  - jmeter.JMeter: PWD       =C:apache-jmeter-2.10in   
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.10inproxyserver.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.10inproxyserver.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.10inproxyserver.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.10in"): 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.access$200(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.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
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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.

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:

Also ensure you read:

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

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):

SET JAVA_HOME=Path to JDK

SET PATH=%PATH%;%JAVA_HOME%in

Restart JMeter and retest.

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

proxy.cert.alias=anything

If you're looking to learn jmeter correctly, this book will help you.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...