I have a preprocessor that creates random uuid and random string as below
import java.util.UUID;
import org.apache.commons.lang3.RandomStringUtils;
String testId1=UUID.randomUUID().toString();
String testId2=RandomStringUtils.randomAlphanumeric(10);
vars.putObject("testId1",testId1);
vars.putObject("testId2",testId2);
the test plan is created as below
The post anomaly uses the above ids in the payload. The first time when the script is run the testId1 and testId2 in the request is coming as ${testId1} and ${testId2}
when I run this test for few samples in GUI i see these variables are generated. I run this test in distributed mode and I found from one server the testId1 and testId2 are generated but not from other.(Non GUI mode) what would be the issue here?
If there is "the issue" on the "other server" you will find the reason in jmeter-server.log file on that server. Normally JMeter prints sufficient amount of troubleshooting information to its log file, it's extremely useful especially when a JSR223 PreProcessor fails somewhere somehow.
Log verbosity can be increased for either particular components of for the whole JMeter application, see How to Configure JMeter Logging article for more details.
Remember that you should avoid scripting and stick to JMeter's built-in test elements where possible, in your case you can generate both variables using __UUID() and __RandomString() functions
Related
I have created a JMeter load test script for .Net Version 4.8 framework. It's successfully passed but on re-execution or on increasing thread group count it throws an error like "Assembly "AjaxControlToolkit, Version=3.5.60501.0, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e" does not contain a script with hash code "de1feab2"." in View result Tree in JMeter. Also attached Screenshot for your reference.
I have already handled ViewState and EventValidation. Also the created test script is working fine for thread group count 1. Can you please help me with steps to maintain the ScriptManager's hidden value as it's value is static in all the created steps in a script. Please reply asap.Actually, I need an immediate solution to the mentioned problem statement. Screenshot of Error throwing in JMeter
Looks like missing or improperly implemented correlation, for example you're sending a hard-coded (recorded?) parameter de1feab2 and its value is supposed to be dynamic.
You can record your scenario one more time and compare JMeter test plans - all the values which differ are a subject to correlation.
Another option is considering an alternative recording solution like BlazeMeter Proxy Recorder, it's capable of exporting recorded network traffic in "SmartJMX" form with automatic detection and correlation of dynamic parameters
I'm running tests with JMeter (master+10 slaves) on elasticasearch. I'm getting error 400 for some requests but they are a bit elusive:
When I run the requests manually with curl or pasting them on kibana's console, I don't get errors.
Every time I run the tests using jmeter, using the same requests and under the same conditions, I get a different number of errors.
So I was thinking of inspecting the response bodies from jmeter. But all the ways I've tried failed:
I've created a View Result Tree element and checked all boxes on the "configure" panel. When I run the script, it logs everything except response data
I've tried a BeanShell post processor to write all responses on a file. But it apparently is being 'ignored' when I run the script
Both these solutions work on my machine, but not on the server (which I don't have total control over). I'm passing jmeter.save.saveservice.response_data=true on the command line to start jmeter.
What else could I try?
This is an optimization that JMeter makes for distributed testing related to the mode:
https://jmeter.apache.org/usermanual/properties_reference.html#remote_batching_config
To avoid JMeter stripping the response data set in user.properties of servers snd controller:
mode=Batch
As by default it is:
mode=StrippedBatch
By default JMeter slaves don't send response data to the master, you can choose a different sample sender if you need more data.
Writing response data into a file using Beanshell should work in any case (however consider using JSR223 Test Elements and Groovy for this), just make sure that:
your Beanshell PostProcessor is placed correctly according to JMeter Scoping Rules
there are no Beanshell-related messages in jmeter.log files
you will need to collect the log files from each slave manually after test run, they will not be generated on the master
I created JMeter Test and under first "HTTP Request" I created a Beanshell listner script which works fine when using GUI but 8 out of 10 times the script totally get ignored in non-GUI mode.
I am also running these test in Gitlab CI using Docker Image "justb4/jmeter:latest" and Beanshell script also get ignored there. I don't know whats wrong there it is working fine with GUI
There is no such thing as "get ignored" in JMeter world, it either passes or fails, in case of failure you should see the relevant message(s) in the jmeter.log file
Also be aware that you should not be using Beanshell at all, starting from JMeter 3.1 you should be using JSR223 Listener and Groovy language for scripting, one of Beanshell's disadvantages is that it's being interpreted each time while Groovy scripts can be compiled and cached providing the most optimal performance. See Apache Groovy - Why and How You Should Use It article for more details.
Also be informed that we cannot efficiently help without seeing your code and the aforementioned jmeter.log file.
I am working on master-slave Jmeter configuration, my data set exist on each machine on a different path for (macOS, Windows).
I use a global data set to fetch data for multiple thread groups.
However, the variable/property can be different across platforms.
I also tried the JSR223 to check the, but still no luck. check out the below snapshot.
I am trying to make sure that once I ran my test from Master (Mac), it also run on Windows.
Any thoughts how to do that on multiple platform setup.
The best solution is placing your test data under the same path which will be relative to JMeter working directory, this way you will not have to change anything in your script.
If for some reason you cannot afford this you can add a JSR223 Sampler to your Test Plan and use the code like:
if (org.apache.commons.lang3.StringUtils.containsIgnoreCase(System.getProperty('os.name'), 'Windows')) {
vars.put('data-path', 'c:/windows/specific/path')
} else {
vars.put('data-path', '/macos/specific/path')
}
It will detect the operating system name in the runtime and you will be able to define an OS-specific paths using the above approach.
vars is a shorthand for JMeterVariables class instance, the above code defines ${data-path} JMeter Variable which you can use later on for specifying data files locations. See Top 8 JMeter Java Classes You Should Be Using with Groovy to learn more about JMeter API shortcuts exposed to JSR223 Test Elements
What I try to achieve is to get JMeter results in 2 formats, for the same test execution. CSV is the one I'm mostly interested in, unless there are failures - then I may need to use data which can be saved only to XML. I can't use XML for most occasions, due to misc reasons.
I was looking at jmeter.save.saveservice.output_format cfg entry, it doesn't seem to accept both as valid entry. I was also looking at JMeter code itself, it also clearly separates both options.
Did anyone invent a hack to get both JMeter outputs at the same time?
Solution for both standalone JMeter and jmeter-maven-plugin is welcome.
If you use JMeter Maven plugin, as per Five Ways To Launch a JMeter Test without Using the JMeter GUI guide the default output has to be XML.
If you need CSV output as well - just add Simple Data Writer listener. If you looking for CSV data to be in line with JMeter default CSV values configure it as follows: