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 Scott Eade <se...@backstagetech.com.au> on 2002/07/11 01:43:54 UTC
Re: JMeter variables and the beginnings of a JMeter scripting
languag e
Mike,
Interesting thread.
I would just like to add changes along these lines would solve a problem
that I have.
As outlined below the Default Config can supply the domain name and port to
use throughout the test unless overridden for specific test elements. My
application is servlet based and I happen to deploy it under a number of
different servlet prefixes. It would thus be convenient for me to be able
to define a HTTP Request Path prefix that I can then optionally use in my
test elements.
Cheers,
Scott
--
Scott Eade
Backstage Technologies Pty. Ltd.
> From: "Stover, Michael" <Mi...@usa.xerox.com>
> Reply-To: "JMeter Developers List" <jm...@jakarta.apache.org>
> Date: Wed, 10 Jul 2002 15:25:07 -0400
> To: "'jmeter-dev@jakarta.apache.org'" <jm...@jakarta.apache.org>
> Subject: JMeter variables and the beginnings of a JMeter scripting languag e
>
> Recently I've noticed increased interest in making JMeter react more
> dynamically during test runs. This seems only natural. The HTML Link
> Parser provides some support, but really only seems to wet the appetite for
> more powerful options.
>
> So, I'm starting on a more general solution and thought some of you might
> want to give some input.
>
> I would like to allow users to embed simple reference elements as values in
> config and sampler objects, and then have a separate place where the value
> of these referenced elements would be specified. Currently, people use a
> Default Config Object to set universal values such as DOMAIN and PORT. I
> think a reference replacement system might be more intuitive than the
> current overlay system. Rather than leaving the DOMAIN field blank and
> supplying a Default Config in the correct place in the tree, one would
> instead insert a reference - such as ${my_domain} - which would be replaced
> when the test is compiled. Elsewhere, a table of all reference +
> replacement values would allow the user to change all such values in one
> location.
>
> This has many advantages over the current situation - it's generic, meaning
> one can use this system for any protocol. Currently, there is an HTTP
> Defaults, and FTP Defaults, etc.
> It allows all such elements to have one centralized home which should be
> easier to manage.
>
> For such user-defined values, this is simple. I've taken the variable style
> from Ant - ${var-name} - because I like it. Much preferable to XML IMO. A
> bit more explicit than a Perl style as well. Thoughts on this format would
> be much appreciated. Anything simpler than what I've come up with that does
> the job.
>
> Certain built-in values would be equally simple:
> ${__threadNumber}
> ${__threadName}
> ${__timestamp}
> ${__counter(0,100,1)}
> ${__xmlFile(c:\jmeter\bin\users.xml,username)}
> ${__literal[[${ant-variable}]]}
>
> Well, some are not so simple, but I'm hoping you get the idea.
> ${__threadNumber} is replaced by the current thread's number. I'm using
> "__" to indicate a built-in value as opposed to a user-defined variable
> name.
>
> ${__counter(0,100,1)} - for those familiar with the HTTP Parameter Mask,
> this might look familiar. The first number gives the starting point, then
> the end point, and the last is the increment. I think it's another way of
> getting the same effect. By embedding this variable into an argument name
> or value, you can get a similar effect:
>
> NAME PARAMETER
> username user${__counter(0,100,1)}
>
> This would create arguments in the following manner:
> username=user0
> username=user1
> username=user2
> etc...
>
> Similarly, I see ${__xmlFile(c:\jmeter\bin\users.xml,username)} as a
> replacement for the User Parameter Modifier, though some complications have
> to be worked out.
>
> And ${__literal[[Anything at all]]} allows a user to use values that might
> otherwise conflict with this system. Although, that should be very rare,
> because variables not found in the table would be passed on as is.
>
> This is getting long, but I've implemented a more complex built-in variable
> that allows users to scrape values from responses using regular expressions.
> Right now, it takes the following form:
>
> ${__responseVariable(REGULAR_EXPRESSION,prefix$1sometext$2suffix,[ALL|#|RAND
> |0.###],[between])}
>
> Take it slow. From the beginning, "__" indicates a built-in variable.
> "responseVariable" is the name used to find the correct Java class to
> execute. Then there are parentheses with arguments - just like the
> __counter(0,100,1) example above. There are 4 possible arguments, but only
> the first 2 are required (thus the square brackets showing optional args).
>
> The first argument is a regular expression, Perl style. This regular
> expression will be applied to the response data received from the previous
> request.
>
> The second argument provides a template for generating the string that will
> be substituted for this whole mess at run time. The variables ($1,$2) refer
> to regular expression groups (see Perl docs for more info).
>
> The next argument indicates which match, or matches, to use - if your
> regular expression finds more than one match in the data. ALL means use
> all. A number (starting from 1) indicates which value by it's order in the
> response. Thus, if you find 5 successful matches, a number of "3" means to
> use the third match. RAND means pick one at random. A float value is also
> a possible value.
>
> The fourth argument is a static string to go between matched values if ALL
> was chosen as the third argument value.
>
> Somewhat complex, though I envision a dialog allowing users to input these
> arguments in a friendly manner and then generating this string for them.
>
> -Mike
>
> --
> To unsubscribe, e-mail: <ma...@jakarta.apache.org>
> For additional commands, e-mail: <ma...@jakarta.apache.org>
>
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>