Gatling 支持基于 Java 和 Kotlin 的性能测试的 Java DSL

Gatling 负载测试工具概述

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

选择适合的语言

在 Gatling 的快速入门指南中,建议开发者根据自身熟悉的语言选择 Scala 或 Kotlin 编写测试。如果开发者不熟悉这两种语言,推荐使用 Java,因为 Java 广泛使用,编译时 CPU 消耗较少,且在 Maven 或 Gradle 中配置更为简单。

Java DSL 的使用情况

根据 Gatling 发布 Java DSL 一年后的统计,35% 的用户使用 Java DSL。尽管 Java DSL 迅速流行,Gatling 明确表示将继续支持 Scala DSL,用户可以自由选择 Java、Scala 或 Kotlin 编写测试。

Scala 测试场景示例

以下是一个典型的 Scala 测试场景示例,其中 8 个用户在 10 秒内逐渐启动,每个用户执行 5 次循环,验证 carcarpart 端点是否返回 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);
}

运行测试

可以使用 Gatling 脚本在 Linux/Unix 或 Windows 上运行测试,也可以通过 Maven 等构建工具运行测试。在 Maven 中,需要配置 Scala Maven 插件和 Gatling Maven 插件,并指定测试场景文件的目录。

Java DSL 测试场景示例

使用 Java DSL 编写的相同测试场景,主要区别在于语法上的微小变化,例如使用 Duration.ofSeconds(10) 代替 10status() 代替 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);
    }
}

Kotlin DSL 测试场景示例

使用 Kotlin DSL 编写的相同测试场景,主要区别在于使用 status().shouldBe(200) 代替 status().is(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 脚本运行测试,也可以通过构建工具如 Maven 运行测试。在 Maven 中,需要配置 Kotlin Maven 插件和 Gatling Maven 插件,并指定测试场景文件的目录。

文档与资源

更多详细信息和功能说明可以参考 Gatling 的官方文档,其中提供了 Scala、Java 和 Kotlin 的示例。

阅读 27
0 条评论