On 07/11/2009, mwolfe38 <[email protected]> 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 <[email protected]> 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: [email protected] > >> For additional commands, e-mail: [email protected] > >> > >> > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [email protected] > > For additional commands, e-mail: [email protected] > > > > > > > > > -- > 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: [email protected] > For additional commands, e-mail: [email protected] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]

