测试-Gatling 与性能测试

news2024/11/15 13:22:16

Gatling 与性能测试详解

一、什么是性能测试?

性能测试是一种软件测试类型,旨在评估系统在负载下的响应时间、吞吐量和资源利用率等性能指标。通过性能测试,开发者和运维团队能够识别出系统的瓶颈、优化系统性能,并确保其在实际生产环境中能够处理预期的流量。

性能测试通常分为以下几类:

  1. 负载测试:通过模拟多个用户同时访问系统,测试系统在高负载下的行为和响应能力。
  2. 压力测试:将系统负载逐步增加,直至系统崩溃,评估其最大承受能力。
  3. 容量测试:确定系统在特定硬件资源条件下的最大用户处理量。
  4. 稳定性测试:在较长时间内保持负载,检查系统的稳定性和是否存在内存泄漏等问题。
二、Gatling 简介

Gatling 是一个开源的、高性能的性能测试工具,专为测试 HTTP 协议设计,同时也支持 WebSocket、JMS 等协议。Gatling 使用 Scala 编写,具有强大的并发处理能力和易用的脚本语言,适合用于模拟大规模用户请求、分析系统性能瓶颈。

Gatling 具有以下特点:

  1. 高性能:使用非阻塞 I/O,可以模拟大规模并发请求,适合测试高负载应用。
  2. 易用的 DSL(领域特定语言):基于 Scala 的测试脚本,结构清晰、语法简单,易于编写和维护复杂的性能测试场景。
  3. 丰富的报告:提供详尽的 HTML 格式的报告,展示响应时间、错误率、吞吐量等指标,并直观地展示系统性能瓶颈。
  4. 集成能力强:与 CI/CD 工具(如 Jenkins)无缝集成,适合自动化测试流程。
三、Gatling 的核心概念
  1. Scenario(场景)

场景代表性能测试的核心逻辑。一个 Scenario 描述了用户如何与系统进行交互,例如登录、查询、提交数据等操作。Gatling 中的 Scenario 通常通过定义用户行为序列来模拟实际的业务流程。

  1. Simulation(模拟)

Simulation 是 Gatling 中运行测试的单元,包含场景定义、负载模型、执行配置等内容。每个 Simulation 定义了一个测试计划,Gatling 执行该计划并生成测试报告。

  1. Session(会话)

Session 是用户与系统之间的一次完整交互,保存了测试过程中的所有上下文信息。每个用户都有独立的 Session,测试过程中可以在不同请求之间共享数据。

  1. Feeders(数据源)

Feeders 是用来为测试数据驱动的功能。通过 Feeders,测试脚本可以从外部数据源(如 CSV 文件、JSON 文件等)读取数据,为每个用户提供不同的测试输入。

  1. Assertions(断言)

断言用于检查测试的期望结果,确保测试在完成后能够验证系统是否达到了性能要求。Gatling 允许开发者对响应时间、成功率、吞吐量等进行断言。

四、Gatling 的安装与使用
  1. 安装 Gatling

下载并安装 Gatling:
   - 前往 Gatling 官网 下载最新版本的 Gatling 压缩包。
   - 解压缩后,配置 GATLING_HOME 环境变量指向 Gatling 解压目录。

  1. 创建一个简单的测试脚本

Gatling 提供了基于 Scala 语言的 DSL 来编写性能测试脚本。以下是一个简单的 Gatling 脚本示例,它模拟 100 名用户向网站发送 HTTP 请求:

示例:简单的 HTTP 性能测试
   ```scala
   import io.gatling.core.Predef._
   import io.gatling.http.Predef._
   import scala.concurrent.duration._

class BasicSimulation extends Simulation {

// 定义 HTTP 协议配置
     val httpProtocol = http
       .baseUrl(“https://example.com”) // 目标网站
       .acceptHeader(“application/json”) // 请求头
       .userAgentHeader(“Gatling”)

// 定义用户行为
     val scn = scenario(“Basic Simulation”)
       .exec(
         http(“Home Page Request”)
           .get(“/”)
           .check(status.is(200)) // 检查 HTTP 响应状态码
       )

// 设置负载模型和模拟执行
     setUp(
       scn.inject(atOnceUsers(100)) // 模拟 100 个用户同时发起请求
     ).protocols(httpProtocol)
   }
   ```

代码解释
   - httpProtocol:定义了 HTTP 协议相关的配置,包括请求的 URL、请求头等。
   - scenario:定义了用户的行为场景,这里表示用户访问首页(GET 请求)。
   - inject:定义负载模型,atOnceUsers(100) 表示 100 个用户同时发起请求。
   - check:用于验证请求的结果,这里使用 status.is(200) 确保返回的状态码是 200。

  1. 运行 Gatling 测试

GATLING_HOME 目录中,运行以下命令以启动 Gatling:

bash    ./bin/gatling.sh    

选择要执行的测试脚本,Gatling 将开始运行测试并生成结果。测试结束后,Gatling 会生成一个详细的 HTML 报告,报告中包含以下关键性能指标:
   - 响应时间:请求的最小值、最大值、平均值、95% 响应时间等。
   - 成功率:请求成功率、失败率。
   - 吞吐量:系统处理请求的速率。

  1. 查看 Gatling 报告

Gatling 生成的 HTML 报告提供了丰富的图表和统计数据,帮助开发者分析性能瓶颈。报告包含:
   - 响应时间分布图:展示每个请求的响应时间,帮助开发者了解请求的响应延迟。
   - 请求成功/失败统计:展示不同请求的成功率和错误率。
   - 系统吞吐量:展示每秒处理的请求数量。

报告示例截图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

五、Gatling 进阶功能
  1. 负载模型

Gatling 提供了多种负载模型,可以模拟不同的用户行为模式,例如:
   - atOnceUsers(n):同时模拟 n 个用户。
   - rampUsers(n) over (d):在 d 时间内,逐渐增加到 n 个用户。
   - constantUsersPerSec(rate) during (d):在 d 时间内,以每秒 rate 个用户的速率持续发送请求。

负载模型可以组合使用,例如:

scala    setUp(      scn.inject(        rampUsers(100) over (10 seconds), // 在 10 秒内增加到 100 个用户        constantUsersPerSec(50) during (30 seconds) // 在 30 秒内保持每秒 50 个用户      )    ).protocols(httpProtocol)    

  1. 数据驱动测试

Gatling 支持使用 Feeders 来从外部数据源读取测试数据。以下示例演示了如何从 CSV 文件中读取用户数据进行测试:

数据文件 users.csv
   csv    username,password    user1,pass1    user2,pass2    

脚本示例:
   ```scala
   val feeder = csv(“users.csv”).circular

val scn = scenario(“Login Simulation”)
     .feed(feeder)
     .exec(
       http(“Login Request”)
         .post(“/login”)
         .formParam(“username”, “ u s e r n a m e " )       . f o r m P a r a m ( " p a s s w o r d " , " {username}")          .formParam("password", " username")     .formParam("password","{password}”)
         .check(status.is(200))
     )
   ```

  1. 高级断言

断言可以用于在测试结束后,自动验证性能目标是否达成。例如,可以验证响应时间的 95% 百分位数是否小于 500 毫秒:

scala    setUp(      scn.inject(atOnceUsers(100))    ).protocols(httpProtocol)      .assertions(        global.responseTime.percentile(95).lt(500), // 95% 响应时间小于 500 毫秒        global.successfulRequests.percent.gte(99)   // 请求成功率大于 99%      )    

六、Gatling 与 CI/CD 集成

Gatling 可以轻松集成到 Jenkins 等持续集成/持续交付(CI/CD)工具中,帮助开发团队在代码发布前自动执行性能测试。

  1. **在 Jenkins 中

配置 Gatling**:
   - 安装 Jenkins 的 Gatling 插件。
   - 配置 Jenkins 任务,添加执行 Gatling 测试的步骤:
     bash      ./bin/gatling.sh -s simulations.BasicSimulation      
   - Jenkins 将在每次代码构建时自动运行 Gatling 性能测试,并将报告集成到构建结果中。

  1. 自动化测试流程
       在 CI/CD 管道中,Gatling 可以作为代码发布前的性能测试工具,帮助开发团队识别潜在的性能问题。例如,在应用部署到预生产环境后,可以使用 Gatling 测试接口的吞吐量和响应时间,确保其在高负载下的表现符合预期。
七、Gatling 与其他性能测试工具的比较
工具特点优点缺点
Gatling基于 Scala 的高性能工具,支持复杂场景高并发性能,易用的 DSL,详细报告基于 Scala,可能对非 Java/Scala 开发者不友好
JMeter图形化界面的负载测试工具图形界面易上手,支持多种协议高并发下性能不足,脚本维护较复杂
Locust基于 Python 的可扩展负载测试工具使用 Python 编写脚本,适合复杂场景性能低于 Gatling,尤其是模拟大量用户时
k6使用 JS 编写测试脚本,现代云原生负载工具易于集成到 CI/CD 流程,支持云原生应用的负载测试适合 API 测试,复杂业务逻辑支持不如 Gatling
八、总结

Gatling 是一个功能强大且高效的性能测试工具,尤其擅长于模拟大规模的并发用户请求,适合测试现代 Web 应用和微服务架构的性能表现。通过使用 Gatling,开发团队能够准确分析系统在不同负载下的表现,识别潜在的性能瓶颈,并确保系统在实际生产环境中的稳定性和可扩展性。

结合 Gatling 的丰富 DSL、灵活的负载模型和与 CI/CD 的深度集成,开发者可以轻松地将性能测试融入到自动化发布流程中,确保应用在每次发布前都经过严格的性能评估。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2138311.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙之Hello Word 遇坑总结 mac系统 不能预览 提示 Only files in a module can be previewed 解决办法

顺时代, 应潮流 !鸿蒙崛起不可阻挡, 鸿蒙开发大有可为, 万丈高楼平地起,学编程的第一步当然是Hello World起,请看 第一步是下载 编辑器,直接官网 文档中心下载对应的系统版本安装,…

用nginx-rtmp-win32-master及ffmpeg模拟rtmp视频流

效果 使用nginx-rtmp-win32-master搭建RTMP服务 双击exe就可以了。切记整个目录不能有中文 README.md ,启用后本地的RTM路径: rtmp://192.168.1.186/live/xxx ffmpeg将地本地视频推RMTP F:\rtsp\ffmpeg-7.0.2-essentials_build\bin>ffmpeg -re -i F:\rtsp\123.mp4 -c c…

Java设计模式—面向对象设计原则(六) ----->合成复用原则(CRP) (完整详解,附有代码+案例)

文章目录 3.6 合成复用原则(CRP)3.6.1 概述3.6.2 案列 3.6 合成复用原则(CRP) 合成复用原则(CRP):Composite Reuse Principle,CRP 又叫: 组合/聚合复用原则(Composition/Aggregate Reuse Principle,CARP)…

FastAPI 应用安全加固:HTTPSRedirectMiddleware 中间件全解析

在当今的网络环境中,数据安全变得越来越重要。HTTPS 作为一种安全协议,它通过加密传输数据来保护用户信息免受窃取和篡改。在 FastAPI 应用中,确保所有的 HTTP 请求都通过 HTTPS 进行是至关重要的。 中间件在 FastAPI 中用于处理请求前后的…

探索 Electron:助力文档操作应用快速落地

Electron是一个开源的桌面应用程序开发框架,它允许开发者使用Web技术(如 HTML、CSS 和 JavaScript)构建跨平台的桌面应用程序,它的出现极大地简化了桌面应用程序的开发流程,让更多的开发者能够利用已有的 Web 开发技能…

智慧农业数据集(一)

目录 葡萄叶片病虫害害数据集 茄子果实病虫害数据集 81类水果数据集 小麦叶片病虫害数据集 番茄叶片病害数据集 草莓叶片病虫害数据集 水稻叶片病虫害数据集 菠萝成熟度数据集 10类水果数据集 葡萄叶片病虫害害数据集 数据集下载链接:葡萄叶片病虫害数据集…

几分钟学会搭建一个自己的外卖霸王餐系统

大家好,我是鲸天科技千千,大家都知道我是做小程序开发的,平时会给大家分享一些互联网相关的创业项目,感兴趣的可以跟我关注一下。 搭建一个首先就是要搭建一个自己的霸王餐小程序,我们自己的工作就是把这个小程序推广…

H5 CSS布局样式定位position

1. H5 H5 CSS布局样式定位position 布局是html中非常重要的一部分,而定位在页面布局中也是使用频率很高的方法,本章节为定位在布局中的使用技巧和注意事项。   position定位有4个属性,分别是static(默认),absolute&a…

6芯7芯可旋转电连接器航空插头

概述 可旋转电航空插头是一种能够在旋转或相对运动的部件间稳定传输电气信号或电源的装置,广泛应用于航空航天、自动化设备、医疗设备等多个领域。它的核心在于精密的接触系统,由旋转端和固定端两部分组成,通过金属触点或导电环实现电气连接。…

pyflink 安装和测试

FPY Warning! 安装 apache-Flink # pip install apache-Flink -i https://pypi.tuna.tsinghua.edu.cn/simple/ Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple/ Collecting apache-FlinkDownloading https://pypi.tuna.tsinghua.edu.cn/packages/7f/a3/ad502…

华为CNA VRM搭建(使用vmware worfstartion搭建)

创建虚拟机: 自定义→高级 选择硬件兼容性:默认安装版本,如果未来想要将此虚拟机安装到其他电脑,其他电脑版本过低,此时可以向下兼容,这里我们默认版本 稍后安装操作系统: CNA采用Euler OS系统…

合肥鲸天科技的外卖会员卡系统有人做过吗?赚钱吗?

我们先来了解一下这个合肥鲸天科技,通过我在网上找到的资料和企业查询,这家公司还是很有实力的,合肥鲸天科技有限公司也是欢迎有合作的人到公司来进行一个考察和合作其他一些项目的。 外卖会员卡简介绍: 这个外卖会员卡&#xf…

先框架后历元还是先历元后框架?

最近测绘同行高总发现了一个问题,《CH/T 2014-2016 大地测量控制点坐标转换技术规范》中”5.1.4.1 a) 不同ITRF间框架转换参数的历元归算“中历元不明确,不知是观测历元还是目标历元。他和一些同行用一些数据测试验证后认为观测历元更为贴合实际。 ​编…

lftools frida调试小工具

前言 这两天在分析mac程序数据 ,偶尔翻到了以前写的frida代码,如下 那个时候刚刚接触frida 调试Mac电脑上的程序,通过tcp转发到自己写的分析数据的工具上…(专门研究了一下Python的异步编程,libuv啥的…) 每隔那么久…

21:I2C三:MPU6050的使用

MPU6050的使用 1、MPU6050简介1.1:加速度与姿态测量1.2:陀螺仪与姿态测量1.3:MPU6050内部结构1.4:模块内部寄存器 2、程序模拟I2C读写MPU60502.1:数据的读取2.2:转换为角度并进行融合 3、片上外设I2C2读写M…

支付域——聚合支付设计

摘要 聚合支付是支付行业的一项重要创新,通过整合多种支付方式,极大简化了支付流程,提升了交易效率,为商户和消费者提供了更加便捷的支付体验。随着移动支付的普及,聚合支付在未来的支付场景中将继续发挥重要作用&…

STL之初始迭代器

迭代器 什么是迭代器? - 迭代器是一种检查容器内元素并且遍历容器内元素的数据类型 迭代器的作用: - 迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围 为什么需要迭代器? - STL提供每种容器的实现原理各不相同,如果没有迭代器…

心觉:《潜意识显化实操营》首批体验者招募

你是否常常感到困惑,对未来感到迷茫? 你是否在事业、生活中遇到瓶颈,迫切希望突破? 你是否想要把自己3万倍的潜意识能量释放出来 ,助力成功? 你是否想要解锁你财富显化的卡点,顺便实现财富自…

CISSP一站通关

依托轻速云维护了一个专注于CISSP备考通关的在线学习平台,提供知识串讲视频,配合大量针对性的习题和重难点习题解析,帮助备考学习者高效学习和巩固知识点。已经帮助100考友顺利通过考试。 知识串讲视频是我主讲的5天直播课程的录屏&#xff0…

C# 反射之动态生成dll/exe

这个可能应该属于反射的高级使用范围了,平常在项目中使用的人估计也不是很多。由于使用反射的话会降低性能,比如之前用到的GetValue、SetValue等之类,但是使用这种方式会大大提高效率,在这里我只想说,都直接写IL指令了…