我正在尝试将空手道测试作为加特林性能测试。使用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
答案 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.gradle
将src/test/java
定义为资源文件夹:
test {
resources {
srcDir file('src/test/java')
exclude '**/*.java'
}
}
karate gatling demo将src/test/scala
定义为资源文件夹。
这是必要的,因为否则,scala / java源文件旁边的*.feature
文件不会被视为生成的工件的一部分。
此外,运行加特林测试时,您正在使用simulation
源集的类路径。确保您的*.feature
包含在该类路径中。
作为替代方案,您可以将*.feature
文件放在src/test/resources/com/your/package
下,但这会增加功能部件与源代码文件之间的“距离”。
调试提示:
打印build/resources
文件夹的文件树,以检查功能文件是否包含在生成的构建工件中,并且该路径与您在运行程序中引用的路径匹配。
让我知道这是否有用!