On 28 June 2011 23:18, E S <electric.or.sh...@gmail.com> wrote:
> I have a custom sampler I wrote that spins off a number of threads to do the
> actual requests, the results of which are added as sub results. So if your
> test plan ran 5 users and each user made 10 requests from their virtual
> browser, you'd have 5 results with 10 sub results under each one. The
> problem I am having is setting the parent sampler start and end times
> properly. Currently, I am starting the parent sampler before any of the
> sub-threads start and ending it when all of the sub-threads have finished.
> However, I'm getting times that are way too high in the parent sampler. My
> guess is that it has to do with thread scheduling. For example, maybe there
> are just so many threads running that it can't get to each one quick enough
> to set the timer off at a reasonable time after the last request finished.

What timer?

> An easy way to solve this would be to loop through the sub results and get
> the earliest start time and latest end time and set the parent result's
> start and end time equal to those. Unfortunately, I don't see a way to do
> this. The API only appears to expose the sampleStart() and sampleEnd()
> methods. You can't directly set the start and end times.

That is deliberate.

> Any ideas for a work around on this?

http://jakarta.apache.org/jmeter/api/org/apache/jmeter/samplers/SampleResult.html#addSubResult%28org.apache.jmeter.samplers.SampleResult%29

should do what you need.

>
> For reference, here is a watered down version of my sampler code:
>
> public SampleResult sample(Entry e) {
>   //pool of threads to do sub-requests
>   List<Thread> requestRunners = new ArrayList<Thread>();
>
>   //4 because most browsers support 4 simultaneous requests
>   for (int i = 0; i < 4; i++)
>      requestRunners.add(new Thread(new RequestRunner());
>
>   result.sampleStart();
>
>   //start all the sub-requests
>   for (Thread runner : requestRunners)
>      runner.start();
>
>   //wait for all sub-requests to finish
>   for (Thread runner : requestRunners) {
>      runner.join();
>   //this doesn't work right because too much time has passed since the last
> sub-request came back in and the next line of code
>   result.sampleEnd();
>   result.setSuccessful(allResultsSuccessful(result.getSubResults()));
>   return result;
> }
>

---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-user-unsubscr...@jakarta.apache.org
For additional commands, e-mail: jmeter-user-h...@jakarta.apache.org

Reply via email to