如何使用Gradle构建系统运行空手道和加特林

时间:2019-05-20 23:58:28

标签: karate gatling gatling-plugin

我正在尝试将空手道测试作为加特林性能测试。使用Maven时,我的整个设置工作完美。但是我被迫使用Gradle。尝试在Gradle下运行时,发生了以下灾难。

赞赏任何可能导致KarateAction崩溃的想法。

MyAPI.scala

deepIndex: true

build.gradle

class MyAPI extends Simulation {
    val protocol = karateProtocol(
        "/myendpoint" -> Nil
    )

    val action = karateFeature("classpath:org/mycompany/karate/tests/myAPI.feature@test=myTag")

    setUp(
        scenario("my-api")
            .exec(action)
            .inject(rampUsersPerSec(1) to (5) during (5 seconds))
            .protocols(protocol)
    )
}

命令行

buildscript {
    ext {
        karateVersion = '0.9.2'
    }
}

apply plugin: 'scala'

configurations {
    gatling
}

dependencies {
    testCompile("com.intuit.karate:karate-apache:${karateVersion}")
    testCompile("com.intuit.karate:karate-mock-servlet:${karateVersion}")
    testCompile("com.intuit.karate:karate-junit4:${karateVersion}")
    testCompile("com.intuit.karate:karate-gatling:${karateVersion}")
    testCompile("net.masterthought:cucumber-reporting:3.8.0")

    gatling "org.scala-lang:scala-library:2.12.8"
    gatling "io.gatling:gatling-app:3.0.2"
    gatling "io.gatling.highcharts:gatling-charts-highcharts:3.0.2"
    gatling "com.intuit.karate:karate-gatling:${karateVersion}"
}

sourceSets {
    simulations {
        scala {
            srcDirs = ['src/test/java/org/mycompany/karate/perf']
        }
        resources {
            srcDirs = ['src/test/java/org/mycompany/karate/perf']
        }

        compileClasspath += configurations.gatling
    }
    test {
        resources {
            srcDir file('src/test/java')
            exclude '**/*.java'
        }
    }
}

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

task gatlingRun(type: JavaExec) {
    description = 'Run Gatling Tests'
    new File("${buildDir}/reports/gatling").mkdirs()

    classpath = sourceSets.simulations.runtimeClasspath += configurations.gatling

    main = "io.gatling.app.Gatling"
    args = [
        '-s', 'org.mycompany.karate.perf.MyAPI',
        '-sf', 'src/test/java/org/mycompany/karate/perf',
        '-rf', "${buildDir}/reports/gatling"
    ]
    systemProperties System.properties
}

命令行输出

gradle gatlingRun

2 个答案:

答案 0 :(得分:3)

我有一个使用scala和java的gradle项目,并且必须创建gradle任务才能将资源移动到正确的文件夹中,以使其可用。

task copyResources(type: Copy) {
  from ("src/test/java/") {
    include "/**/*.feature"
    include "karate-config*.js"
    include "logback*.xml"
    include "/**/*.csv"
    include "/**/*.json"
  }
  into "$buildDir/classes/java/test/"

}

答案 1 :(得分:1)

这只是一个猜测。

您的build.gradlesrc/test/java定义为资源文件夹:

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

karate gatling demosrc/test/scala定义为资源文件夹。

这是必要的,因为否则,scala / java源文件旁边的*.feature文件不会被视为生成的工件的一部分。

此外,运行加特林测试时,您正在使用simulation源集的类路径。确保您的*.feature包含在该类路径中。

作为替代方案,您可以将*.feature文件放在src/test/resources/com/your/package下,但这会增加功能部件与源代码文件之间的“距离”。

调试提示: 打印build/resources文件夹的文件树,以检查功能文件是否包含在生成的构建工件中,并且该路径与您在运行程序中引用的路径匹配。

让我知道这是否有用!