从 0 到 1 搭建自己的 Gatling 工程
Gradle + Scala 版本
创建一个空的 Gradle 工程
mkdir gatling-gradle-demo
cd gatling-gradle-demo
gradle init
配置项目 build.gradle
在 项目中 build.gradle 文件中添加以下内容
可 copy 本项目中的 build.gradle 文件内容,更多配置可参考官方文档
// 插件配置
plugins {
id 'scala' // scala插件声明(基于开发工具插件)
id 'io.gatling.gradle' version '3.9.5.6' // 基于gradle的gatling框架插件版本声明
}
//仓库源配置
repositories {
// 使用 maven 中心仓库源
mavenCentral()
}
// gatling 配置
gatling {
// logback root level,如果配置文件夹中不存在 logback.xml,则默认 Gatling 控制台日志级别
logLevel = 'WARN'
// 执行记录 HTTP 请求的详细程度
// set to 'ALL' for all HTTP traffic in TRACE, 'FAILURES' for failed HTTP traffic in DEBUG
logHttp = 'FAILURES'
// Simulations 过滤器
simulations = {
include "**/simulation/*.scala"
}
}
// 依赖配置
dependencies {
// 图表库,用于生成报告图表
gatling 'io.gatling.highcharts:gatling-charts-highcharts:3.8.3'
}
gradle build 项目并初始化
- 用编辑器打开本项目 Terminal 窗口,执行以下命令确认项目 build 成功
gradle build
- 初始化完成:完成向导后,Gradle 将在项目目录中生成一个基本的 Gradle 项目结构
初始化目录
在 src/gatling/scala 目录下创建一个 simulation 目录,用于存放测试脚本
Gatling 测试通常位于 src/gatling 目录中。你需要在项目根目录下手动创建 src 目录,然后在 src 目录下创建 gatling 目录。在 gatling 目录下,你可以创建你的测试模拟文件夹 simulation,以及其他文件夹,如 data、bodies、resources 等。
编写脚本
在 simulation 目录下创建一个 demo.scala 文件,用于编写测试脚本
示例脚本如下,可供参考
脚本包含了两个场景,一个是 get 请求,一个是 post 请求 get 接口验证接口返回状态码为 200,post 接口验证接口返回状态码为 201 get 接口使用了 rampUsers,post 接口使用了 constantConcurrentUsers rampUsers:在指定时间内逐渐增加并发用户数,constantConcurrentUsers:在指定时间内保持并发用户数不变 两个接口的并发用户数都是 10 个,持续时间都是 10 秒 两个接口的请求间隔都是 2 秒
package simulation
import scala.concurrent.duration._
import io.gatling.core.Predef._
import io.gatling.http.Predef._
class demo extends Simulation {
val httpProtocol = http
.baseUrl("https://jsonplaceholder.typicode.com") // 5
val scn = scenario("GetSimulation")
.exec(http("get_demo")
.get("/posts/1")
.check(status.is(200)))
.pause(2)
val scn1 = scenario("PostSimulation")
.exec(http("post_demo")
.post("/posts")
.body(StringBody("""{"title": "foo","body": "bar","userId": 1}""")).asJson
.check(status.is(201)))
.pause(2)
setUp(
scn.inject(rampUsers(10) during(10 seconds)),
scn1.inject(constantConcurrentUsers(10) during(10 seconds))
).protocols(httpProtocol)
}
调试脚本
执行以下命令,运行测试脚本并查看报告
gradle gatlingRun
Maven + Scala 版本
创建一个空的 Maven 工程
mvn archetype:generate -DgroupId=demo.gatlin.maven -DartifactId=gatling-maven-demo
初始化完成:完成向导后,Maven 将在新建项目目录并生成一个基本的 Maven 项目结构
配置项目 pom.xml
在 项目中 pom.xml 文件中添加以下内容
可 copy 本项目中的 pom.xml 文件内容,更多配置可参考官方文档
<!-- 依赖配置 -->
<dependencies>
<dependency>
<groupId>io.gatling.highcharts</groupId>
<artifactId>gatling-charts-highcharts</artifactId>
<version>3.9.5</version>
<scope>test</scope>
</dependency>
</dependencies>
<!-- 插件配置 -->
<build>
<plugins>
<plugin>
<groupId>io.gatling</groupId>
<artifactId>gatling-maven-plugin</artifactId>
<version>4.6.0</version>
</plugin>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>4.8.1</version>
<configuration>
<scalaVersion>2.13.12</scalaVersion>
</configuration>
<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>
</plugins>
</build>
初始化目录
在 src/test/scala 目录下创建一个 simulation 目录,用于存放测试脚本
scala 测试通常位于 src/test 目录中。你需要在项目 test 目录下创建 scala 目录。在 scala 目录下,你可以创建你的测试模拟文件夹 simulation,以及其他文件夹,如 data、bodies、resources 等。
编写脚本
在 simulation 目录下创建一个 demo.scala 文件,用于编写测试脚本
示例脚本如下,可供参考
脚本包含了两个场景,一个是 get 请求,一个是 post 请求 get 接口验证接口返回状态码为 200,post 接口验证接口返回状态码为 201 get 接口使用了 rampUsers,post 接口使用了 constantConcurrentUsers rampUsers:在指定时间内逐渐增加并发用户数,constantConcurrentUsers:在指定时间内保持并发用户数不变 两个接口的并发用户数都是 10 个,持续时间都是 10 秒 两个接口的请求间隔都是 2 秒
package simulation
import scala.concurrent.duration._
import io.gatling.core.Predef._
import io.gatling.http.Predef._
class demo extends Simulation {
val httpProtocol = http
.baseUrl("https://jsonplaceholder.typicode.com") // 5
val scn = scenario("GetSimulation")
.exec(http("get_demo")
.get("/posts/1")
.check(status.is(200)))
.pause(2)
val scn1 = scenario("PostSimulation")
.exec(http("post_demo")
.post("/posts")
.body(StringBody("""{"title": "foo","body": "bar","userId": 1}""")).asJson
.check(status.is(201)))
.pause(2)
setUp(
scn.inject(rampUsers(10) during(10 seconds)),
scn1.inject(constantConcurrentUsers(10) during(10 seconds))
).protocols(httpProtocol)
}
调试脚本
执行以下命令,运行测试脚本并查看报告
mvn gatling:test
欢迎关注软件测试同学的公众号“软件测试同学”,原创 QA 技术文章第一时间推送。