写点什么

Gatling 发布全新 Java DSL,Java 与 Kotlin 齐飞

作者:Johan Janssen

  • 2023-10-05
    北京
  • 本文字数:2795 字

    阅读完需:约 9 分钟

大小:481.68K时长:02:44
Gatling发布全新Java DSL,Java与Kotlin齐飞

负载测试工具Gatling是为易用性、可维护性和高性能而设计的。它最初提供了 Scala DSL 来编写测试场景。后来,它发布了 Java DSL,可以使用 Java 或 Kotlin 编写测试场景。


Gatling 的快速入门文档中有一段专门介绍了如何选择正确的语言, 建议已经在使用 Scala 或 Kotlin 的开发人员使用这些语言编写测试,但如果还没有在使用这些语言,推荐使用 Java,因为它广为人知,需要较少的 CPU 进行编译,并且更容易在 Maven 或 Gradle 中配置。


Java, Kotlin or Scala: Which Gatling Flavor is Right for You?”这篇文章发表于 Java DSL 发布一年之后,文中显示,有 35%的用户在使用 Java DSL。在文章中,Gatling 明确指出,尽管 Java DSL 迅速流行起来,但他们计划继续支持 Scala DSL,用户可以自由选择 Java、Scala 和 Kotlin 来编写测试。


假设有一个使用 Scala 编写的测试场景,其中有 8 个用户在 10 秒内启动,0 秒后 0 个用户,5 秒后 4 个用户,10 秒后 8 个用户。然后每个用户执行五次循环,验证 car 和 carpart 端点是否都返回 HTTP 200 状态码:


class BasicSimulationScala extends Simulation {    val httpProtocol = http        .baseUrl("http://localhost:8080");
val scn = scenario("BasicSimulation") .repeat(5){ exec(http("car").get("/car") .check(status.is(200))) .pause(1) .exec(http("carpart") .get("/carpart") .check(status.is(200))) }
setUp( scn.inject(rampUsers(8).during(10)) ).protocols(httpProtocol);}
复制代码


这个测试可以在 Linux/Unix 上使用 Gatling 脚本运行


$GATLING_HOME/bin/gatling.sh
复制代码


或者在 Windows 上:

 %GATLING_HOME%\bin\gatling.bat
复制代码


另外,也可以使用 Maven 等构建工具来运行测试,方法是在testSourceDirectory中指定测试场景的目录,并配置Scala Maven插件Gatling Maven插件


<build>    <testSourceDirectory>src/test/scala</testSourceDirectory>    <plugins>        <plugin>            <groupId>net.alchim31.maven</groupId>            <artifactId>scala-maven-plugin</artifactId>            <version>${scala-maven-plugin.version}</version>            <executions>                <execution>                    <goals>                        <goal>testCompile</goal>                    </goals>                    <configuration>                        <jvmArgs>                            <jvmArg>-Xss100M</jvmArg>                        </jvmArgs>                        <args>                            <arg>-deprecation</arg>                            <arg>-feature</arg>                            <arg>-unchecked</arg>                            <arg>-language:implicitConversions</arg>                            <arg>-language:postfixOps</arg>                        </args>                    </configuration>                </execution>            </executions>        </plugin>        <plugin>            <groupId>io.gatling</groupId>            <artifactId>gatling-maven-plugin</artifactId>            <version>${gatling-maven-plugin.version}</version>        </plugin>    </plugins></build>
复制代码


最后执行测试:

mvn gatling:test
复制代码


同样的场景可以用 Java DSL 来表达: 用Duration.ofSeconds(10)替代10,用status()替代status,用repeat(5).on(...)替代repeat(5){...}


public class BasicSimulationJava extends Simulation {
HttpProtocolBuilder httpProtocol = http .baseUrl("http://localhost:8080");
ScenarioBuilder scn = scenario("BasicSimulation") .repeat(5).on( exec(http("car").get("/car") .check(status().is(200))) .pause(1) .exec(http("carpart") .get("/carpart") .check(status().is(200))) );
{ setUp( scn.injectOpen(rampUsers(8).during(Duration.ofSeconds(10))) ).protocols(httpProtocol); }}
复制代码


虽然 Scala DSL 和 Java DSL 之间的这些变化看起来相对较小,但对用户来说最大的好处是与测试相关的所有自定义逻辑也可以用 Java 编写。


用户可以使用 Gatling 脚本来运行测试,或者可以使用构建工具。


最后一个示例是 Kotlin 的 Java DSL,其中最大的变化是使用status().shouldBe(200)替代 Java 示例中的status().200) :


class BasicSimulationKotlin : Simulation() {
val httpProtocol = http .baseUrl("http://localhost:8080");
val scn = scenario("BasicSimulation") .repeat(5).on( exec(http("car").get("/car") .check(status().shouldBe(200))) .pause(1) .exec(http("carpart") .get("/carpart") .check(status().shouldBe(200))) );
init { setUp( scn.injectOpen(rampUsers(8).during(Duration.ofSeconds(10))) ).protocols(httpProtocol); }}
复制代码


用户可以使用 Gatling 脚本来运行测试。另外,也可以使用像Kotlin Maven Plugin这样的构建插件,并在testSourceDirectory中指定测试场景文件的位置后:


<build>    <testSourceDirectory>src/test/kotlin</testSourceDirectory>    <plugins>        <plugin>            <groupId>org.jetbrains.kotlin</groupId>            <artifactId>kotlin-maven-plugin</artifactId>            <version>${kotlin.version}</version>
<executions> <execution> <id>compile</id> <goals> <goal>compile</goal> </goals> </execution> <execution> <id>test-compile</id> <goals> <goal>test-compile</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>io.gatling</groupId> <artifactId>gatling-maven-plugin</artifactId> <version>${gatling-maven-plugin.version}</version> </plugin> </plugins></build>
复制代码


更多信息可以在文档中找到,文档为每个功能提供了 Scala、 Java 和 Kotlin 示例。


原文链接

https://www.infoq.com/news/2023/09/gatling-java-dsl/

2023-10-05 08:006854

评论

发布
暂无评论
发现更多内容

阿里巴巴云原生大数据运维平台 SREWorks 正式开源

阿里云大数据AI技术

大数据 自动化运维 大规模网络运维

两会“数字经济”高频出位,博睿数据为企业数字转型提供有力引擎

博睿数据

限量独家!濒危动物数字藏品免费发放!

百度开发者中心

中台和多云管理是伪问题?运维要集体下岗了吗?

火线安全

DevOps 云原生 云安全

IT运维工具难用吗?有没有简单易操作的?

行云管家

运维 IT运维

开学季 | 飞桨AI Studio课程学习,小白也可以成为一名优秀的算法工程师!

百度开发者中心

一文来了解关于分布式锁的那些事儿

Linux服务器开发

redis 分布式 分布式锁 Linux服务器开发 Linux后台开发

QoS 设计:车联网平台消息传输质量保障|车联网平台搭建从入门到精通 04

EMQ映云科技

物联网 IoT mqtt coap emq

2022年最热门的招聘技术技能是什么,您绝对想不到

禅道项目管理

项目管理 开发技能

电路模型和电路定律 (Ⅲ)

謓泽

3月月更

百度希壤元宇宙平台上线首个汽车数字展厅,领克探索汽车营销新方式

百度开发者中心

Gartner发布中国IaaS PaaS市场服务报告,天翼云强势入选

天翼云开发者社区

雄安新区设立四周年,看天翼云以数字底座托起未来之城

天翼云开发者社区

如何理解基础服务和通用服务

Im胡子

基础服务 通用服务 基础服务边界

多场景推进 服务网格在联通的落地实践(下)

百度开发者中心

Rust 用于移动开发的几种方式

非凸科技

Java c++ Python rust 量化

信通院推出数字化赋能者新标准天翼云获评数字化转型赋能服务集体

天翼云开发者社区

VuePress 博客之 SEO 优化(六)站长工具

冴羽

Vue 前端 vuepress SEO 博客搭建

产品帮助中心对SaaS行业的作用

小炮

SaaS平台 帮助中心

iOS开发面试的43道最新面试题,让你稳拿大厂offer!

iOSer

ios iOS面试 ios开发 iOS面试题

春分耕种时,AI“现身”田间地头

百度开发者中心

天翼云成为首个加入openGauss社区的运营商云

天翼云开发者社区

企业在线产品宣传册应该如何设计?

小炮

产品宣传手册

以太坊的扩容革命:ETH2.0

不登山的小鲁

以太坊 扩容 Ethereum eth eth2.0

内存之旅——如何提升CMA利用率?

OpenHarmony开发者

内存 OpenHarmony

基于Laravel模块化极速开发框架 免费开源CMS

ModStart开源

公有云市场百舸争流!天翼云稳居第一梯队,进入领导者象限

天翼云开发者社区

深入理解 WKWebView (渲染篇) —— DOM 树的构建

百度Geek说

前端 后端 DOM

保姆级SpringBoot+Vue图片上传到阿里云OSS教程

沉默王二

Spring Boot

Docker Build时的安全问题

火线安全

Docker 云原生 云安全 docker build

DevOps落地思考

火线安全

DevOps 云原生 云安全 DevOps认证

Gatling发布全新Java DSL,Java与Kotlin齐飞_编程语言_InfoQ精选文章