实施 Gatling 性能测试项目的最佳方式是什么?
当我们设计一个框架的时候,可维护性和可扩展性是我们考虑的非常重要的两个因素。
在本文中,我们将展示如何创建使用 Gatling 和 Maven 从 0 创建一个性能测试项目。
Gatling + Maven 的测试框架
前置条件
在开始前,你应在你本地安装完成以下几个工具:
- Java 1.8
- Maven 3.5
- IntelliJ IDE 中的 Scala 插件
首先我们使用 maven 命令创建一个 gatling 风格的基础项目
mvn archetype:generate -DarchetypeGroupId=io.gatling.highcharts -DarchetypeArtifactId=gatling-highcharts-maven-archetype
plus:在执行上述命名时找不到 gatling 项目框架,所以接下来会通过 IDEA 直接创建 Maven 项目。
IntelliJ 创建一个新的 Maven 项目,添加基础架构的坐标和版本号,可以参考 Maven 官网。如下图所示:
给项目命名为 gatling-framework,如下图所示:
点击 Next:
当你使用 IntelliJ 打开项目时,你会看到默认创建了许多文件和文件夹:
resources 目录下包含了:
bodies 文件夹用保存请求的 Payload,比如各种请求的请求模板。
data 文件夹用来保存测试数据,比如 CSV 文件等。
除了上面提到的两个文件夹外,还有 gatling.conf、logback.xml 和 recorder.confg 文件,在本文中不会涉及。
Gatling Archetype 同时创建了 3 个 Scala Object,在创建完测试用例之后,通过执行 Engine Object 来执行测试。
另外,我们还将创建四个 packages,分别是 config、request、scenarios 和 simulations。
Config Package
在 config 包下,创建 Scala Object Config,这个 Object 将会存储各种项目的配置信息,如应用的 URL 地址,默认的用户等等。
点击 New,选择 Scala Class:
输入名称,选择 Object:
Config Object 的代码如下:
object Config {
val app_url = "http://example-app.com"
val users = Integer.getInteger("users",10).toInt
val rampUp = Integer.getInteger("rampup", 1).toInt
val throughput = Integer.getInteger("throughput",100).toInt
}
Request Package
requests 包则是用来存储各种不同的请求,如我们可以创建一个请求来获取认证的 token,其他请求就可以使用获取到的 token 来进行创建用户等操作。
这些是发送到不同地址的独立请求。
GetTokenRequest
import io.gatling.http.Predef._
import io.gatling.core.Predef._
import com.testexcellence.config.Config.app_url
object GetTokenRequest {
val get_token = http("RequestName").get(app_url + "/token")
.check(status is 200)
.check(jsonPath("$..token").saveAs("token"))
}
CreateUserRequest
object CreateUserRequest {
val sentHeaders = Map("Authorization" -> "bear ${token}")
val create_user = exec(http("Create User Request")
.post(app_url + "/users")
.headers(sentHeaders)
.formParam("name", "John")
.formParam("password", "John5P4ss")
.check(status is 201)
.check(regex("Created").exists))
}
Scenarios Package
Scenario package 保存各种业务场景,比如,要创建一个用户,我们首先必须获得一个 token,然后将该 token 当做请求头发送请求来创建用户。本例中我们使用第一个请求的响应作为到第二个请求的头。这种“请求链”在 API 测试中非常常见。
CreateUserSecnario
import com.testexcellence.requests.{CreateUserRequest, GetTokenRequest}
import io.gatling.core.Predef.scenario
object CreateUserSecnario {
val crateUserScenario = scenario("Create User Scenario")
.exec(GetTokenRequest.get_token)
.exec(CreateUserRequest.create_user)
}
Simulations Package
最后,我们在 Simulations Package 中创建一个 Simulation。您可以将 Simulations 当做不同的测试负载。例如,我们可以进行正常负载模拟或峰值模拟的性能测试
Simulation 必须是 Scala Class,并且必须继承 Gatling 的 Simulation 类。
CreateUserSecnario
import com.testexcellence.scenarios.CreateUserScenario
import io.gatling.core.Predef.Simulation
import com.testexcellence.config.Config.users
import io.gatling.core.Predef._
class CreateUserSimulation extends Simulation{
private val createUserExec = CreateUserScenario.createUserScenario
.inject(atOnceUsers(users))
setUp(createUserExec)
}
至此,你的整个项目结构应该如下图所示:
我们还需要修改 pom.xml,添加 maven gatling plugin
<plugin>
<groupId>io.gatling</groupId>
<artifactId>gatling-maven-plugin</artifactId>
<version>3.0.0</version>
</plugin>
执行 Engine Object 就可以运行测试:
控制台输出运行的信息以及报告保存的位置:
报告如下图所示:
持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第11天,点击查看活动详情
本文翻译自 devqa.io/gatling-mav… ,并在原文基础上进行了部分更新。