Toro
Toro

Reputation: 33

Is Jmeter Beanshell support invoke function from Kotlin jar file

I have Kotlin class:

class Ping {
    fun ping(from: String): String{
        return "Hello $from"
    }
}

I've built jar file from this class. and included it to Jmeter and invoked it in BeanShell Sampler:

Ping ping = new Ping();

ping.ping("Jmeter");

it appear error Error invoking bsh method: eval Sourced file: inline evaluation of: ``Ping ping = new Ping(); ping.ping("Jmeter");'' : Method Invocation ping.ping

but I tried to change parameter of the method from string to int it work fine.

Any solution for this problem? Thank you!

Upvotes: 0

Views: 317

Answers (1)

Dmitri T
Dmitri T

Reputation: 168147

I cannot reproduce your issue using:

  1. JMeter 5.4.1

  2. Kotlin 1.5 (I copied the following .jars to JMeter Classpath just in case)

    kotlin-reflect.jar
    kotlin-reflect-sources.jar
    kotlin-stdlib.jar
    kotlin-stdlib-jdk7.jar
    kotlin-stdlib-jdk7-sources.jar
    kotlin-stdlib-jdk8.jar
    kotlin-stdlib-jdk8-sources.jar
    kotlin-stdlib-sources.jar
    kotlin-test.jar
    kotlin-test-sources.jar
    
  3. The following sample code:

    Ping ping = new Ping();
    
    log.info(ping.ping("Jmeter"));
    

enter image description here

So double check your .jar file and JMeter Classpath. It also worth trying to put your code inside try block like

try {
    Ping ping = new Ping();
    log.info(ping.ping("Jmeter"));
}
catch (Exception ex) {
    log.error("Beanshell failure", ex);
}

this way you will get the root cause of the problem in jmeter.log file

Also be aware that starting from JMeter 3.1 it's recommended to use JSR223 Test Elements and Groovy language for scripting so maybe it worth considering migrating to Groovy, see Apache Groovy - Why and How You Should Use It article for more details, it might be the case you won't need any Kotlin code.

Upvotes: 0

Related Questions