jmeter-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sebb <seb...@gmail.com>
Subject Re: How do I call function passing in script variables
Date Sat, 07 Nov 2009 11:41:12 GMT
On 07/11/2009, mwolfe38 <mwolfe38@gmail.com> wrote:
>
>  Sorry maybe what I said was confusing.
>  I was using a BSF PostProcessor which mentions a "prev" variable which I
>  originally was using in a script right within jmeter, and it worked fine..
>  Problem was I needed to do that same thing over and over, so I figured it
>  would be better to put the logic into a function that would be available to
>  any beanshell script. So i made my own beanshell file with functions in it,
>  used the property:
>  beanshell.function.init (as described in the documentation)

That won't work with a postprocessor, it's only for actual BeanShell
function calls.
You need

beanshell.postprocessor.init=etc

>  and referenced
>  the file from a  user.properties file, and pointed it to my beanshell
>  script. I got that working just fine but couldn't figure out how to pass the
>  prev variable to the script.

I don't think you need to - just reference the variable.

>  Originally I tried calling the function
>  directly from the script, but that didn't work (btw, is there anyway to do
>  that without using the __BeanShell function?)

You can call functions directly.

>  It would sure be great if in the script section of the bsf postprocessor if
>  I could just call the function I created directly. Anyways, I figured that
>  the SampleResult value was the same thing as the prev variable in this case,
>  i was just kind of curious if I could use the variables exposed in the
>  script section rather than just those exposed to the __BeanShell function.
>

You can,  but you need to use the correct init file ...

>
>  sebb-2-2 wrote:
>  >
>  > On 06/11/2009, mwolfe38 <mwolfe38@gmail.com> wrote:
>  >>
>  >>  After playing around with it and reading some more documentation I
>  >> figured
>  >>  out how to do it.
>  >>  I needed to 1. Import the right package to use a SampleResult in my
>  >> script
>  >>  file:
>  >>  import org.apache.jmeter.samplers.SampleResult;
>  >>
>  >>  print("Including user defined functions");
>  >>
>  >> wrapResponse(SampleResult  result, String prefix,String suffix) {
>  >>         log.info("Calling wrapResponse");
>  >>         encoding = result.getDataEncodingWithDefault();
>  >>         String data = prefix + (new String(result.getResponseData())) +
>  >> suffix;
>  >>         result.setResponseData(data.getBytes(encoding));
>  >>  }
>  >>
>  >>
>  >> Then I called it like this:
>  >>
>  >>  ${__BeanShell(wrapResponse(SampleResult\,"<tiqs>"\,"<tiqs>"))}
>  >>
>  >>  I'm not sure how I could have accessed the prev value that is set for
>  >> the
>  >>  script, but the documentation said that there was a SampleResult
>  >> variable
>  >>  for the __BeanShell function and that did in fact work.
>  >
>  > The BeanShell function documentation does not mention "prev" at all:
>  >
>  > http://jakarta.apache.org/jmeter/usermanual/functions.html#__BeanShell
>  >
>  > However, "prev" is set for some of the BeanShell test elements - but
>  > they are not functions...
>  >
>  >>
>  >>
>  >>
>  >>  mwolfe38 wrote:
>  >>  >
>  >>  > I was able to get jMeter to include a file with beanshell functions in
>  >> it
>  >>  > automatically by using the
>  >>  > property:
>  >>  > beanshell.function.init=BeanShellFunction.bshrc
>  >>  >
>  >>  > However, I have a function which I want to use that will take a
>  >>  > SampleResult and do some modifications (basically its an xml document
>  >> but
>  >>  > its not well formed in that it has multiple top level nodes, I want to
>  >>  > wrap it and modify it.. I've got all this working but I can't get it
>  >>  > working within a function).
>  >>  >
>  >>  > here is what I have:
>  >>  > print("including functions");
>  >>  > wrapResponse(SampleResult result, String prefix,String suffix, ) {
>  >>  >       log.info("Calling wrapResponse");
>  >>  >       encoding = result.getDataEncodingWithDefault();
>  >>  >       String data = prefix + (new String(result.getResponseData())) +
>  >> suffix;
>  >>  >       result.setResponseData(data.getBytes(encoding));
>  >>  > }
>  >>  >
>  >>  > I know that this file is being included but i can't seem to pass the
>  >>  > result value to the function.
>  >>  >
>  >>  > This is within a BSF PostProcessor which has a prev variable which has
>  >> the
>  >>  > response in it (like I said, i've verified this works when not in a
>  >>  > function).
>  >>  >
>  >>  > The string values pass just fine though..
>  >>  >
>  >>  > I'm calling it like this:
>  >>  > ${__BeanShell(wrapResponse(prev\,"<tiqs>"\,"<tiqs>"))}
>  >>  >
>  >>  >
>  >>  >
>  >>  > Here is the error message:
>  >>  >
>  >>  > 2009/11/05 17:04:03 WARN  - jmeter.functions.BeanShell: Error running
>  >> BSH
>  >>  > script org.apache.jorphan.util.JMeterException: Error invoking bsh
>  >> method:
>  >>  > eval  Sourced file: inline evaluation of:
>  >>  > ``wrapResponse(prev,"<tiqs>","<tiqs>");'' : Undefined argument:
prev
>  >>  >       at
>  >>  >
>  >> org.apache.jmeter.util.BeanShellInterpreter.bshInvoke(BeanShellInterpreter.java:192)
>  >>  >       at
>  >>  >
>  >> org.apache.jmeter.util.BeanShellInterpreter.eval(BeanShellInterpreter.java:198)
>  >>  >       at
>  >> org.apache.jmeter.functions.BeanShell.execute(BeanShell.java:106)
>  >>  >       at
>  >>  >
>  >> org.apache.jmeter.engine.util.CompoundVariable.execute(CompoundVariable.java:143)
>  >>  >       at
>  >>  >
>  >> org.apache.jmeter.engine.util.CompoundVariable.execute(CompoundVariable.java:112)
>  >>  >       at
>  >>  >
>  >> org.apache.jmeter.testelement.property.FunctionProperty.getStringValue(FunctionProperty.java:89)
>  >>  >       at
>  >>  >
>  >> org.apache.jmeter.testbeans.TestBeanHelper.prepare(TestBeanHelper.java:69)
>  >>  >       at
>  >>  >
>  >> org.apache.jmeter.threads.JMeterThread.runPostProcessors(JMeterThread.java:622)
>  >>  >       at
>  >>  >
>  >> org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:356)
>  >>  >       at
>  >> org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:243)
>  >>  >       at java.lang.Thread.run(Unknown Source)
>  >>  > Caused by: java.lang.reflect.InvocationTargetException
>  >>  >       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>  >>  >       at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
>  >>  >       at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown
>  >> Source)
>  >>  >       at java.lang.reflect.Method.invoke(Unknown Source)
>  >>  >       at
>  >>  >
>  >> org.apache.jmeter.util.BeanShellInterpreter.bshInvoke(BeanShellInterpreter.java:171)
>  >>  >       ... 10 more
>  >>  > Caused by: Sourced file: inline evaluation of:
>  >>  > ``wrapResponse(prev,"<tiqs>","<tiqs>");'' : Undefined argument:
prev
>  >> : at
>  >>  > Line: 1 : in file: inline evaluation of:
>  >>  > ``wrapResponse(prev,"<tiqs>","<tiqs>");'' : ( prev , "<tiqs>"
,
>  >> "<tiqs>" )
>  >>  >
>  >>  >       at bsh.BSHArguments.getArguments(Unknown Source)
>  >>  >       at bsh.BSHMethodInvocation.eval(Unknown Source)
>  >>  >       at bsh.BSHPrimaryExpression.eval(Unknown Source)
>  >>  >       at bsh.BSHPrimaryExpression.eval(Unknown Source)
>  >>  >       at bsh.Interpreter.eval(Unknown Source)
>  >>  >       at bsh.Interpreter.eval(Unknown Source)
>  >>  >       at bsh.Interpreter.eval(Unknown Source)
>  >>  >       ... 15 more
>  >>  >
>  >>  >
>  >>
>  >>  --
>  >>
>  >> View this message in context:
>  >> http://old.nabble.com/How-do-I-call-function-passing-in-script-variables-tp26225188p26225648.html
>  >>
>  >> Sent from the JMeter - User mailing list archive at Nabble.com.
>  >>
>  >>
>  >>  ---------------------------------------------------------------------
>  >>  To unsubscribe, e-mail: jmeter-user-unsubscribe@jakarta.apache.org
>  >>  For additional commands, e-mail: jmeter-user-help@jakarta.apache.org
>  >>
>  >>
>  >
>  > ---------------------------------------------------------------------
>  > To unsubscribe, e-mail: jmeter-user-unsubscribe@jakarta.apache.org
>  > For additional commands, e-mail: jmeter-user-help@jakarta.apache.org
>  >
>  >
>  >
>
>
> --
>  View this message in context: http://old.nabble.com/How-do-I-call-function-passing-in-script-variables-tp26225188p26238884.html
>
> Sent from the JMeter - User mailing list archive at Nabble.com.
>
>
>  ---------------------------------------------------------------------
>  To unsubscribe, e-mail: jmeter-user-unsubscribe@jakarta.apache.org
>  For additional commands, e-mail: jmeter-user-help@jakarta.apache.org
>
>

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


Mime
View raw message