将Gatling集成到Gradle构建中–了解SourceSet和配置

我最近在一个项目中工作,我们不得不将出色的负载测试工具Gatling集成到基于Gradle的版本中。 有可用的gradle插件使此操作变得容易,其中两个是this和this ,但是对于大多数需求而言,只需简单执行命令行工具本身就足够了,因此本文将详细介绍如何将gatling连接起来进入gradle构建过程,并在此过程中了解一些良好的gradle概念。

来源集和配置

要执行gatling cli,我需要做一些事情,需要一个位置来获取Gatling模拟的源代码和相关内容,并且需要一种获取gatling库的方法。 这是Gradle的两个概念(SourceSets和Configuration)起作用的地方。

让我们从第一个开始-SourceSets。

源集

SourceSet只是相关文件的逻辑分组,最好通过一个示例进行演示。 如果要在gradle版本中添加“ java”插件:

apply plugin: 'java'

现在,sourceSets属性将显示两个值“ main”和“ test”,如果我想查找这些sourceSets的详细信息,可以使用gradle任务来打印详细信息:

task sourceSetDetails {doLast {sourceSets {main {println java.propertiesprintln resources.properties}test {println java.propertiesprintln resources.properties}}}
}

回到gatling,我基本上可以创建一个新的sourceSet来保存gatling模拟:

sourceSets {simulations
}

现在,这将使加特林模拟驻留在“ src / simulations / java”中,并将与之相关的资源驻留在“ src / simulations / resources”文件夹中,这是可以的,但理想情况下,我希望将其与项目完全分开资料来源。 我希望我的文件夹结构在“ simulations / load”文件夹中包含负载模拟,在“ simulations / resources”文件夹中包含资源。 可以通过首先应用“ scala”插件来对此进行调整,该插件为项目带来了scala编译支持,然后根据以下内容修改了“ simulations”源集:

apply plugin: 'scala'sourceSets {simulations {scala {srcDirs = ['simulations/load']}resources {srcDirs = ['simulations/resources']}}
}

通过这些更改,我现在可以将仿真放置在正确的位置,但是尚未掌握加特林和scala的依赖性,这就是gradle的“配置”功能所在的地方。

组态

Gradle配置是将相关依赖项分组在一起的一种方式。 如果我要使用任务来打印现有的一组配置:

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'   
}

但是,看起来现在还可以使用“ simulations”源集的配置–“ simulationsCompile”和“ simulationsRuntime”等,因此我可以使用这些配置声明我的加特林仿真所需的依赖项,但是我的目的是声明一个自定义配置只是为了进一步介绍该概念,因此让我们显式声明一个:

configurations {gatling
}

并使用此配置声明加特林的依赖关系:

dependencies {gatling 'org.scala-lang:scala-library:2.11.8'gatling 'io.gatling.highcharts:gatling-charts-highcharts:2.2.5'
}

几乎在那儿,现在我们如何通过稍微调整sourceSet来告诉模拟源集中的源使用来自gatling配置的依赖项。

sourceSets {simulations {scala {srcDirs = ['simulations/load']}resources {srcDirs = ['simulations/resources']}compileClasspath += configurations.gatling}
}

运行加特林场景

定义了源集和配置之后,我们要做的就是编写一个任务来运行一次加特林模拟,可以遵循以下步骤:

task gatlingRun(type: JavaExec) {description = 'Run gatling tests'new File("${buildDir}/reports/gatling").mkdirs()classpath = sourceSets.simulations.runtimeClasspath + configurations.gatlingmain = "io.gatling.app.Gatling"args = ['-s', 'simulations.SimpleSimulation','-sf', 'simulations/resources','-df', 'simulations/resources','-rf', "${buildDir}/reports/gatling"]
}

查看如何将模拟的编译源以及来自gatling配置的依赖项设置为“ JavaExec”任务的类路径

审查此问题的一种好方法是查看我在此处找到的完整的工作示例
我的github仓库 – https://github.com/bijukunjummen/cf-show-env

翻译自: https://www.javacodegeeks.com/2017/05/integrating-gatling-gradle-build-understanding-sourcesets-configuration.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/350385.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab bwlabel标记连通区域

[L,num] bwlabel(BW,n) 这里num返回的就是BW中连通区域的个数。返回一个和BW大小相同的L矩阵,包含了标记了BW中每个连通区域的类别标签,这些标签的值为1、2、num(连通区域的个数)。n的值为4或8,表示是按4连通寻找区域…

mysql遇到时区问题的坑(Java解决方案)

最近项目遇到一个坑&#xff0c;就是server和db之间存在时区问题&#xff0c;本人的db是utc时间&#xff0c; 可以使用代码设置时区来解决&#xff0c;本人这里使用joda三方包&#xff0c;joda蛮好用的&#xff0c;具体用法这里不做详细描述。 先引入pom <dependency><…

vba 不等于_EXCEL表格VBA中的运算符

就像函数公式里面需要运算符一样&#xff0c;VBA中同样也需要运算符&#xff0c;今天我们就来了解下VBA中的运算符是怎么表达的。在学习运算符前&#xff0c;我们先来学习一段简单的VBA代码&#xff0c;Msgbox的表达。在代码窗口中输入&#xff1a;sub test ()tset表示测试的意…

C++常用的容器(vector、set、list、map)

C STL中最基本以及最常用的类或容器无非就是以下几个&#xff1a; stringvectorsetlistmap 下面就依次介绍它们&#xff0c;并给出一些最常见的最实用的使用方法&#xff0c;做到快速入门。 string 首先看看我们C语言一般怎么使用字符串的 char* s1 "Hello SYSU!&quo…

阿里 前端 规范_技术方案多、复用难?且看阿里文娱的前端工程管理实践

近两年&#xff0c;前端复杂度持续攀升&#xff0c;从框架到开发模式都衍生出了无数的技术方案。单点的小规模尝试&#xff0c;导致团队内部技术栈以及实现方案出现分化&#xff0c;间接造成了知识库之间的隔离、项目之间模块复用率下降&#xff0c;人员在不同项目中的学习成本…

Codeforces 671C Ultimate Weirdness of an Array 线段树 (看题解)

Ultimate Weirdness of an Array 写不出来&#xff0c; 日常好菜啊。。 考虑枚举GCD&#xff0c; 算出一共有多少个对 f(l, r) < GCD&#xff0c; 我们用fuc[ i ] 表示的是在 l i 这个位置开始, 最小的合法的 R&#xff0c; 可以发现这个函数随 i 单调不下降&#xff0c; …

安卓开发环境_我的安卓开发环境

大家好&#xff0c;今天想跟大家分享一下我的安卓开发环境&#xff0c;分别是硬件环境和软件环境。那么在开始之前先交代下我的背景&#xff0c;我从事安卓开发1年8个月&#xff0c;安卓教学9个月&#xff0c;大项目1个&#xff0c;小项目100。先说说硬件环境吧&#xff0c;直接…

构造函数,拷贝构造函数,赋值函数

C中一般创建对象&#xff0c;拷贝或赋值的方式有构造函数&#xff0c;拷贝构造函数&#xff0c;赋值函数这三种方法。下面就详细比较下三者之间的区别以及它们的具体实现 1.构造函数 构造函数是一种特殊的类成员函数&#xff0c;是当创建一个类的对象时&#xff0c;它被调用来…

性能优化系列

常见性能优化策略的总结&#xff08;转&#xff09; https://www.cnblogs.com/ajianbeyourself/p/6132546.html 网站前端和后台性能优化的34条宝贵经验和方法 https://www.imooc.com/article/41237 一次性能优化实战经历 https://www.cnblogs.com/SameZhao/p/6238997.html …

qotd服务_QOTD:Java线程与Java堆空间

qotd服务以下问题很常见&#xff0c;并且与OutOfMemoryError有关&#xff1a;在JVM线程创建过程和JVM线程容量期间无法创建新的本机线程问题。 这也是我向新技术候选人&#xff08;高级职位&#xff09;提出的典型面试问题。 我建议您在查看答案之前尝试提供自己的答复。 题&a…

ecs服务器数据迁移_某国际物流集团的云迁移解决方案

新钛云服已为您服务905天云计算流行当下&#xff0c;使用新技术较早的互联网企业&#xff0c;已基本实现云计算实施。传统企业也开始接触云计算并进行使用&#xff0c;但由于与互联网轻实体资产的模式不同&#xff0c;其往往面临着业务迁移上云的难题。云迁移过程非常复杂&…

红黑树的红黑标志有什么用

红黑树使用红黑二色进行“着色”&#xff0c;目的是利用颜色值作为二叉树的平衡对称性的检查&#xff0c;只要插入的节点“着色”满足红黑二色的规定&#xff0c;最短路径与最长路径不会相差的太远&#xff0c;红黑树的节点分布就能大体上达至均衡。 演示动画网站&#xff1a;h…

内存泄露与内存溢出

内存泄露是指你的应用使用资源之后没有及时释放&#xff0c;导致应用内存中持有了不需要的资源&#xff0c;这是一种状态描述。 内存溢出是指你的应用的内存已经不能满足正常使用了&#xff0c;堆栈已经达到系统设置的最大值&#xff0c;进而导致崩溃&#xff0c;这事一种结果描…

琥珀项目:较小的,面向生产力的Java语言功能

Brian Goetz最近的消息欢迎来到琥珀&#xff01; 介绍Project Amber &#xff08; OpenJDK的一部分&#xff0c; 最初于1月提出 &#xff09;。 Goetz通过介绍“欢迎使用Amber项目&#xff0c;这是我们面向特定生产力的Java语言JEP的孵化场”的介绍打开了这一消息。 Goetz重申&…

python个人收支管理系统相关题目_练手题:计算人均付费(SQLPython)

ARPU&#xff1a;人均付费总收入/总人数ARPPU&#xff1a;付费用户人均付费总收入/付费人数业务要求&#xff1a;1.各地市用户数、总费用(ARPU之和)是多少&#xff1f;2.表一中各地市ARPU(0,30),[30,50),[50-80),[80以上)用户数分别是多少&#xff1f;3.表二中用户有重复的记录…

Web 框架

1、Web框架 Web框架&#xff08;Web framework&#xff09;是一种开发框架&#xff0c;用来支持动态网站、网络应用和网络服务的开发。这大多数的web框架提供了一套开发和部署网站的方式&#xff0c;也为web行为提供了一套通用的方法。web框架已经实现了很多功能&#xff0c;开…

“引用作为函数参数”与 “引用作为函数返回值”

一、引用作为函数参数 作为函数参数时引用有两种原因&#xff1a;1、在函数内部会对此参数进行修改&#xff1b;2、提高函数调用和运行效率。 关于第一点&#xff0c;都知道C里提到函数就会提到形参和实参。如果函数的参数实质就是形参&#xff0c;不过这个形参的作用域只是在…

vue删除数组中的一条数据_删除排序数组中的重复项 II

删除排序数组中的重复项 II题目给定一个增序排列数组 nums &#xff0c;你需要在 原地 删除重复出现的元素&#xff0c;使得每个元素最多出现两次&#xff0c;返回移除后数组的新长度。不要使用额外的数组空间&#xff0c;你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的…

使用Docker堆栈部署的微服务-WildFly,Java EE和Couchbase

关于微服务的资料很多&#xff0c;只是用谷歌搜索就可以了 &#xff01; 几年前&#xff0c;我在比利时的Devoxx上发表了有关将单片重构为微服务的演讲&#xff0c;它得到了很好的评价&#xff1a; 该博客将展示Docker如何简化微服务的创建和关闭。 该博客中使用的所有代码都…

基于图像灰度的模板匹配

基于图像灰度的模板匹配 设模板图像T&#xff08;m*n&#xff09;&#xff0c;待匹配图像I&#xff08;M*N&#xff09;&#xff0c;两幅图像的原点都在左上角&#xff0c;这里有&#xff08;m<M&#xff0c;n<N&#xff09;。模板匹配的基本原理很简单&#xff1a;模板图…