我最近参与了一个项目,我们必须将出色的负载测试工具 Gatling 集成到基于 Gradle 的构建中。有可用的 gradle 插件可以使这变得容易,其中两个是 this 和 this,但是对于大多数需求,只需简单地执行 命令行工具 本身就足够了,所以这篇文章将详细介绍如何将 gatling 连接到 gradle 构建中,并在此过程中理解一些好的 gradle 概念。
要执行 gatling cli,我需要做一些事情,我需要一个 Gatling 模拟的源代码和相关内容的位置,我需要一种获取 gatling 库的方法。这是 Gradle 的两个概念(SourceSets 和 Configuration)发挥作用的地方。
让我们从第一个开始——SourceSets。
SourceSets 只是相关文件的逻辑分组,最好通过示例进行演示。如果我要在 gradle 构建中添加一个“java”插件:
apply plugin: 'java'
sourceSets 属性现在会显示两个值“main”和“test”,如果我想找到这些 sourceSets 的详细信息,可以使用 gradle 任务来打印详细信息:
task sourceSetDetails { doLast { sourceSets { main { println java.properties println resources.properties } test { println java.properties println resources.properties } } } }
回到 gatling,我基本上可以创建一个新的 sourceSet 来保存 gatling 模拟:
sourceSets { simulations }
现在期望加特林模拟位于“src/simulations/java”中,与之相关的资源位于“src/simulations/resources”文件夹中,这没关系,但理想情况下我希望将它与项目完全分开来源。我希望我的文件夹结构包含“模拟/负载”中的负载模拟和“模拟/资源”文件夹中的资源。这可以通过首先应用“scala”插件来调整,它为项目带来了 scala 编译支持,然后沿着这些行修改“模拟”源集:
apply plugin: 'scala' sourceSets { simulations { scala { srcDirs = ['simulations/load'] } resources { srcDirs = ['simulations/resources'] } } }
通过这些更改,我现在可以将我的模拟放在正确的位置,但是 gatling 和 scala 的依赖性没有被引入,这就是 gradle 的“配置”功能发挥作用的地方。
Gradle Configuration是一种将相关依赖项组合在一起的方法。如果我要使用任务打印现有的配置集:
task showConfigurations { doLast { configurations.all { conf -> println(conf) } } }
这些显示:
configuration ':archives' configuration ':compile' configuration ':compileClasspath' configuration ':compileOnly' configuration ':default' configuration ':runtime' configuration ':simulationsCompile' configuration ':simulationsCompileClasspath' configuration ':simulationsCompileOnly' configuration ':simulationsRuntime' configuration ':testCompile' configuration ':testCompileClasspath' configuration ':testCompileOnly' configuration ':testRuntime' configuration ':zinc'
“compile” 和 “testCompile” 应该很熟悉,这是一个普通的源代码依赖和一个测试依赖通常是这样声明的:
dependencies { compile 'org.slf4j:slf4j-api:1.7.21' testCompile 'junit:junit:4.12' }
然而,看起来现在也有“模拟”源集的配置——“simulationsCompile”和“simulationsRuntime”等,因此我可以使用这些配置声明我的 gatling 模拟所需的依赖项,但我的意图是声明一个自定义配置只是为了更详细地讨论这个概念,所以让我们明确地声明一个:
configurations { gatling }
并使用此配置声明 gatling 的依赖项:
dependencies { gatling 'org.scala-lang:scala-library:2.11.8' gatling 'io.gatling.highcharts:gatling-charts-highcharts:2.2.5' }
几乎到此为止,现在我们如何告诉模拟源集中的源使用 gatling 配置中的依赖项……通过稍微调整 sourceSet:
sourceSets { simulations { scala { srcDirs = ['simulations/load'] } resources { srcDirs = ['simulations/resources'] } compileClasspath += configurations.gatling } }
定义了源集和配置后,我们需要做的就是编写一个任务来运行 gatling 模拟,可以遵循以下几行:
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', 'simulations.SimpleSimulation', '-sf', 'simulations/resources', '-df', 'simulations/resources', '-rf', "${buildDir}/reports/gatling" ] }
查看模拟的编译源代码和 gatling 配置的依赖项如何被设置为“JavaExec”任务的类路径
查看此内容的一个好方法是查看我在 my github repo 中的完整工作示例 – https://github.com/bijukunjummen/cf-show-env
标签2: Java教程地址:https://www.cundage.com/article/jcg-integrating-gatling-gradle-build-understanding-sourcesets-configuration.html