性能测试工具之Gatling
估计大部分开发者更多地关注功能测试,并且会提供一些单元测试和集成测试的用例。然而,有时候性能漏洞导致的影响比未发现的业务漏洞更严重,因为性能漏洞影响的是整个系统,而不仅仅是一个业务进程。
大部分的性能测试人员听过 Jmeter ,但是今天将介绍有竞争力的解决方案 Gatling 。它能生成丰富多彩的报告,包含测试案例中收集的所有指标。该功能似乎比 Jmeter 更好。
在讨论 Gatling 之前,先了解下理论知识,性能测试的两种类型,负载测试和压力测试:
1、负载测试(Load Testing):负载测试是一种主要为了测试软件系统是否达到需求文档设计的目标,譬如软件在一定时期内,最大支持多少并发用户数,软件请求出错率等,测试的主要是软件系统的性能。
2、压力测试(Stress Testing):压力测试主要是为了测试硬件系统是否达到需求文档设计的性能目标,譬如在一定时期内,系统的cpu利用率,内存使用率,磁盘I/O吞吐率,网络吞吐量等,压力测试和负载测试最大的差别在于测试目的不同。
Gatling 简介

Gatling 是一个功能强大的负载测试工具。它是为易用性、可维护性和高性能而设计的。
开箱即用,Gatling 带有对 HTTP 协议的出色支持,使其成为负载测试任何 HTTP 服务器的首选工具。由于核心引擎实际上是协议不可知的,所以完全可以实现对其他协议的支持,例如,Gatling 目前也提供JMS 支持。
只要底层协议(如 HTTP)能够以非阻塞的方式实现,Gatling 的架构就是异步的。这种架构可以将虚拟用户作为消息而不是专用线程来实现。因此,运行数千个并发的虚拟用户不是问题。
Gatling 快速入门实践
1、创建 Spring Boot 应用,提供 RESTful API,以供测试
https://github.com/ChinaSilence/gatling-test.git
如果有自己测试的 Web 应用可以忽略本步骤!
2、启动数据库
Github 中的示例代码依赖了 PostgresSQL,所以要先启动数据库,最简单的方式当然是用 Docker 咯:
docker run -d \
--name postgres \
-e POSTGRES_DB=gatling \
-e POSTGRES_USER=gatling \
-e POSTGRES_PASSWORD=gatling123 \
-p 5432:5432 \
postgres
3、在 IDEA 中安装 scala 环境
安装 scala 插件

安装 scala SDK

4、编写性能测试脚本
每一个 Gatling 测试都要继承 Simulation
类,在里面你可以使用Gatling Scala DSL 来声明一个场景列表。这里的目标是运行 30 个客户端,同时发送 1000 次请求。首先,客户端通过调用 POST /persons
方法将添加数据到数据库中;然后,尝试通过调用 GET /persons/{id}
方法使用 id
来查询数据。
class ApiGatlingSimulationTest extends Simulation {
val scn = scenario("AddAndFindPersons").repeat(1000, "n") {
exec(
http("AddPerson-API")
.post("http://localhost:8080/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:8080/persons/${n}")
.check(status.is(200))
)
}
setUp(scn.inject(atOnceUsers(30))).maxDuration(FiniteDuration.apply(10, "minutes"))
}
5、运行 Spring Boot 应用

6、运行测试脚本
配置 Maven 插件参数
<build>
<plugins>
<plugin>
<groupId>io.gatling</groupId>
<artifactId>gatling-maven-plugin</artifactId>
<version>${gatling-plugin.version}</version>
<configuration>
<!-- 测试脚本 -->
<simulationClass>com.anoyi.test.ApiGatlingSimulationTest</simulationClass>
<!-- 结果输出地址 -->
<resultsFolder>/Users/admin/code/gatling</resultsFolder>
</configuration>
</plugin>
</plugins>
</build>
执行测试
mvn gatling:execute

7、查看测试报告
全局报告

单个接口明细报告




https://blog.csdn.net/qq_32447301/article/details/88881445
https://blog.csdn.net/qq_32447301/article/details/88881445
https://www.jianshu.com/p/90afbd06b69a
https://blog.csdn.net/weixin_33786077/article/details/87948037
作者:Agoly 出处:https://www.cnblogs.com/qmfsun/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 如果文中有什么错误,欢迎指出。以免更多的人被误导。 |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验
2015-10-22 JMeter性能监测插件介绍(三)
2015-10-22 Jmeter分布式测试搭建(二)
2015-10-22 Jmeter测试环境搭建(一)
2015-10-22 loadrunner中lr_save_searched_string函数的使用
2015-10-22 LoadRunner关联函数的脚本实例--如何操作关联参数
2015-10-22 C语言字符串操作常用库函数
2015-10-22 LoadRunner中截取字符串