Jmeter - How to Check against empty DB query - jmeter

For the purpose of my test, i need to check if the query is returning empty data (nothing), then enter into another condition accordingly.
My test looks like:
execute db query
If DB, does not provides anything (empty data), then enter into the If condition.
What is the easiest way to archive that?

If your SQL query returns nothing the JDBC Request sampler will generate the following JMeter Variable:
resultSet_#=0
you can observe it yourself using Debug Sampler
If you want to run some logic when the query doesn't return the results add If Controller after the JDBC Request sampler and use the following __jexl3() function as the condition:
${__jexl3(${resultSet_#} == 0,)}
If everything goes well If Controller's children will be executed only when the query returns empty result set:

Related

Extract value from JDBC request and use in next jdbc requests

In my test plan I have 3 JDBC request.
In the first of them, I insert a row and get the row_id, so charge this row_id on the variable _row_id for use it in next tests.
In the second of them, I can catch this variable correctly with '${_row_id_1}' and update the row, but in the third test the value of '${_row_id_1}' change to 'true'.
How I can keep the value of variable for next tests?
Remove everything from "Variable Names" section of the update 2 request because you're overwriting the variables from the previous request there.
Alternatively give these variables new unique names.
You can inspect which JMeter Variables are generated with their respective value using Debug Sampler (or Debug PostProcessor) and View Results Tree listener combination.

jmeter - Looping based on DB query

I need to tell my loop counter to loop x Times, based on the DB query.
My scenario is as follows
Execute the query
Count the lines
based on dynamic response from JDBC request, i need to place my looping logic
Any help is appreciated
Just define a JMeter Variable in the "Variable Names" field of the JDBC Request, i.e. put url there:
This way you will get the following JMeter Variables:
So you will be able to use ${url_#} as the reference to the number of the matching rows in the Loop Controller.
More information: Debugging JDBC Sampler Results in JMeter
P.S. It might be easier to use ForEach Controller

Jmeter JDBC Request with While Controller

I am new to JMeter and trying to learn along in my job.
I am performing JMeter JDBC Request for a query which returns the status code. The status code initially is '0' after some backend process it will be updated to '3'.
I want to find out what was the time taken for the status to move from '0' to '3' using WHILE Controller. Any help is appreciated!!
Define an arbitrary JMeter Variable name under Variable Names function of the JDBC Request sampler, i.e. myVar
Put your JDBC Request sampler under the While Controller and use the following condition:
${__groovy(!vars.get('myVar_1').equals('3') ,)}
According to JDBC Request sampler documentation:
If the Variable Names list is provided, then for each row returned by a Select statement, the variables are set up with the value of the corresponding column (if a variable name is provided), and the count of rows is also set up.
so given your query returns a single row with the status you will have it as ${myVar_1}. The above __groovy() function checks if the ${myVar_1} variable value is equal to 3 or not
as you can see, the JDBC Request sampler has been executed 4 times, first time myVar_1 has not been yet defined and on subsequent requests it incremented from 0 to 3. Once it reached 3 - the While Controller loop breaks and the test goes further
In order to get the cumulative time of all JDBC Request samplers executions put the whole construction under the Transaction Controller:

Extract value from JDBC request and use in next jdbc request

I am writing a JDBC test plan for Add and Delete records.
I have extracted queries from SQL Express Profiler for ADD and Delete.
Now when i run JDBC request for add and delete then record is added but same record not deleted. because delete query having different unique key (e.g.35) of record which was added when query was taken from express profiler. Every time i run add jdbc request then new record having different value i.e. incremented.
Is there any way to extract unique key from Jdbc request of ADD and use it in Delete JDBC request so that same record could be deleted?
Response of ADD JDBC Request:
Delete query where i want to use unique value from response of ADD request:
In JDBC Request sampler you have Variable Names input where you can specify the JMeter Variables which will hold the results values. So given you put ScopeIdentity there most likely you will be able to refer its value later on as ${ScopeIdentity_1}
References:
JDBC PostProcessor Example in Jmeter for Response assertion
Debugging JDBC Sampler Results in JMeter
You can solve this using the varible field that you have in your JDBC Request sampler.
More information on the parameters used in JDBC requests are found here:
https://jmeter.apache.org/usermanual/component_reference.html#JDBC_Request
Let me explain how to use them with your problem as an example:
For the ADD query enter the variable name in the Variables Names field:
ScopeIdentity
This will result in the thread local value for Scopeidentity being saved in a variable named "Scopeidentity" with a suflix of the thread-number. So for one-thread scenario the variable is ScopeIdentity_1
For the DELETE query enter this where you want to refer to the value:
${__V(Scopeidentity_${__threadNum})}
Where ${__threadNum} gives the number of the current thread.
https://jmeter.apache.org/usermanual/functions.html#__threadNum
Where ${__V()} is used to nest the variable name and the result of __threadNum.
https://jmeter.apache.org/usermanual/functions.html#what_can_do
Response for Add request wouldn't retrieve your unique_id.
Add an additional step between ADD and DELETE as below:
SELECT TOP 1 unique_id
FROM table
WHERE condition
order by unique_id desc;
Store this response to a variable and use it in the DELETE statement.

JMeter JDBC Call returns the value as parameter name if the value received from DB is null

I am using a JDBC PreProcessor in JMeter to fetch a value from the DB before firing a SOAP call which needs to be enriched with that information.
I have assigned a variable XYZ to fetch the value returned from DB.
If there is a value returned from DB, i am able to get that value using ${XYZ_1} successfully, however if the value returned from DB is nothing (null) (as seen in DB), the value returned using ${XYZ_1} is shown as ${XYZ_1}.
I am using this variable in Sampler as
<Location>${XYZ_1}</Location>
Ex: If DB returns value as 'California', i get it as <Location>California</Location>
If DB returns value as nothing (null), the value looks like
<Location>${XYZ_1}</Location>.
Now my issue here is, if DB returns the value as nothing (null), i want the value to be set as nothing. So it should like like below
<Location></Location>
Any suggestions on this?
You could modify your SQL so that instead of null it returns empty.
Another option is to put a JSR223 Post Processor + Groovy (or Beanshell Post Processor) after your JDBC Post Processor that would test the variable and if null put empty String instead.

Resources