鼠年全马铁人挑战 WEEK 34:负载性能测试 - Gatling (上)

           Photo on gatling.io


前言

前几周小弟介绍了一款负载性能的测试工具 JMeter
如果还没看过的大哥大姐 可以在参考下方连结
鼠年全马铁人挑战 WEEK 29:负载性能测试 - JMeter (上)
鼠年全马铁人挑战 WEEK 30:负载性能测试 - JMeter (下)

而这周小弟想要介绍另一款负载性能测试工具 Gatling
Gatling 在负载测试工具中也是数一数二的
既然都介绍了 JMeter 当然也不能错过这周的内容~


安装 Gatling

执行 Gatling 范例脚本

安装下来的 Gatling 中包含了一些范例测试档
我们可以透过这些范例测试档 来快速测试一下 Gatlig 的执行方式与结果
透过指令来执行 bin 底下的 gatling 档案

进入 gatling 的 bin 资料夹层
$ cd gatling-charts-highcharts-bundle-<version>/bin && sh gatling.sh

执行後会出现包含 Gatling 的范例测试

Choose a simulation number:
     [0] computerdatabase.BasicSimulation
     [1] computerdatabase.advanced.AdvancedSimulationStep01
     [2] computerdatabase.advanced.AdvancedSimulationStep02
     [3] computerdatabase.advanced.AdvancedSimulationStep03
     [4] computerdatabase.advanced.AdvancedSimulationStep04
     [5] computerdatabase.advanced.AdvancedSimulationStep05

这时候输入 0 的基本范例测试
以及执行说明 Run Gatling demo test(也可以不输入)


Gatling 范例测试执行完成後 会多一个 results 的资料夹
刚刚完成的范例测试报告也会存在该资料夹底下

开启 Gatling recorder

执行完 Gatling 的范例测试後确定没问题
就可以来看看 Gatling 的 recorder 功能了
透过指令来开启 Gatling 的 GUI 录制介面
$ cd gatling-charts-highcharts-bundle-<version>/bin && sh recorder.sh

完成开启後 就可以轻松的透过 GUI 介面来操作设定了

介绍 Gatling recorder

先简单的介绍 GUI 介面上的每一个区块所做的事情吧~

  • Recorder mode
    右上角的 Recorder mode 分为两种模式 可以透过下拉式选单做选择
    • HTTP Proxy (HTTP 代理模式)
    • HAR Converter (Http Archive 转换器)
  • Network/Http Archive (HAR) Import
    根据不同的 Recorder mode,有相对应的设置内容
    • Network:HTTP Proxy 的设置内容
    • Http Archive (HAR) Import:HAR Converter 的设置内容
  • Simulation Information
    对後续产生脚本的设置内容
    • Package: 产生脚本所在的 Package 名称,也就是父资料夹名称
    • Class Name: 产生脚本的 Class Name,也就是脚本名称
    • Follow Redirects:是否随着网页重定向
    • Infer HTML resources:获取在下方 Filters 中的 html resource
    • Automatic Referers:是否自动计算 http header 里的 refer 字段
    • Remove cache headers:是否清除 header 里的缓存
    • Use Class Name as request prefix:是否将 Class Name 作为请求名的前缀
    • Save & check response bodies:是否储存并检查返回的 body
  • Output
    储存产生脚本的路径位置与储存格式
  • Filters
    透过正规表示式来记录请求名单
    例如:想记录任何 CSS 文件,则可以在名单部分中添加 .*\\.css
    • 白名单:只获取白名单中指定的资源
    • 黑名单:获取除了黑名单指定的资源,可以点击右下角的 No static resources 排除所有的静态资源

使用 Gatling recorder

透过 Gatling Recorder 的 GUI 操作,可以协助快速的产生脚本
因次无论使用何种模式 (HTTP Proxy/HAR Converter) 都可完成目的

但是因为 HTTP Proxy 使用上的限制较 HAR Converter 多且复杂
不但有安全的疑虑,也会有浏览器不支援的情况
因此这边小弟将使用 HAR Converter 的模式来进行操作

获取 HAR 档案

  1. 开启测试网页 (https://www.google.com/)
  2. 开启开发人员工具视窗 有下列四种方式
    • 画面空白处点击右键选择检查
    • 点击右上角选单更多工具中的开发人员工具
    • 使用快捷键:Windows: control+shift+i Mac:option+command+i
    • 使用快捷键:F12
  3. 切换 tab 至 Network 并清除现有 request
  4. 勾选 Preserve log 来保留录制期间的所有 Log
  5. 进行网页测试的操作,结束後将 log 的内容存成 har 的文件档案

    选择任何一个 request 点击右键选择 Save all as HAR with content

  6. 最後回到 Gatling recorder 的 GUI 介面
    1. Recorder mode 选择 HAR Converter (Http Archive 转换器)
    2. Http Archive (HAR) Import 选择刚刚存档的 HAR Converter 档案路径
    3. 点击右下角的 Start 按钮,将内容转换成 Scala 脚本
  7. 进入 Output 设置的 Siumlations 资料夹位置

    查看 Class Name 名为 RecordedSimulation 的 scala 档案


执行 Gatling 脚本

接着只要在执行一次上面说过的指令来执行脚本 就大功告成罗~
进入 gatling 的 bin 资料夹层执行 gatling
$ cd gatling-charts-highcharts-bundle-<version>/bin && sh gatling.sh

执行後会出现包含 Gatling 的范例测试
也会出现刚刚成功转档的 scala 档案

Choose a simulation number:
     [0] RecordedSimulation
     [1] computerdatabase.BasicSimulation
     [2] computerdatabase.advanced.AdvancedSimulationStep01
     [3] computerdatabase.advanced.AdvancedSimulationStep02
     [4] computerdatabase.advanced.AdvancedSimulationStep03
     [5] computerdatabase.advanced.AdvancedSimulationStep04
     [6] computerdatabase.advanced.AdvancedSimulationStep05

这时候输入 0RecordedSimulation 范例测试
以及执行说明 Run RecordedSimulation demo test(也可以不输入)
执行完成後进入 results 的资料夹 查看刚刚完成的测试报告


结尾

以上是这周的 Gatling 内容
主要分享了安装与执行范例测试
以及 Recorder GUI 的 HAR 转 Scala 的方法

因为小弟也是新手使用的分享文
所以介绍的内容可能有遗漏或是错误,还请各位大哥大姐提点
小弟将继续往下周迈进。 ─=≡Σ((( つ•̀ω•́)つ


参考文献

官方网站 (载点)


<<:  [Day27]jsES6语法-解构(下)

>>:  Day26 Flutter 的状态管理 Provider (五) Firebase Login

Day3 - numpy(2) 基本索引

今天的重点 索引 基本索引: 先建立一个4x3的ndarray来让我们实际操作 阵列索引是由外而内的...

30天学会C语言: Day 7-switch ON!!!

如果一段 if-else if 中的条件都在判断 同一笔资料 是不是 等於某值,这段 if-else...

Day 05-选择React & Redux

!前提小补充! UI: User Interface(使用者介面),设计页面,须注意到网页页面使用的...

流程控制

选择语句 最简单的版本 if 表达式: 接下来需要做的...... 当然,前一章也看过了,也有els...

[2021铁人赛 Day14] General Skills 11

引言 昨天比较重要的重点是 Python 中括号用法, 看看下面的练习回忆一下吧: a = 'pi...