jmeter-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From prasanna bhat <prasannabha...@gmail.com>
Subject Re: Thread Synchronization
Date Sun, 09 May 2010 07:28:33 GMT
Hi Deepak,



>> by loading the string form of all the ids into properties object , where
based on the thread number one gets picked



Well in the beginning I tried using the setproperty() and __P() functions to
set and get the request Ids. I observed some weird errors.



I used WRS_Property to set the Request Ids which were chosen for approval
and I initially set it to 0 in the test plan.



+ThreadGroup ( 5threads, 2loops)
++Http sampler 1 (This  sampler  will fetch all the requests that are
waiting for approval)
+++ BSF Post Processor 1

                [

                                Var prevRequestId=read WRS_Property;



                                If WRS_Property is 0

                                                Then select the first
request id

                                Else

                                                Loop:

                                                                Generate a
random number and get the request Id corresponding to that random number.

                                                                If this
request Id is not same as prevRequestId


Break;



                                                Vars.put(“curRequestId”,
selectedRequestId);



                ]
++ Http Sampler 2 (The sampler sends the request id which has to be
approved)
+++ BSF Post Processor 2

                [



                                Var requestIdList=read WRS_Property;



                                If requestIdList is 0

                                                Set WRS_Property to current
request Id

                                Else

                                                Set
WRS_Property=requestIdList+”;”+vars.get(currentRequestId);

                ]





With this script in place I got the output to be

--------------------------------------------------------------

Prev WRS id: 0

Cur WRS id150399

RequestId Set To: 150399

--------------------------------------------------------------

Prev WRS id: undefined;150399

Found curRequestId: 150399

RequestId Set To: undefined;150399;150399

--------------------------------------------------------------

Prev WRS id: undefined;null

Found curRequestId: null

RequestId Set To: undefined;null;null

--------------------------------------------------------------

Prev WRS id: undefined;null

Found curRequestId: null

RequestId Set To: undefined;null;null



I’m not able to figure out why is this happening.



I have also attached the code in the BSF post processor 1 and BSF post
processor 2 in the mail.



In the mean time I will try other options you have pointed out.



Thanks for your time.



Regards,

Prasanna




On Sat, May 8, 2010 at 9:32 PM, Deepak Shetty <shettyd@gmail.com> wrote:

> Hi
>  If it isnt possible to choose a simple scheme (like map a thread number to
> the id picked i.e. thread1 always picks first id , thread 2 picks second
> id)
>
> or by loading the string form of all the ids into properties object , where
> based on the thread number one gets picked
>
> then you'd have to either
> split the fetching of ids separate to the approval process
> Thread Group 1
> +Sampler 1
> ++Write all ids to CSV
> Thread Group 2
> +Sampler 2
> ++CSV DataSet Config
>
> Its also possible to combine the two thread groups into one (this needs
> some
> custom java code)
> Thread Group
> +Sampler1
> ++Each writes to their own CSV
> +Ensure only one thread writes a combined file , while the rest wait
> +Sampler 2
> CSV Data Set Config
>
> or some custom java object which allows concurrent access and can keep a
> list of ids fetched(static) and hand out  a different one to whoever
> requests it
>
> regards
> deepak
>
>
> On Sat, May 8, 2010 at 6:18 AM, prasanna bhat <prasannabhat38@gmail.com
> >wrote:
>
> > Hi,
> >
> > I have interesting use case in which the value of a given variable has to
> > be
> > compared across threads. I will try my best to illustrate it below.
> >
> > TestPlan
> > +ThreadGroup ( 5threads, 2loops)
> > ++Http sampler 1 (This  sampler  will fetch all the requests that are
> > waiting for approval)
> > +++ BSF Post Processor 1
> > ++ Http Sampler 2 (The sampler sends the request id which has to be
> > approved)
> > +++ BSF Post Processor 2
> >
> > The response of Http sampler 1 will contain a list of ids of the requests
> > to
> > be approved. I'm fetching the first request id and sending it as a
> > parameter
> > to Http Sampler 2 for approval.
> >
> > The problem occurs when the 1st thread has picked a certain request id
> (say
> > request id 1101) and send it as a parameter to Http Sampler 2 for
> approval,
> > but before this request has been approved the second thread gets active
> and
> > send a http request (Http Sampler 1) and receives all the request ids to
> be
> > approved as a response, therefore the second thread also sees request id
> > 1101 (Since it has not been approved yet) and picks it up for approval
> i.e.
> > the same request id is passed to Http Sampler 2 for second thread also.
> >  Now
> > there is clash of multiple threads trying to approve the same request and
> > the server responds with an error.
> >
> >
> >
> > So my question is, how do I ensure different threads pick different
> request
> > id (i.e one that is not picked up by any of the other active threads)??
> >
> >
> >
> > Please let me know if I have to make it more clearer.
> >
> >
> >
> > Thanks,
> >
> > Prasanna
> >
>

Mime
View raw message