The JMeter FAQ
\[http://www.bonoy.com/a/index.php?name=PNphpBB2&file=viewtopic&t=276 Simple Chinese Version\] \\ |
Answer: Here are a few notes to help you on your way.
You have:
One or more machines running jmeter-server (the \["JMeterEngine"\]). You want these machines to be reasonably close (network wise) to the application server. By "reasonably close" I mean on the same Ethernet segment or at least with no low speed links between them. The JMeter User Manual provides reasonable information about doing this. |
A single machine running the JMeter GUI that you use to control the machines running the \["JMeterEngine"\]. \\ |
While you are developing your scripts and for only moderate levels of user testing (assuming you are "close" to the application server) you do not need to involve any \["JMeterEngine"\] machines. The reason you have these are to: |
Answer: Quick answer, go here: http://www.programmerplanet.org/ant-jmeter/. I have permission from the author of this ant task to add it to JMeter's distribution, which I will do as soon as I have the time. (It should now be in the extras folder).
Answer: You can use the JavaSampler classes to write your own class that runs your EJB's, and then JMeter will take over the threading and reporting. This, however, is not ideal. Someone needs to write a good EJB Sampler implementation for JMeter (hint, hint).
Answer: Quick answer: They appear as an error because 302 != 200, at least in v 1.8.1.
Long answer: try using v1.9RC1, the code in \[http://cvs.apache.org/viewcvs.cgi/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSampler.java?rev=1.40&content-type=text/vnd.viewcvs-markup HTTPSampler\] seems to take into account the result code for the redirect instead of the redirect result code. |
Answer: Parameters can be set at both the Test Plan and Thread Group levels.
At the Test Plan level, parameters can be used as constants to minimize changes throughout the test plan when a server or port changes, for example. \[N.B. functions are not currently supported at Test Plan level.\] |
Within Thread Groups, the User Parameters Pre-Processor can be used to set different parameters for each simulated user.
Note: if only one user (i.e. User_1) is defined, the value will be used for all threads. Functions ARE supported here. See later FAQs for more information.
The following example parameterizes the pet category from the \[http://java.sun.com/blueprints/code/index.html#java_pet_store_demo/ Java Pet Store\]. Thanks to \[http://www.jwebhosting.net/ jWebHosting.net\] for allowing us to run the example on their server. |
When you view the results in the View Results Tree, you can see the ${category} value was replaced with the value from the User Parameters. Each thread will use the category from the User Parameter setting automatically. If there are more than two threads, they will reuse the values in these settings, so the third thread would use DOGS.
Answer: You can use the Regular Expression Post Processor to extract a value from a response, and then reuse this response in another request. Looking at the previous question in this FAQ, you could extract the product id from the result and use it in the following request:
When you view the results in the View Results Tree, you can see the ${product} value was replaced with the value extracted by the regular expression.
*Answer:*as explained above, you can use functions and variables just about anywhere in the test plan. So if you want to pass in a value a run-time, just use the __property() function, which reads the value of a JMeter property.
In order to define the property so JMeter can read it, define it on the command line as follows:
jmeter -Jproperty_name=property_value |
For example:
jmeter -Jhost2=www.zzzyy.com -Jhost1=www.jmeter-rules.net |
These values can then be read in the test plan using:
${__property(host1)} and ${__property(host2)} |
Note: Thread Groups are slightly different from other test elements, because their settings have to be determined before the test starts. This means that you cannot use variables defined in a User Parameters form\["as far as I could tell"\]. But the __property() function works in Thread Groups. |
Elsewhere, you can use function calls, or variable references to User Parameters (which in turn could be functions), or variable references to variables set up by functions earlier in the test. There's more than one way to do it.
Suppose you want to be able to vary the number of threads in a test plan. Choose a suitable property name, say group1.threads. Replace the thread count in the GUI (or the JMX, if you're feeling brave!) with the following function call:
${__property(group1.threads)} |
Then, when starting JMeter, define the property on the command line:
jmeter -Jgroup1.threads=12345 |
It can be useful to put default settings into the jmeter property file, so you only need to supply differences on the command line.
# defaults in jmeter.properties group1.threads=10 group1.loops=100 group1.rampup=10 |
Then just do jmeter -Jgroup1.loops=1000 for example.
Versions of JMeter after 1.9.1 have a new version of the __property() function which allows a default value to be supplied, in case the property is not found:
${__property(group2.threads,,defaultvalue)} |
There is also a shorthand version called __P(), which you can use as follows:
${__P(group2.threads,100)} |
if you omit the value, it defaults to 1
*Answer:*One way to do this is to create a User Parameters Pre-Processor in which you list all the values that you want to read from files. You can then use the variable names later in the script.
For example:
create the file accounts.dat containing one line per account id. \[In the bin directory, unless you add a path to the parameter to _StringFromFile\] |
Each iteration, the ACCOUNTID variable will be set to the next line in the file, and the HTTP Request will use its value to set the account_id parameter.
When the end of the file is reached, StringFromFile starts reading again at the beginning.
N.B. If using such a script in client-server mode, make sure that any data files are copied to the appropriate place on the server host, as the files will be opened by the server process, not the client.
*Answer:* Check out the documentation \[http://jakarta.apache.org/jmeter/usermanual/get-started.html item 2.2.4\]. _\[A lot of people struggle with this, either because of private certs or whatever - I'm looking for a page that details common trip-ups and solutions for them. - MikeStover\]_ |
Answer: Make sure to mount all of the jars in the lib folder.
Answer: It's a great idea to write some glue between JMeter and JUnit for just this purpose. It doesn't exist currently, though there is an Ant task for JMeter that you might find useful.
*Answer:*No. JMeter would never be able to decipher the encrypted requests the browser sends. SSL Proxies create a tunnel from the browser to the destination server but do not and cannot read the messages. Check out \[http://www.badboy.com.au/ BadBoy\] for a possible solution. |
*Answer:*You can display your server's response text in the View Results Tree listener.
*Answer:*No. Don't plan on having one either at this point. Changes would be too frequent to realistically keep up with.
*Answer:*Assertions aren't smart enough to do the right thing with redirected requests - currently the 302 response would be asserted against. You can get around this by recording your test plans and leaving "follow redirects" off.
Alternatively, the latest JMeter release (after 1.9.1) has an option to allow the redirects to be handled by the Java libary routines. Earlier versions of Java did not support redirects properly, but if you want to try, just define the following JMeter property:
HTTPSampler.delegateRedirects=true |
JMeter will then not see the redirects at all.
*Answer:*The CLASSPATH variable is ignored when using the -jar flag. For some further information on this, see:\[http://java.sun.com/j2se/1.4.2/docs/tooldocs/findingclasses.html#userclass How the Java launcher finds user classes \] |
JMeter currently knows to look for jars/classes in two places only:
lib/ext, where the \["ApacheJMeter"\]_\*.jar files live |
Additional jars should normally be placed in the lib directory; however, if you have written an add-on for JMeter itself, that should be put in the lib/ext directory.
If you want your jar file to be available to all Java applications, it can be placed in the \[http://java.sun.com/j2se/1.4.2/docs/tooldocs/findingclasses.html#extclass JVM extensions directory\] |
Another possible solution is to take a copy of the jmeter startup script, and replace:
-jar ["ApacheJMeter"].jar |
with
org.apache.jmeter.NewDriver |
after adding \["ApacheJMeter"\].jar to the classpath |
*Answer:*JMeter includes the pattern matching software \[http://jakarta.apache.org/oro/ Apache Jakarta ORO\]. |
See RegularExpressions for more details and examples
Currently I am using WAS 5.0 Application Server . For “Monitor Results” , JMeter shows the example for TOMCAT 5.0 WebServer.
“”””( Followings from JMeter doc )
Add the HTTP Request to the Thread Group element (Add --> Sampler --> HTTP Request). Then, select the HTTP Request element in the tree and edit the following properties):
Change the Name field to "Server Status". Enter the IP address or Hostname Enter the port number Set the Path field to "/manager/status" if you're using Tomcat. Add a request parameter named "XML" in uppercase. Give it a value of "true" in lowercase. Check "Use as Monitor" at the bottom of the sampler
“””””
Please let me know how I can set “Monitor Results” of JMeter in WAS5.0.
To use the JMeter Monitor for IBM WAS5.0, you will need to port the status servlet from Tomcat5 to WAS. Your other option is to write your own status servlet and output the data in the correct format. Tomcat5 includes the schema for the status data. If you have any further question, feel free to email the jmeter-user mailing list.
This is usually caused by including memory intensive listeners in your stress test. Listeners like "View Tree Results" are useful for debugging your test, but they are too memory intensive to remain in your test when you ramp up the number of simulated users and iterations. The best listeners to use for a long-term, high-load test are Aggregate Listener, Graph Listener, and Spline Listener.
In addition, you can instruct the JVM to use more memory by editing the jmeter/jmeter.bat files for linux/windows. Within these files, find a section that sets values for the Heap:
set HEAP=-Xms256m -Xmx256m
Feel free to change these values. Xms indicates the starting RAM the jvm will take, and Xmx will be the maximum it is allowed (for the HEAP).