You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jmeter-dev@jakarta.apache.org by Jordi Salvat i Alabart <js...@atg.com> on 2002/07/26 00:33:22 UTC

What a nightmare!

Hi.

As you may know, I've lately spent quite a bit of time trying out and 
learning how to use JMeter, with the intent of replacing the tool I've 
been using so far (which is very expensive but totally innapropriate for 
the job I usually do).

This week I've had my first opportunity to use JMeter in the real world, 
to help a customer load-test their application. Frankly, it's been a 
real nightmare, and it's not yet over.

To start with, the application is pretty complex. It uses all sorts of 
tricks to do its function: multiple forms chained up which carry data 
from one to the next, POST requests with additional parameters in the 
URI, fancy parameter encodings, lots of redirects, most of them with 
parameters, forms with dynamically-named fields,... Also, probably 
wasn't helping that I have never worked with the development team, and 
so I just didn't know about the internals -- I had to go guessing as I 
progressed.

I've not yet had time to isolate and rationalize the problems I've run 
into, so I can post them as specific bugs and enhancement proposals, but 
here's a quick description. Please don't take it for what it's not: it's 
intended to be constructive criticism: I appreciate the speed at which 
JMeter is improving and I hope knowledge of these limitations will help 
working in the right (or at least in the most urgent) direction:

- The HTTPSampler and the HTTP Proxy don't allow POST requests with 
additional parameters in the query string (in the URI).

- The HTTPSampler and the HTTP Proxy fail on redirects which carry 
parameters in the query string (they do the redirect but don't pass the 
parameters on).

- The HTTPSampler generates one single Sample even if it does a 
redirect. This makes debugging the scripts really difficult, because the 
information on the original request is lost (you only get the page at 
the end of the redirect).

- It's not possible to use any unusual characters in request parameters: 
the HTTPSampler will always URLEncode them -- even if they were not 
encoded when the HTTP Proxy received them.

- I would summarize all of the above in that they get too much in the 
way -- mainly for the HTTP Proxy.

- When trying to correct the above, I ran into lots of trouble because 
the protocol.http packages are too convoluted: looks like each class is 
tightly coupled to each other class there. I think those packages call 
for refactoring.

- The interface to edit the request parameters needs much improvement. I 
had lots of parameter names 30 or 40 characters long which was really 
hard to edit in that very small field which only accepts deleting and 
writing at the end. Add a __regexp function to cope with variable form 
field names and it's madness.

- Do we really need embedded functions? I have a feeling that just 
having placeholders (aka variables) and modifiers to define them would 
do the job just as well, and would be much simpler.

- The View Results Tree Listener is a very useful debugging tool. I was 
just missing the information sent in POST requests and a "browse" 
button. Would also be cool if it labelled events as per the originating 
sampler, instead of the URL. A "clean" button would also be extremely handy.

- I also saw the agregate report throwing lots of 
ConcurrentUpdateExceptions ... don't yet know if they are harmful.

- The counters in the User Parameter Modifier are not "thread safe": 
each counter goes its own way. To put a simpler equivalent example: I 
had registered users named "user1" to "user200" with passwords "pwd1" to 
"pwd200", and I found no way to ensure each thread would properly log 
in. My case was even worse because I needed to use the same number in 
two consecutive pages. We need variables (not only constants) real soon 
(in case they are not already there).

- The same goes for the need to use the same regexps again and again -- 
which very badly affected the performance of my scripts -- variables and 
modifiers would probably cure this.

Finally, less urgent but probably most important, I feel the code is 
generally too convoluted. I can't tell if it's only in the http packages 
as I mentioned before or it's a more general problem, but the result is 
that it makes the threshold for new contributors very high. I will make 
this the subject of a later e-mail when the dust settles down.

Faithfully,

Jordi Salvat i Alabart


--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


How kool! [was: What a nightmare!]

Posted by Jordi Salvat i Alabart <js...@atg.com>.
Hi.

I'm amazed. I've finally found time to try to isolate and reproduce, and 
eventually report, all the problems I mentioned in my e-mail.

To my grateful surprise, most of them (the most important, actually) are 
already solved in the latest release. Many many thanks to whoever has 
been working on these (mostly Mike, I guess).

> - The HTTPSampler and the HTTP Proxy don't allow POST requests with 
> additional parameters in the query string (in the URI).

This is solved. Thanks.

> - The HTTPSampler and the HTTP Proxy fail on redirects which carry 
> parameters in the query string (they do the redirect but don't pass the 
> parameters on).

This is solved. Thanks.

> - The HTTPSampler generates one single Sample even if it does a 
> redirect. This makes debugging the scripts really difficult, because the 
> information on the original request is lost (you only get the page at 
> the end of the redirect).

This is unchanged, but should be OK, since I always have the option of 
not following redirects (which is the default).

> - It's not possible to use any unusual characters in request parameters: 
> the HTTPSampler will always URLEncode them -- even if they were not 
> encoded when the HTTP Proxy received them.

This is still there and causing me trouble, but since automatic 
URL-encoding of parameter names and values is probably a desirable 
functionality, I'll probably file an enhancement request so that you can 
choose to URL-encode or not.

> - The interface to edit the request parameters needs much improvement. I 
> had lots of parameter names 30 or 40 characters long which was really 
> hard to edit in that very small field which only accepts deleting and 
> writing at the end. Add a __regexp function to cope with variable form 
> field names and it's madness.

The fields are now fully editable. Thanks.
The space devoted to parameters is WAY bigger now. Thanks.

> - The View Results Tree Listener is a very useful debugging tool. I was 
> just missing the information sent in POST requests and a "browse" 
> button. Would also be cool if it labelled events as per the originating 
> sampler, instead of the URL. A "clean" button would also be extremely 
> handy.

The information I was missing is now there. Cool!

I'll post enhancement requests for the browse button, event labelling 
and clean button.

> - I also saw the agregate report throwing lots of 
> ConcurrentUpdateExceptions ... don't yet know if they are harmful.

I still need to investigate this one.

> - The counters in the User Parameter Modifier are not "thread safe": 
> each counter goes its own way. To put a simpler equivalent example: I 
> had registered users named "user1" to "user200" with passwords "pwd1" to 
> "pwd200", and I found no way to ensure each thread would properly log 
> in. My case was even worse because I needed to use the same number in 
> two consecutive pages. We need variables (not only constants) real soon 
> (in case they are not already there).

The new __counter and __threadNum functions solve this -- at least in my 
case. I guess other functions can solve the issue in more general cases. 
Great!

Salut,

Jordi.


--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>