完整教程:第三方软件测试公司:【Gatling基于Scala的开源高性能负载测试工具】

news/2025/10/1 9:56:27/文章来源:https://www.cnblogs.com/lxjshuju/p/19122129

Gatling是一款基于Scala构建的开源、高性能的负载测试工具。它特别适合进行高并发、高负载的性能测试,并且在 DevOps 和 CI/CD 流程中起了重要的作用。
我将为您介绍一份关于 Gatling 的全面、详细且专业的介绍。

为什么选择 Gatling?
极高的性能和低资源消耗
异步与非阻塞架构:Gatling 基于 Akka 工具包构建,采用异步和非阻塞 I/O 模型。这意味着它不使用传统的"一个用户一个线程"的模式,而是用少量线程处理大量并发用户。这使得它在生成数千甚至数万并发用户时,对硬件资源(CPU、内存)的需求远低于 JMeter 等线程阻塞式工具。

仿真器与报告器分离:负载生成和报告生成是分离的。在测试运行时,Gatling 只专注于产生负载并轻量级地记录数据,待测试结束后再生成详细的 HTML 报告。这进一步保证了测试期间的性能。

易于维护的 DSL语言
Gatling 使用 Scala 语言提供了一套领域特定语言(DSL)。这套 DSL 非常像自然语言,使得测试场景的定义清晰、简洁、易于理解。

示例对比:

// Gatling DSL - 非常直观
scenario("Standard User Flow")
  .exec(http("Get Homepage").get("/"))
  .pause(2)
  .exec(http("Search for Product").get("/search?term=gatling"))
  .pause(1, 5) // 随机停顿,更真实
  .exec(http("View Product Detail").get("/product/1234"))

相比于 JMeter 的 GUI 或 XML,Gatling 的脚本更易于版本控制(Git)、代码评审和重构。

强大的报告能力
Gatling 默认生成非常详细、专业且可视化的 HTML 报告。报告包含了所有关键性能指标,如响应时间分布、请求成功率、吞吐量等,并以动态图表形式展示。
报告能清晰地展示测试过程中性能指标的变化趋势,便于快速定位性能瓶颈。

原生 CI/CD 集成支持
由于测试脚本是代码,Gatling 可以轻松地集成到持续集成/持续部署流程中(如 Jenkins, GitLab CI, GitHub Actions)。
你可以将性能测试作为流水线的一个阶段,自动执行并收集结果,实现"性能左移"。

概念和工作流程
工作流程:
录制或编写脚本:使用 Recorder 或直接编写 Scala DSL 脚本。
编译:使用构建工具(sbt, Maven, Gradle)将 Scala 脚本编译成 JVM 字节码。
执行:Gatling 引擎加载编译后的代码,根据配置的负载模型(如用户注入策略)执行测试。
生成报告:测试结束后,引擎根据内存中的统计信息生成详细的 HTML 报告。

常用概念:
Scenario(场景): 定义了一个虚拟用户的行为流程,即一系列的动作(如 HTTP 请求、思考时间等)。
Simulation(仿真): 这是 Gatling 测试的入口点。一个 Simulation 类定义了:
要执行的 Scenario(s)
虚拟用户的注入策略(如何到达并发用户数)
测试的全局配置(如协议、断言等)
Protocol(协议): 主要定义要测试的目标系统协议,最常见的是 HttpProtocol。

快速入门:编写\执行
1. 项目设置(使用 sbt - Scala 构建工具)
创建一个标准的 sbt 项目,build.sbt 文件需要包含 Gatling 依赖:

// build.sbt
enablePlugins(GatlingPlugin)
name := "gatling-performance-test"
version := "1.0"
scalaVersion := "2.13.12" // 请使用Gatling官方支持的Scala版本
val gatlingVersion = "3.9.5"
libraryDependencies += "io.gatling.highcharts" % "gatling-charts-highcharts" % gatlingVersion % "test"
libraryDependencies += "io.gatling" % "gatling-test-framework" % gatlingVersion % "test"

2. 编写一个基本的 Simulation
在 src/test/scala 目录下创建你的第一个性能测试类,例如 BasicSimulation.scala:

import io.gatling.core.Predef._ // 导入核心DSL
import io.gatling.http.Predef._ // 导入HTTP DSL
import scala.concurrent.duration._ // 导入时间单位
class BasicSimulation extends Simulation {
  // 1. 定义HTTP协议配置
  val httpProtocol = http
    .baseUrl("https://jsonplaceholder.typicode.com") // 基础URL
    .acceptHeader("application/json") // 公共请求头
    .userAgentHeader("Gatling Performance Test")
  // 2. 定义测试场景
  val scn = scenario("Get Posts and Comments")
    .exec(
      http("Get All Posts") // 请求名称,会显示在报告中
        .get("/posts")      // HTTP GET 方法
        .check(status.is(200)) // 断言:检查响应状态码是否为200
    )
    .pause(1.second) // 思考时间:暂停1秒
    .exec(
      http("Get First Post Comments")
        .get("/posts/1/comments")
        .check(status.is(200), jsonPath("$[0].email").exists) // 多个断言,检查JSON路径
    )
  // 3. 在Simulation中注入负载,定义测试策略
  setUp(
    scn.inject(
      nothingFor(4.seconds), // 开始前等待4秒
      atOnceUsers(10),       // 立即注入10个用户
      rampUsers(50).during(30.seconds) // 在30秒内逐渐注入50个用户
      // constantUsersPerSec(5).during(1.minute) // 每分钟持续注入5个用户
    )
  ).protocols(httpProtocol) // 绑定协议配置
   .maxDuration(1.minute)   // 设置测试最大时长
}

3. 执行测试与查看报告
使用 sbt 命令执行:

# 进入项目根目录
cd your-gatling-project
# 只运行 BasicSimulation
sbt "gatling:testOnly BasicSimulation"
# 运行所有 Simulation
sbt gatling:test
# 不运行测试,只生成报告(如果已有日志文件)
sbt gatling:last

执行完成后,Gatling 会在 target/gatling 目录下生成一个带有时间戳的报告文件夹。打开其中的 index.html 即可查看完整的交互式报告。

一些复杂情况

复杂的注入策略:
Gatling 提供了非常灵活的负载模型,可以模拟各种真实的用户到达模式。

setUp(
  scn.inject(
    rampUsersPerSec(1).to(10).during(2.minutes), // 2分钟内从1用户/秒逐渐增加到10用户/秒
    constantUsersPerSec(10).during(5.minutes),   // 随后5分钟保持10用户/秒
    rampUsersPerSec(10).to(1).during(2.minutes)  // 最后2分钟内逐渐减少
  ).protocols(httpProtocol)
)

检查点与断言:
检查(Checks):用于验证响应内容,如状态码、响应体中的字段。
断言(Assertions):用于验证全局性能指标是否达标,定义在 Simulation 层级。

// 全局断言:要求所有请求的99%分位响应时间小于100ms,且所有请求失败率低于1%
setUp(...).assertions(
  global.responseTime.percentile(99).lt(100),
  global.failedRequests.percent.lt(1.0)
)

数据驱动与动态数据:
可以从外部文件(如 CSV)中读取数据,并为每个虚拟用户提供不同的测试数据,避免缓存。

val feeder = csv("users.csv").circular // 循环使用数据
val scn = scenario("Data Driven Test")
  .feed(feeder)
  .exec(
    http("Get User ${userid}") // 使用CSV文件中的userid列
      .get("/users/${userid}")
  )

代码组织:
对于复杂的测试,可以将公共配置、场景、数据等分离到不同的 Scala 对象或类中,保持代码的整洁和可复用。

Gatling 是一款为现代高性能需求而生的负载测试工具。 它的优势在于:能够用更少的资源模拟更高的并发,可维护的代码,开箱即用的专业级报告。对DevOps 友好性:完美契合CI/CD流程。
如果你的团队具备一定的编程能力(尤其是 Scala/JVM 生态),并且需要进行大规模、高频率的性能测试,Gatling 是一个非常理想的选择。对于需要测试多种协议(如数据库、消息队列)或者团队技术栈以 GUI 操作为主的情况,JMeter 可能仍是更合适的选择。

文章来源:卓码软件测评

精彩推荐:点击蓝字即可
▲大语言模型(LLM)应用安全:Prompt提示词注入攻击测试与防御.
▲WebAPP应用第三方JavaScript库安全风险检测
▲WEB应用搜索功能的安全测试SQL注入与逻辑漏洞

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

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

相关文章

重庆做seo网站优化选择哪家全国小微企业名录

点击上方“蓝字”关注我们“2020中国山东新旧动能转换高价值专利培育大赛”(简称“新高赛”)是由山东省市场监督管理局(知识产权局)主办,由山东省知识产权事业发展中心、知识产权出版社有限责任公司共同承办的以新旧动能转换高价值专利培育为主题的创新大赛。新高赛…

网站名称意义灵璧县建设局网站

你是否曾经尝试过将你的 Python 程序打包成一个可执行文件,却发现生成的文件大得惊人?别担心,本文将教你如何使用 PyInstaller 尽可能减小生成的 onefile 大小,让你的程序轻盈如风! 1. 使用虚拟环境 首先&#xff0c…

完整教程:二维凸包——Andrew 算法学习笔记

完整教程:二维凸包——Andrew 算法学习笔记pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &quo…

电脑性能优化综合指南:从网络到硬件的不全面解答

目录 网络速度篇 硬件维护篇 系统优化篇 内存管理篇 CPU优化篇 综合建议 网络速度篇 Q1: 下载速度和上传速度跟什么有关?和网页加载速度有关联吗? ​​A:​​ 下载速度和上传速度是衡量网络性能的两个关键指标:…

宁波网站推广软件哪家强网站突然打不开

下载jenkins 官方下载地址:Jenkins 的安装和设置 清华源下载地址:https://mirrors.tuna.tsinghua.edu.cn/jenkins/windows-stable/ 最新支持java8的版本时2.346.1版本,在清华源中找不到,在官网中没找到windows的下载历史&#xff…

深度学习中Bootstrap详解 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

设计师需要了解的网站手机百度网页版 入口

大家好,我是全栈小5,欢迎阅读小5的系列文章,这是《话题》系列文章 目录 引言评价AI模型“好不好”及“有没有发展”开源与闭源:两种发展路径的比较开源的优势与劣势闭源的优势与劣势 开源与闭源:你更看好哪一种&#x…

莆田做网站网站页面app下载大全

Vue思维导图目录MVC与MVVM的区别Vue基本代码结构Vue指令Vue组件class和style动态绑定computed计算属性EventBusfilter过滤器方法Vue是一套构建用户界面的框架,只关注视图层,它不仅易于上手,还便于与第三方库或既有项目整合。(Vue有配套的第三…

电子商务网站建设课程站长工具成品源码

出现这个问题的原因在于系统分配的“恢复分区”空间不足,该更新在安装时会失败。大致的思路是利用dispart工具收缩C盘空间,扩展该分区的空间。本人开始的“恢复分区”的空间是603MB,安装更新失败,扩充了250MB后,成功了…

深入解析:【数据结构】不带头节点单链表的基本操作

深入解析:【数据结构】不带头节点单链表的基本操作2025-10-01 09:21 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; disp…

少儿舞蹈小脚本(20):手机号登录与多角色注册

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

私活做网站企业建设网站的重要性

大家好,我是阿星,好久不见,欢迎来到Java并发编程系列番外篇线程状态转换,内容通俗易懂,请放心食用。线程状态先来个开场四连问Java线程状态有几个?Java线程状态是如何转换?Java线程状态转换什么…

ps做网站动图wordpress数据库访问慢

安装pygame本人电脑是windows 10、python3.6,pygame下载地址:pypi.python.org/pypi/Pygame…请自行下载对应python版本的pygame运行以下命令创建Pygame窗口及响应用户输入新建一个文件夹alien_invasion,并在文件夹中新建alien_invasion.py文件…

网站分为几种类型重庆建设工程信息网查询平台入口官网

2019独角兽企业重金招聘Python工程师标准>>> 描述: 在文档流中,父元素的高度默认是被子元素撑开的,也就是子元素多高,父元素就多高。但是当子元素设置浮动之后,子元素会完全脱离文档流,此时将会…

MySQL 8 密码验证组件 validate_password 的详细指南

MySQL 8 密码验证组件 validate_password 的详细指南一、组件核心认知与环境准备1. 组件本质与版本差异validate_password 在 MySQL 8 中由「插件」升级为「内置组件」,解决了旧版插件依赖系统库的问题。核心优势:无…

珠海网站定制开发网站备案需要那些资料

1.磁盘分区 1.分区有固定大小 2.直接写在这块盘的磁盘分区表中(DPT),和上面装什么操作系统没有任何关系 2.每一个磁盘分区都要先有一个磁盘分区类型 GPT(首选) MBR 3.磁盘专业术语叫做块设备(Block Dev…

网站地图用什么格式网站后台有显示前台没有

04-15 周一 GitHub仓库CI服务器配置过程文档 时间版本修改人描述2024年4月15日10:35:52V0.1宋全恒新建文档2024年4月17日10:33:20v1.0宋全恒完成github actions CI的配置和工作流配置文件解读文档的撰写 简介 一些基础概念 前提知识 仓库介绍 地址镜像介绍https://github.…

实用指南:语义三角论对人工智能自然语言处理中深层语义分析的影响与启示

实用指南:语义三角论对人工智能自然语言处理中深层语义分析的影响与启示2025-10-01 09:04 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: a…

Android开发-存储框架技术总结 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

国内网站模板郑州纯手工seo

JAVA开发的一套(智造制造领航者云MES系统成品源码)saas云MES制造执行系统源码,全套源码,支持二次开发 1990年11月,美国先进制造研究中心AMR(Advanced Manufacturing Research)就提出了MES&#…