JMeter - Append Timestamp to the File name - jmeter

I am writing some data into a file. Please find below the snippet in JSR223 Post processor.
import org.apache.commons.io.FileUtils
f = new File("C:/Users/503289283/Downloads/Service_Start.csv")
Filename needs to be appended with the Timestamp. Tried using ${__time(dd-MM-yyyy_HH:mm:ss,)} and Date.getTime(). It doesn't work. Not sure if am doing it right.
Kindly help.
Regards,
Ajith
I tried with
new File('C:/Users/503289283/Downloads/Service_Start_ ' + new Date().format('dd-MM-yyyy_HH:mm:ss') + '.csv')
It throws an error.
Log:
javax.script.ScriptException: java.io.FileNotFoundException: C:\Users\503289283\Downloads\Service_Start_ 14-03-2022_10:13:12.csv (The filename, directory name, or volume label syntax is incorrect)
whereas
new File("C:/Users/503289283/Downloads/Service_Start.csv")
works perfectly.
Is something missed here? Please help.

How about:
new File('C:/Users/503289283/Downloads/Service_Start_ ' + new Date().format('dd-MM-yyyy_HH:mm:ss') + '.csv')
More information:
Groovy JDK Enhancements - Date
Apache Groovy - Why and How You Should Use It

Related

Azure Load test preview unable to read data from parameterized CSV file in JSR223 Sampler

I used JSR223 Preprocessor to create the request body for a POST JSON request. I used Groovy language for it The code has some parameterization so, I mentioned the path for CSV file in the script as below and attached the Order.csv file to the test plan in load test preview.
CSV file path in the script:
"List lines = new File("Order.csv").readLines()"
So whenever I run the test in Azure load test preview, the is the error message im encountering:
javax.script.ScriptException: java.io.FileNotFoundException: Order.csv (No such file or directory)
How can I fix this. Please Help.
I tried just mentioning the CSV file name in the code and attached the CSV file to the Load test preview along with .jmx file.
This is throwing error saying, File not found
How do you know where guys from Microsoft are placing the CSV file and why do you expect them to copy it to the same place where the .jmx script lives?
I would suggest amending your Groovy script to get the file location dynamically using FileServer class, i.e. change this line:
List lines = new File("Order.csv").readLines()
to something like:
List lines = new File(org.apache.jmeter.services.FileServer.getFileServer().getBaseDir() + File.separator + 'Order.csv').readLines()
More information on Groovy scripting in JMeter: Apache Groovy: What Is Groovy Used For?

How to use lookup tables as .tx in Rasa?

In my nlu.yml file I have my code as:
- lookup: project
project.txt
My project.txt file in in under data and so is my nlu.yml file.
I'm getting the exception as yaml syntax exception, could not find expectated ':'
Could someone help me out? Where should I put that colon?
You should convert project.txt to yml format.
This answer should help you.

I want to recover the filename in Java I/O

I had name file in JAVA I/O:
f1 = new File("C:\\Program Files\directory\FileDir\file.txt");
I want to recover the filename only: FileDir(type String).
.getName() should help you.
new File("C:\Program Files\directory\FileDir\file.txt").getName();
There are other methods for File as well. Please go through the documentation here to find out how to get absolute path, canonical path, etc. and what are the differences between them.

Jmeter beanshell script - Polish first and last name

i have a little problem with my jmeter test plan.
i have a jdbc request to extract customers in sql databases
from this sql query i retrieve first name and last name only
after that i have a beanshell little script to write all my customers in a csv file :
f = new FileOutputStream(vars.get("InputFilePath"));
p = new PrintStream(f);
nb_customer=Integer.parseInt(vars.get("NOM_#"));
for (i=1;i<=nb_customer;i++) {
p.println(vars.get("NOM_"+i) + ";" + vars.get("PRENOM_"+i));
}
p.close();
f.close();
my problem is that it is an application for our subsidiary company in polska
so, all customers first and last name are in polish language with different symbol, characters.
in the csv file, they appears with a ? in spite of the real character.
can you help me please ?
thanks a lot
Ludo
Try explicitly setting encoding to UTF-8, initialize PrintStream as:
p = new PrintStream(f, true, "UTF-8");
Check out JMeter default encoding as:
log.info(System.getProperty("file.encoding"));
If output is different from UTF-8 add the next line to system.properties file (lives under /bin folder of your JMeter installation:
file.encoding=UTF-8
and restart JMeter. Alternatively you can pass it via -D command line argument like:
jmeter -Dfile.encoding=UTF-8
See Apache JMeter Properties Customization Guide for more information on Jmeter properties and ways of setting and overriding them.
Check file contents in JMeter itself by using FileUtils.readFileToString() method like:

how to write data to csv in jmeter using beanshell scripting

I am new to jmeter,and in my company we are doing webservices testing using jmeter.My requirement is i am using csv data config file for web services testing and here i want to update each row of csv file with test results and i am using beanshell postprocessor,please help
Ex:
csv contains:
Test Case,Dates,Numbers,Results
Total test cases are 16 and i want to update as below for each test case
TC_001,9-03-2016,001,PASS
TC_002,9-03-2016,0002,FAIL
and so one...
Result = "FAIL";
Response = prev.Get....();
If(Response.Contains("Valid"));
Results="PASS";
f = new FileOutputStream("/tmp/oders.csv", true);
p = new PrintStream(f);
this.interpreter.setOut(p);
print(Results + "," + Result);
f.close();
P.Close();
import java.io.File;
import org.apache.jmeter.services.FileServer; //jmeter spelling corrected
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.Arrays;
import java.io.Writer;
File file = new File("csvFilePath");
FileWriter fstream = new FileWriter(file, true);
// true, will append the file if already exist
BufferedWriter out = new BufferedWriter(fstream);
out.write("Save your data which you want to save");
out.write("Save your data which you want to save");
out.close();
fstream.close();
It might not be the best idea as:
You may have problems with re-using this file
You may run into a situation when 2 or more threads will be concurrently writing to the file and it will result in data loss, file corruption or IO Exception
I would recommend adding your "Test Case", "Dates" and "Numbers" variables to JMeter's .jtl results file instead using Sample Variables property like:
Given you have 3 variables: TestCase, Date and Number
Add the following line to user.properties file (it is located under /bin folder of your JMeter installation)
sample_variables=TestCase,Date,Number
On next JMeter restart you will see "TestCase", "Date" and "Number" variable values appended to .jtl results file.
It is also possible to pass the setting as a command-line parameter like:
jmeter -Jsample_variables=TestCase,Date,Number -n -t /path/to/testplan.jmx -l /path/to/results.jtl
References:
Sample Variables
Apache JMeter Properties Customization Guide
I would like to share my experience using BeanShell PostProcessor to write variables to a file.
I captured few responses from the server using "Regular Expression Extractor" and saved it to few variables Var1 & Var2 and when I wrote these variables to a file using "BeanShell PostProcessor", I have observed that it works fine when we run a test with single thread but with multi thread test, the data was being lost.
Say When I inject 100 transactions, I was able to see only 97 records in the output file.
So the best option is to set sample_variables in user.properties file so that you can get the variables out in your .jtl results file.

Resources