Handle date in LONG format in jmeter - jmeter

We have below code for "Date" in LONG format in one of the requests in Jmeter
SubmittedDate":{"value":1672986618263}
_CreatedDate":{"value":1672986618264}
Please help me to how to handle to get current date and time in Long format during replay or run time
Thanks

It looks like to be the timestamp in milliseconds since the beginning of Unix epoch, in JMeter there is __time() function which returns current timestamp.
If you want the "CreatedDate" to be 1 millisecond larger than the SubmittedDate you can use __longSum() function
Something like:
SubmittedDate":{"value":${__time(,created)}}
_CreatedDate":{"value":${__longSum(${created},1,)}}
Demo:
More information on JMeter Functions concept: Apache JMeter Functions - An Introduction

Related

Get current UTC timestamp in JMeter request body

I have a API Test Plan that runs on JMeter with timestamp Parameter inside body that requires current timestamp in UTC YYYY-MM-DDTHH:mm:ss.SSS format.
e.g. timestamp: "2021-07-15T12:00:51.308Z"
Can someone help me with this on what & where function to be written and call so I don't have to manually change timestamp every time before I run my Test Plan
If you want to get the current timestamp in your local time zone - go for __time() function:
${__time(yyyy-MM-dd'T'hh:mm:ss.SSS'Z',)}
If you're in the different time zone and would like to get the current timestamp in UTC - go for __groovy() function:
${__groovy(new Date().format("yyyy-MM-dd'T'hh:mm:ss.SSS'Z'"\, TimeZone.getTimeZone('UTC')),)}
Demo:
More information on JMeter Functions concept: Apache JMeter Functions - An Introduction
Use __timeShift with required format:
${__timeShift(yyyy-MM-dd'T'hh:mm:ss.SSS'Z')}
Output: 2021-07-15T03:44:27.791Z

microseconds epoch time parsing using strptime

I am using fluentbit for sending logs and the logs have a timestamp like:
__REALTIME_TIMESTAMP : <micro seconds from epoch>
example -
__REALTIME_TIMESTAMP : 1528118184711009
Fluentbit uses strptime to parse the time string. But as I see in the documentation of strptime, I do not see a format string that does the parsing for microseconds from epoch or milliseconds from epoch.
I can only specify the format string in fluentbit.
I was guessing it like "%10s" for only taking the first 10 digits but it doesn't works.
Any help is appreciated.
Thanks in advance.
For posterity:
The %s works fine for even microseconds. It only takes the required number of digits if there is more precision given.

How to display elapsed time in seconds in CSV data - Jmeter

I am new to Jmeter and working on JDBC. I am interested to know:
How to change field/header names while exporting data to csv file.
How to display elapsed time in seconds instead of milliseconds.
I would really appreciate, if you please define each step. Being a newbie, it would be easier for me to follow.
The field names are defined in the CSVSaveService.java file, you will need to get JMeter sources, amend field names as required and rebuild JMeter. See How to write a plugin for JMeter article for more information
There you can change it in the same file like:
elapsed = Long.parseLong(text) / 1000 // convert ms to seconds
However I wouldn't recommend going for these approaches as there could be side effects in reporting systems.
Instead of patching JMeter you can add a JSR223 Listener and write your own CSV file using Groovy code
For example this is how you can write elapsed time in seconds into a new file called results.csv
def myFile = new File('results.csv')
myFile.append(sampleResult.getTime() / 1000)
myFile.append(System.getProperty('line.separator'))

Fetch current time in 24 hours format in JMeter

How can I get current time in 24 hours format in JMeter.
I tried ${__time(hh:mm a,)} but it results in AM/PM format.
As per How to Use JMeter Functions guide JMeter's __time() function output can be controlled via SimpleDateFormat class patterns.
Looking into JavaDoc:
you don't need a letter
you need to use capital H for 0-24 hours or lowercase k for 1-23 hours
So change function to ${__time(HH:mm,)} and that should be it
In Apache JMeter 5.2, current time can be captured in User defined variable and then used in Rest payloads as following screenshot:
expression - ${__timeShift(yyyy-MM-dd'T'HH:mm:ss'.000+05:30',,PT0S,,)}
output - "2020-06-06T18:10:59.000+05:30"
Here, date and time format can be changed as per the need.
Once current date and time is captured in user defined variable then it can be used as "${now-date-time}" in REST requests.
It could also be possible that we face a scenario where there should be gap of, let's say, 1second between start time and end time while constructing request. In such case, following expressions can help:
now-date-time : ${__timeShift(yyyy-MM-dd'T'HH:mm:ss'.000+05:30',,PT0S,,)}
now-date-time-plus-one-second : ${__timeShift(yyyy-MM-dd'T'HH:mm:ss'.000+05:30',,PT1S,,)}
Following example better explains it:

To manullay calculate the total duration of jmeter testplan from the Logfile

I want to manually calculate the Duration of jmeter testplan from the csv Logfile.I was following the calculation of last timestamp-first timestamp and it looks correct if am running for 1 thread group.For more than 1 threadgroup the samplers will be repeating and I think it should not be the right way to calculate the duration.I tried using transaction controller thinking that the corresponding timestamp will give me the duration of all contained samples but got confused when I saw multiple transaction controller entry in the Log file for more than one threadgroup. I am newcomer in the performance testing and in the jmeter.Any help will be appreciated.
JMeter provides variable which holds test start timestamp, it is ${TESTSTART.MS}
You could use tearDown Thread Group which is designed to run post-test actions. Under tearDown Thread Group you can use Beanshell Sampler to print test duration to jmeter.log file as follows:
long start = Long.parseLong(vars.get("TESTSTART.MS"));
long end = System.currentTimeMillis();
log.info("Test duration: " + (end - start) / 1000 + " seconds");
By the end of the test you should see something like:
2015/06/17 22:20:15 INFO - jmeter.util.BeanShellTestElement: Test duration: 300 seconds
See How to use BeanShell: JMeter's favorite built-in component guide for more Beanshell scripting tips and tricks.
If you have only result file, another option is open .jtl results file with Excel or Google Sheets or equivalent, sort timestamp column (usually the first one), subtract first cell/first row value from the first sell/last row value - this way you'll get test duration in milliseconds.

Resources