NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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:006468

评论

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

微博热门清华学霸的计划表刷屏,程序员该如何制定你的学习计划?

android 程序员 移动开发

怎样让你更快的完成工作去“摸鱼”,我的Android美团求职之路

android 程序员 移动开发

成功逆袭:越来越胖怎么能忍,我的APK瘦身之路,完整版开放免费下载

android 程序员 移动开发

我们来剖析一下这个Android猴子的面试过程,以及被问到的问题

android 程序员 移动开发

我又开发了一个非常好用的开源库,调试Android数据库有救了 (1)

android 程序员 移动开发

我们来剖析一下这个Android猴子的面试过程,以及被问到的问题(1)

android 程序员 移动开发

我的2020年终总结:疫情之下裸辞后的一些感悟和面试心得(上篇

android 程序员 移动开发

我,Android开发,40岁熬到中层月薪15K,百度Android岗一面+二面内容

android 程序员 移动开发

微信小程序之加载更多(分页加载)实例 ,flutter瀑布流列表

android 程序员 移动开发

微信小程序之商品属性分类 —— 微信小程序实战商城系列

android 程序员 移动开发

我来告诉你:零基础如何成为高级Android开发,入职字节跳动

android 程序员 移动开发

战战兢兢面试了一个35岁Android开发程序员,就这水平开发了8年?

android 程序员 移动开发

总结了30个例子之后,我悟到了Flutter的布局原理,android移动开发基础答案

android 程序员 移动开发

我肝了3个月终于整理出了这份超全面的《Android面试题及解析》(1)

android 程序员 移动开发

性能优化,还得看AspectJ,android高级开发实战

android 程序员 移动开发

想掌握Android面试官必问的 Binder 机制?那别想绕开 Binder 驱动源码分析!

android 程序员 移动开发

我才知道原来Flutter内置了10多种Button控件,音视频开发工程师抖音

android 程序员 移动开发

我肝了3个月终于整理出了这份超全面的《Android面试题及解析》

android 程序员 移动开发

想搞懂Jetpack架构可以不搞懂生命周期知识吗?,阿里Android面试必问

android 程序员 移动开发

想进阶高级架构师,你需要养成这10个习惯!,掌握这套精编Android高级面试题解析

android 程序员 移动开发

我学习Android的一些套路,这份333页关于性能优化知识点的PDF你不能不看

android 程序员 移动开发

惨遭社会毒打,公司倒闭突然失业,程序员该如何在下次危机对准时狠狠还击

android 程序员 移动开发

想掌握Android面试官必问的-Binder-机制?那别想绕开-Binder-驱动源码分析!

android 程序员 移动开发

成为一个优秀的Android开发者,需要必备哪些技术&工作技能?

android 程序员 移动开发

我想谈谈关于-Android-面试那些事,写给有开发经验的你们

android 程序员 移动开发

我敢打赌!你从未见过如此简单的Dagger-导航---基于-Android-Studio-4-1

android 程序员 移动开发

我是如何做到在-5-分钟之内将应用大小减少-60%-的?,零基础学android编程

android 程序员 移动开发

战战兢兢面试了一个35岁Android开发程序员,就这水平开发了8年?难怪没有一个公司愿意要你

android 程序员 移动开发

微信逆向之朋友圈,2021最新Android大厂面试真题大全

android 程序员 移动开发

怎样才是刷面试题的正确姿势?Android400道面试题+通关知识宝典助你进大厂

android 程序员 移动开发

我又开发了一个非常好用的开源库,调试Android数据库有救了

android 程序员 移动开发

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