How to run Karate and Gatling with Gradle build system for performance testing

548 Views Asked by At

I'm trying to run a Karate test as a Gatling performance test. I am being use Gradle however. When trying to run under Gradle the below disaster unfolds.

Appreciate any ideas what might be causing KarateAction to crash.

i have added Gatling dependencies in gradle build

BUILD GRADLE:

plugins {
//   id 'org.springframework.boot' version '2.5.5'
    //  id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
    id 'net.researchgate.release' version '2.8.1'
}

group 'org.ikano'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

ext {
    cucumberVersion = "5.7.0"
    karateVersion = '1.1.0'
    //  kafkaProducer = "3.2.0"
    // kafkaConsumer = "3.2.0"
    // kafkaCommonModel = "3.2.0"
    dbUtilsVersion = "1.7"
}

apply plugin: 'scala'

configurations {
    gatling
}


sourceSets {
    test {
        resources {
            srcDir file('src/test/java')
            exclude '**/*.java'
            exclude '**/*.scala'
        }
    }
}


test {
    useJUnitPlatform()
    systemProperty "karate.options", System.properties.getProperty("karate.options")
    systemProperty "karate.env", System.properties.getProperty("karate.env")
    outputs.upToDateWhen { false }
}

repositories {
    maven {
        url "https://artifacts.le.tnt.bank.*****/repository/maven-****"
        credentials {
            username '*******'
            password '**********'
        }
        mavenCentral()
    }
}
task karateDebug(type: JavaExec) {
    classpath = sourceSets.test.runtimeClasspath
    main = 'com.intuit.karate.cli.Main'
}



dependencies {
    implementation("commons-configuration:commons-configuration:1.10")
    implementation("org.json:json:20180813")
    implementation("javax.mail:mail:1.5.0-b01")
    implementation("com.jayway.jsonpath:json-path:2.6.0")
    implementation("com.googlecode.json-simple:json-simple:1.1.1")
    // implementation("org.springframework:spring-context:5.3.13")
    implementation("org.apache.poi:poi-ooxml:4.1.1")
    // implementation("org.springframework:spring-webmvc:4.3.0.RELEASE")
    testImplementation("com.intuit.karate:karate-core:1.2.0")
    testImplementation("junit:junit:4.13.2")
    testImplementation("com.intuit.karate:karate-junit5:1.1.0")
    testImplementation("com.intuit.karate:karate-gatling:1.1.0")
    testImplementation("com.intuit.karate:karate-apache:0.9.6")
    testImplementation("net.masterthought:cucumber-reporting:3.8.0")
    testImplementation("hu.blackbelt.bundles.poi:org.apache.poi:4.1.2_2")
    testImplementation("org.apache.poi:poi:4.1.1")
    testImplementation("io.rest-assured:rest-assured:4.3.0")
    testCompile 'com.intuit.karate:karate-junit5:1.1.0'
    testCompile "com.intuit.karate:karate-gatling:${karateVersion}"

    //  compile group: 'org.springframework.boot', name: 'spring-boot-starter-parent', version: '2.5.5', ext: 'pom'

    //implementation group: 'org.springframework', name: 'spring-websocket', version: '5.2.9.RELEASE'
    //implementation group: 'org.springframework', name: 'spring-messaging', version: '5.2.9.RELEASE'

//    implementation 'org.springframework.boot:spring-boot-starter-web'
    //   implementation 'org.springframework.boot:spring-boot-starter'
    //  testImplementation('org.springframework.boot:spring-boot-starter-test')
    //{exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'}

    compile group: 'joda-time', name: 'joda-time', version: '2.10.6'

    // implementation "com.ikano.ipay.eem.kafka:kafka-producer:${kafkaProducer}"
    // implementation "com.ikano.ipay.eem.kafka:kafka-consumer:${kafkaConsumer}"
    // implementation "com.ikano.ipay.eem.kafka:kafka-common-model:${kafkaCommonModel}"



    implementation group: 'redis.clients', name: 'jedis', version: '2.9.0'
    implementation group: 'org.redisson', name: 'redisson', version: "3.16.3"

    compile group: 'org.apache.poi', name: 'poi', version: '4.1.2'
    compile group: 'org.apache.poi', name: 'poi-ooxml', version: '4.1.2'

    compile group: 'commons-dbutils', name: 'commons-dbutils', version: "$dbUtilsVersion"
task gatlingRun(type: JavaExec) {
    group = 'Web Tests'
    description = 'Run Gatling Tests'
    new File("${buildDir}/reports/gatling").mkdirs()

    classpath = sourceSets.test.runtimeClasspath
    main = "io.gatling.app.Gatling"
    args = [
            // change this to suit your simulation entry-point

            '-s', 'performance2.userSimulation',
            '-rf', "${buildDir}/reports/gatling"
    ]
    systemProperties System.properties
}

group = "org.ikano"
version = "1.0-SNAPSHOT"
description = "IPay"
java.sourceCompatibility = JavaVersion.VERSION_1_8

FOR SCALA

package performance

import com.intuit.karate.gatling.PreDef._
import io.gatling.core.Predef._
import io.gatling.core.structure.ScenarioBuilder

import scala.concurrent.duration._


class UserSimulation extends Simulation{

  val getSingleUser: ScenarioBuilder = scenario("UK Onboarding - Verify user is able to onboard successfully").exec(karateFeature("classpath:performance/onboarding.feature"))

  setUp(
    getSingleUser.inject(rampUsers(10).during(5 seconds))

  )
}

Command Line :gradle gatlingRun

Starting a Gradle Daemon (subsequent builds will be faster)

> Task :gatlingRun
16:10:18.039 [main] INFO  i.g.c.config.GatlingConfiguration$ - Gatling will try to use 'gatling.conf' as config file.
16:10:20.052 [GatlingSystem-akka.actor.default-dispatcher-6] INFO  akka.event.slf4j.Slf4jLogger - Slf4jLogger started
16:10:22.818 [main] ERROR io.gatling.app.Gatling$ - Run crashed
java.lang.IllegalArgumentException: User defined Simulation class performance2.userSimulation could not be loaded
        at io.gatling.app.Selection$Selector.findUserDefinedSimulationInClassloader$1(Selection.scala:80)
        at io.gatling.app.Selection$Selector.$anonfun$singleSimulationFromConfig$4(Selection.scala:85)
        at scala.Option.orElse(Option.scala:477)
        at io.gatling.app.Selection$Selector.$anonfun$singleSimulationFromConfig$3(Selection.scala:85)
        at scala.Option.flatMap(Option.scala:283)
        at io.gatling.app.Selection$Selector.singleSimulationFromConfig(Selection.scala:83)
        at io.gatling.app.Selection$Selector.$anonfun$selection$1(Selection.scala:52)
        at scala.Option.getOrElse(Option.scala:201)
        at io.gatling.app.Selection$Selector.selection(Selection.scala:44)
        at io.gatling.app.Selection$.apply(Selection.scala:36)
        at io.gatling.app.Runner.run0(Runner.scala:61)
        at io.gatling.app.Runner.run(Runner.scala:49)
        at io.gatling.app.Gatling$.start(Gatling.scala:83)
        at io.gatling.app.Gatling$.fromArgs(Gatling.scala:45)
        at io.gatling.app.Gatling$.main(Gatling.scala:37)
        at io.gatling.app.Gatling.main(Gatling.scala)
Caused by: java.lang.ClassNotFoundException: performance2.userSimulation
        at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:264)
        at io.gatling.app.Selection$Selector.$anonfun$singleSimulationFromConfig$2(Selection.scala:71)
        at scala.util.Try$.apply(Try.scala:210)
        at io.gatling.app.Selection$Selector.findUserDefinedSimulationInClassloader$1(Selection.scala:71)
        ... 15 common frames omitted
Exception in thread "main" java.lang.IllegalArgumentException: User defined Simulation class performance2.userSimulation could not be loaded
        at io.gatling.app.Selection$Selector.findUserDefinedSimulationInClassloader$1(Selection.scala:80)
        at io.gatling.app.Selection$Selector.$anonfun$singleSimulationFromConfig$4(Selection.scala:85)
        at scala.Option.orElse(Option.scala:477)
        at io.gatling.app.Selection$Selector.$anonfun$singleSimulationFromConfig$3(Selection.scala:85)
        at scala.Option.flatMap(Option.scala:283)
        at io.gatling.app.Selection$Selector.singleSimulationFromConfig(Selection.scala:83)
        at io.gatling.app.Selection$Selector.$anonfun$selection$1(Selection.scala:52)
        at scala.Option.getOrElse(Option.scala:201)
        at io.gatling.app.Selection$Selector.selection(Selection.scala:44)
        at io.gatling.app.Selection$.apply(Selection.scala:36)
        at io.gatling.app.Runner.run0(Runner.scala:61)
        at io.gatling.app.Runner.run(Runner.scala:49)
        at io.gatling.app.Gatling$.start(Gatling.scala:83)
        at io.gatling.app.Gatling$.fromArgs(Gatling.scala:45)
        at io.gatling.app.Gatling$.main(Gatling.scala:37)
        at io.gatling.app.Gatling.main(Gatling.scala)
Caused by: java.lang.ClassNotFoundException: performance2.userSimulation
        at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:264)
        at io.gatling.app.Selection$Selector.$anonfun$singleSimulationFromConfig$2(Selection.scala:71)
        at scala.util.Try$.apply(Try.scala:210)
        at io.gatling.app.Selection$Selector.findUserDefinedSimulationInClassloader$1(Selection.scala:71)
        ... 15 more

> Task :gatlingRun FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':gatlingRun'.
> Process 'command 'C:\Program Files\Amazon Corretto\jdk1.8.0_282\bin\java.exe'' finished with non-zero exit value 1

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org
Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.9.1/userguide/command_line_interface.html#sec:command_line_warnings
BUILD FAILED in 44s
3 actionable tasks: 1 executed, 2 up-to-date

1

There are 1 best solutions below

0
On

The package name is performance but inside the log it says:

performance2.userSimulation

Can you change it to in the run command:

performance.userSimulation

I think that is the issue you are facing. It cant find the simulation class.