Jun Zhuang wrote:
Hi,
I am seeing unexpected behavior with the timer scoping. I am not using
any timer for requests in the 1st half of my test plan (DB operations
only) and only using the Gaussian timer (2 - 4 secs) in the 2nd half
of the test, i.e., in the === Create Sample Batching Job === simple
controller, but it seems to be applied universally anyway. The reason
I am saying "applied universally" is because the test runs very fast
in GUI mode (~ 1 min) when I use the run without pause option or in
non-GUI mode by setting the timer to 0.
When I use the 2-4 seconds setting in non-GUI mode, the test ran for
more than 5 MINUTES and mostly in the 1st half the DB query part.
The timer is placed within the last request in each of the
transactions, so my understanding is it will only happen after the
last request in each transaction.
Inline image
Thanks.
Jun
On Saturday, December 2, 2023 at 01:06:06 PM EST, Jun Zhuang
<[email protected]> wrote:
Got it working. Thanks again for your help Felix!
3 things I had to do:
1. Use TWO double quotes for every double quote, so {"name":
"whatever"} becomes {""name"": ""whatever""}
2. Put the final JSON string in double quotes when making the
insertion request. Single quotes don't work!
3. In the JDBC request for insert, specify the data type as varchar
instead of text even though text is the data type for the column I
am inserting to. Otherwise, the inert will throw "invalid data
type: text" error.
So as in your example, the following should be supplied for the
insert: "{""name"": ""whatever""}"
Jun
On Saturday, December 2, 2023 at 08:49:39 AM EST, Felix Schumacher
<[email protected]> wrote:
Hi Jun,
I have attached a working minimal example, that uses a JSON string and
inserts that with a prepared statement.
It assumes a locally running postgres which can be changed of course.
The interesting part is:
* You have to escape comma and quotes in the JSON string.
Given a JSON object like {"name": "whatever"} you will have to add
quotes to mask the comma and quotes to mask the quotes.
Your string will have to look like "{""name"": ""whatever""}"
* You have to cast the parameter to json in your insert statement.
Add a ::json to the placeholder, as in "insert into something values
(?::json)"
Regards
Felix
Am 02.12.23 um 14:19 schrieb Jun Zhuang:
Hi Filex,
Thanks for the response. I tried with the single quotes and singles
quotes + ::json, still got the same error.
Just to be sure, are you using a Postgres DB? Also one thing I forgot
to mentioned in my original email was the field I am trying to insert
into is of data type *text* instead of varchar, I wonder if that makes
any difference?
Following are some screenshots of what I am trying to do:
Inline image
Inline image
Inline image
On Saturday, December 2, 2023 at 05:58:52 AM EST, Felix Schumacher
<[email protected]
<mailto:[email protected]>> wrote:
Hi Jun,
I am not sure, what you tried already. When I place the following text
into a JDBC Sampler's query field, I get no errors:
create table something (id int, data json);
insert into something values (1, '{"name": "whatever"}'::json);
Same result, when I remove the casting and use
create table something (id int, data json);
insert into something values (1, '{"name": "whatever"}');
Can you show us a minimal example that fails for you?
Regards
Felix
Am 01.12.23 um 23:24 schrieb Jun Zhuang:
> Hi,
> I am getting Cannot have quote-char in plain field:['{"] error when
trying to insert a JSON string into a Postgres DB table using JDBC
request.
> I tried the following but nothing worked:
> - place the JSON string in single quotes,
> - escaping the double quotes with \",
> - placing the string in $$<JSON string here>$$ but nothing worked.
> There is no issue with the connection and other select/insert
queries and I was able to insert from pgAdmin with the same string in
single quotes though.
> The JSON string looks like this: {"A":"A", "B":[{"C":"C"}]}
> I am really out of ideas at this time. Can someone help?
> Thanks,Jun
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail:[email protected]
<mailto:[email protected]>
For additional commands, e-mail:[email protected]
<mailto:[email protected]>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
Timers are executed *before* each Sampler it their scope. If you want it
to be executed after all Samplers you need to add a Flow Control Action
<https://jmeter.apache.org/usermanual/component_reference.html#Flow_Control_Action>
sampler and make the timer a child of this sampler. Or Flow Control
Action sampler can create delay on its own exactly where it's placed.
More information:
* Scoping Rules
<https://jmeter.apache.org/usermanual/test_plan.html#scoping_rules>
* A Comprehensive Guide to Using JMeter Timers
<https://www.blazemeter.com/blog/jmeter-timer>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]