您现在的位置是:亿华云 > IT科技
强大的负载测试工具之Gatling
亿华云2025-10-08 23:32:33【IT科技】0人已围观
简介在应用程序上线之前,有多少人做过性能测试?估计大部分开发者更多地关注功能测试,并且会提供一些单元测试和集成测试的用例。然而,有时候性能漏洞导致的影响比未发现的业务漏洞更严重,因为性能漏洞影响的是整个系
在应用程序上线之前,载测有多少人做过性能测试?试工
估计大部分开发者更多地关注功能测试,并且会提供一些单元测试和集成测试的载测用例。然而,试工有时候性能漏洞导致的载测影响比未发现的业务漏洞更严重,因为性能漏洞影响的试工是整个系统,而不仅仅是载测一个业务进程。
可能你们很多人听过 JMeter ,试工但是载测今天将介绍有竞争力的解决方案 —— Gatling 。它能生成丰富多彩的试工报告,包含测试案例中收集的载测所有指标。该功能似乎比 JMeter 更好。试工
在讨论 Gatling 之前,载测先了解下理论知识,试工性能测试的载测两种类型,负载测试和压力测试:
负载测试(Load Testing):负载测试是一种主要为了测试软件系统是否达到需求文档设计的目标,譬如软件在一定时期内,***支持多少并发用户数,软件请求出错率等,测试的源码下载主要是软件系统的性能。
压力测试(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 \ postgres3、在 IDEA 中安装 scala 环境
安装 scala 插件
安装 scala SDK
4、编写性能测试脚本
每一个 Gatling 测试都要继承 Simulation 类,在里面你可以使用Gatling Scala DSL 来声明一个场景列表。这里的目标是运行 30 个客户端,同时发送 1000 次请求。b2b供应网首先,客户端通过调用 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:execute7、查看测试报告
全局报告
单个接口明细报告
【本文为专栏作者“翟永超”的原创稿件,转载请通过联系作者获取授权】
戳这里,看该作者更多好文
很赞哦!(5512)
相关文章
- 四、配置网站,填充内容
- 从科幻到现实,AR市场沉浮录
- 中国于2022年开展抗量子密码算法:2025年实现落地
- 好用的3个开源JavaScript图表库
- 在更换域名后,并不是就万事大吉了,我们需要将旧域名做301重定向到新域名上,转移旧域名的权重到新域名上。
- Python的26个小技巧
- 一分钟理解Java包装类型
- 4个需要避免的常见Kubernetes监控陷阱
- 域名资源有限,好域名更是有限,但机会随时都有,这取决于我们能否抓住机会。一般观点认为,国内域名注册太深,建议优先考虑外国注册人。外国注册人相对诚实,但价格差别很大,从几美元到几十美元不等。域名投资者应抓住机遇,尽早注册国外域名。
- 强烈建议|转行Python最好看一下这篇文章
热门文章
站长推荐
互联网其实拼的也是人脉,域名投资也是一个时效性很强的东西,一个不起眼的消息就会引起整个域名投资市场的动荡,因此拓宽自己的人脉圈,完善自己的信息获取渠道,让自己能够掌握更为多样化的信息,这样才更有助于自己的域名投资。
2018年10月GitHub上最热门的JavaScript开源项目
我是Java,这是我的2018年总结
2018年10月GitHub上最热门的JavaScript开源项目
互联网中的地址是数字的IP地址,域名解析的作用主要就是为了便于记忆。
OLAP引擎这么多,为什么苏宁选择用Druid?
浏览器缓存原理以及本地存储
AutoML、AutoKeras......这四个「Auto」的自动机器学习方法你分得清吗?