将 Gatling 集成到 Gradle 构建中——了解 SourceSets 和配置

位置:首页>文章>详情   分类: Java教程 > 编程技术   阅读(238)   2023-11-16 07:14:57

我最近参与了一个项目,我们必须将出色的负载测试工具 Gatling 集成到基于 Gradle 的构建中。有可用的 gradle 插件可以使这变得容易,其中两个是 thisthis,但是对于大多数需求,只需简单地执行 命令行工具 本身就足够了,所以这篇文章将详细介绍如何将 gatling 连接到 gradle 构建中,并在此过程中理解一些好的 gradle 概念。

SourceSets 和配置

要执行 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 场景

定义了源集和配置后,我们需要做的就是编写一个任务来运行 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

相关阅读

Java HashSet 教程展示了如何使用 Java HashSet 集合。 Java哈希集 HashSet 是一个不包含重复元素的集合。此类为基本操作(添加、删除、包含和大小)提供恒定时间性...
SpringApplicationBuilder 教程展示了如何使用 SpringApplicationBuilder 创建一个简单的 Spring Boot 应用程序。 春天 是用于创建企业应...
通道是继 buffers 之后 java.nio 的第二个主要新增内容,我们在之前的教程中已经详细了解了这一点。通道提供与 I/O 服务的直接连接。 通道是一种在字节缓冲区和通道另一端的实体(通...
课程大纲 Elasticsearch 是一个基于 Lucene 的搜索引擎。它提供了一个分布式的、支持多租户的全文搜索引擎,带有 HTTP Web 界面和无模式的 JSON 文档。 Elasti...
解析器是强大的工具,使用 ANTLR 可以编写可用于多种不同语言的各种解析器。 在这个完整的教程中,我们将: 解释基础:什么是解析器,它可以用来做什么 查看如何设置 ANTLR 以便在 Java...
Java 是用于开发各种桌面应用程序、Web 应用程序和移动应用程序的最流行的编程语言之一。以下文章将帮助您快速熟悉 Java 语言,并迈向 API 和云开发等更复杂的概念。 1. Java语言...
Java中的继承是指子类继承或获取父类的所有非私有属性和行为的能力。继承是面向对象编程的四大支柱之一,用于提高层次结构中类之间的代码可重用性。 在本教程中,我们将了解 Java 支持的继承类型,...
Java Message Service 是一种支持正式通信的 API,称为 网络上计算机之间的消息传递。 JMS 为支持 Java 程序的标准消息协议和消息服务提供了一个通用接口。 JMS 提...
Java 项目中的一项常见任务是将日期格式化或解析为字符串,反之亦然。解析日期意味着你有一个代表日期的字符串,例如“2017-08-3”,你想把它转换成一个代表 Java 中日期的对象,例如Ja...
之前,我介绍了spring 3 + hibernate 集成 示例和struts 2 hello world 示例。在本教程中,我将讨论在将 spring 框架与 struts 与 hibern...