千家信息网

如何使用Gateling进行性能测试

发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章主要讲解了"如何使用Gateling进行性能测试",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何使用Gateling进行性能测试"吧!Gat
千家信息网最后更新 2025年11月08日如何使用Gateling进行性能测试

这篇文章主要讲解了"如何使用Gateling进行性能测试",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何使用Gateling进行性能测试"吧!

Gatling是什么?

Gatling 是一个用 Scala 编写的负载测试工具,功能强大。它完全支持 HTTP 协议,也可以用来测试 JDBC 连接和 JMS。使用 Gatling 时,需要用 Scala dsl 代码定义测试场景。值得一提的是,Gatling 生成的 HTML 负载报告内容全面,并且提供了 Gradle、Maven 和 Jenkins 插件方便集成。

构建示例应用

开始测试前,需要准备测试应用。示例程序非常简单,源代码可以在 GitHub 上找到(github.com/piomin/sample-gatling-load-tests)。它提供了一组 CRUD 操作的 RESTful HTTP API,在可以数据库中新增和搜索 Entity。数据库用 Postgres,基于 Spring Boot 构建,使用Spring Data 实现持久层。

plugins {
id 'org.springframework.boot' version '1.5.9.RELEASE'
}
dependencies {
compile group: 'org.springframework.boot', name: 'spring-boot-starter-web'
compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa'
compile group: 'org.postgresql', name: 'postgresql', version: '42.1.4'
testCompile group: 'org.springframework.boot', name: 'spring-boot-starter-test'
}

Person entity映射到 person 表。

@Entity
@SequenceGenerator(name = "seq_person", initialValue = 1, allocationSize = 1)
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_person")
private Long id;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@Column(name = "birth_date")
private Date birthDate;
@Embedded
private Address address;
// ...
}

数据库连接设置和 Hibernate 属性配置在 application.yml 中。

spring:
application:
name: gatling-service
datasource:
url: jdbc:postgresql://192.168.99.100:5432/gatling
username: gatling
password: gatling123
jpa:
properties:
hibernate:
hbm2ddl:
auto: update
server:
port: 8090

正如之前提到的,示例程序提供了在数据库中添加、搜索 person 的 API,下面是 Spring REST controller 实现。

@RestController
@RequestMapping("/persons")
public class PersonsController {
private static final Logger LOGGER = LoggerFactory.getLogger(PersonsController.class);
@Autowired
PersonsRepository repository;
@GetMapping function(){ //外汇跟单www.gendan5.com
public List
findAll() {
return (List
) repository.findAll();
}
@PostMapping
public Person add(@RequestBody Person person) {
Person p = repository.save(person);
LOGGER.info("add: {}", p.toString());
return p;
}
@GetMapping("/{id}")
public Person findById(@PathVariable("id") Long id) {
LOGGER.info("findById: id={}", id);
return repository.findOne(id);
}
}

运行数据库

开发示例程序的下一步是运行数据库,最合适的方式是 Docker image。下面的 Docker 命令会启动一个 Postgres container,完成 gatling 用户和数据库初始化。

docker run -d --name postgres -e POSTGRES_DB=gatling -e POSTGRES_USER=gatling -e POSTGRES_PASSWORD=gatling123 -p 5432:5432 postgres

设计测试场景

每个 Gatling test suite 都要继承 Simulation 类,使用 Gatling Scala DSL 声明一系列测试场景。我们的目标是启动30个客户端,同时发送1000次请求。首先,客户端通过 POST /persons 方法向数据库添加 person。然后,调用 GET /persons/{id}搜索 person。总共向应用程序发送6万次请求:3万次 POST,3万次 GET。下面代码展示了测试场景,非常简单。在 src/test/scala 目录下可以找到 ApiGatlingSimulationTest。

class ApiGatlingSimulationTest extends Simulation {
val scn = scenario("AddAndFindPersons").repeat(1000, "n") {
exec(
http("AddPerson-API")
.post("http://localhost:8090/persons")
.header("Content-Type", "application/json")
.body(StringBody("""{"firstName":"John${n}","lastName":"Smith${n}","birthDate":"1980-01-01", "address": {"country":"pl","city":"Warsaw","street":"Test${n}","postalCode":"02-200","houseNo":${n}}}"""))
.check(status.is(200))
).pause(Duration.apply(5, TimeUnit.MILLISECONDS))
}.repeat(1000, "n") {
exec(
http("GetPerson-API")
.get("http://localhost:8090/persons/${n}")
.check(status.is(200))
)
}
setUp(scn.inject(atOnceUsers(30))).maxDuration(FiniteDuration.apply(10, "minutes"))
}

为了在项目中启用 Gatling 框架,还需要在 Gradle 构建文件中添加依赖。

testCompile group: 'io.gatling.highcharts', name: 'gatling-charts-highcharts', version: '2.3.0'

运行测试

通过一些 Gradle 插件可以在项目构建期间运行测试。但是,也可用 io.gatling.app.Gatling 类定义简单的 gradle 任务。

task loadTest(type: JavaExec) {
dependsOn testClasses
description = "Load Test With Gatling"
group = "Load Test"
classpath = sourceSets.test.runtimeClasspath
jvmArgs = [
"-Dgatling.core.directory.binaries=${sourceSets.test.output.classesDir.toString()}"
]
main = "io.gatling.app.Gatling"
args = [
"--simulation", "pl.piomin.services.gatling.ApiGatlingSimulationTest",
"--results-folder", "${buildDir}/gatling-results",
"--binaries-folder", sourceSets.test.output.classesDir.toString(),
"--bodies-folder", sourceSets.test.resources.srcDirs.toList().first().toString() + "/gatling/bodies",
]
}

使用 gradle loadTest 执行定义好的 Gradle 任务。当然,运行测试之前需要启动应用程序,在 IDE 中启动 main class pl.piomin.services.gatling.ApiApplication 或者执行 java -jar build/libs/sample-load-test-gatling.jar 命令。

测试报告

测试执行完毕会以文本形式打印报告。

================================================================================
---- Global Information --------------------------------------------------------
> request count 60000 (OK=60000 KO=0 )
> min response time 2 (OK=2 KO=- )
> max response time 1338 (OK=1338 KO=- )
> mean response time 80 (OK=80 KO=- )
> std deviation 106 (OK=106 KO=- )
> response time 50th percentile 50 (OK=50 KO=- )
> response time 75th percentile 93 (OK=93 KO=- )
> response time 95th percentile 253 (OK=253 KO=- )
> response time 99th percentile 564 (OK=564 KO=- )
> mean requests/sec 319.149 (OK=319.149 KO=- )
---- Response Time Distribution ------------------------------------------------
> t < 800 ms 59818 (100%) > 800 ms < t < 1200 ms 166 ( 0%) > t > 1200 ms 16 ( 0%)
> failed 0 ( 0%)
================================================================================

但是,Gatling 最擅长的是报告图表。生成的 HTML 报告在 build/gatling-results 目录下。第一个报告展示了全局信息,包含请求总数和最大响应时间(百分比)。例如,95%的 GetPerson API 请求的最大响应时间为206ms。

感谢各位的阅读,以上就是"如何使用Gateling进行性能测试"的内容了,经过本文的学习后,相信大家对如何使用Gateling进行性能测试这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

测试 数据 数据库 报告 程序 运行 进行性 能测 场景 示例 应用 内容 学习 搜索 最大 代码 任务 命令 客户 客户端 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 西安通拓网络技术有限公司 如何查询数据库表属于哪个库 怎么改变数据库编码 山东存储服务器哪家好 新华三网络安全创新 果洛软件开发五星服务 澳大利亚网络安全学校 邯郸交友软件开发如何收费 宁夏办公软件开发哪家专业 大专计算机网络安全就业 计算机网络技术高等教育版 服务器里面怎么显示时间 vps拨号服务器怎么架设 怎么上传到服务器 工业园区进口服务器 皇室战争私人服务器下载地址 中国路的数据库 从事软件开发的就业方向 浙江塔式服务器哪家好 有服务器密码的代理ip 软件开发费税率6可以入无形资产 服务器硬盘读取 计算机网络技术学的都是什么 莱芜诚信积分管理软件开发公司 流媒体服务器跟解码服务器是什么 数据库软件安装好了查看截图 广东服务器防火墙批发 北京超融合服务器虚拟化哪家好 数据库中强制存储控制 360周鸿祎讲网络安全
0