性能测试工具 接口压测工具 Gatling 学习笔记 (一)

xiaoxiao · 2019年11月26日 · 最后由 very 回复于 2020年12月29日 · 674 次阅读

Gatling 官网:https://gatling.io
官方文档:https://gatling.io/docs/current/
快速开始:https://gatling.io/docs/current/quickstart

一、工具

IDE:IntelliJ IDEA
java:1.8

二、安装 Scala 插件

导航栏选择 Intellij Idea -> Preference... -> Plugins,选择 Install JetBrains plugin...,搜索 Scala,然后 install,最后 Restart IntelliJ IDEA。

三、通过 Maven 创建 Gatling 项目

1.安装 io.gatling.highcharts

步骤:File -> New -> Project... -> Maven -> 勾选 Create from archetype -> Add Archetype... 添加以下内容:
GroupId:io.gatling.highcharts
ArtifactId: gatling-highcharts-maven-archetype
Version: 3.3.1
点击这里可以查看当前最新的版本:查看 io.gatling.highcharts 版本

2.创建 Gatling 项目

1.如果是接着前面安装 io.gatling.highcharts,直接 next 后,输入你项目的 GroupId(包名) 和 ArtifactId(项目名) 来完成项目创建。
2.如果是再次打开 Intellij IDEA 创建 Maven 项目的话,勾选 Create from archetype 后,选择 io.gatling.highcharts:gatling-highcharts-maven-archetype,如图:

next 后,输入你项目的 GroupId(包名) 和 ArtifactId(项目名) 来完成项目创建。
3.项目创建完成后,右下角会提示 Import Changes,点击它

最后 Maven 会自动配置项目结构,对应的 pom.xml 如下:

项目目录如下:

  • bodies:用来存放请求的 body 数据
  • data:存放需要输入的数据
  • scala:存放 Simulation 脚本
  • Engine:右键运行跟运行 bin\gatling.bat 效果一致
  • Recorder:右键运行跟运行 bin\recorder.bat 效果一致,录制的脚本存放在 scala 目录下
  • target:存放运行后的测试报告

四、创建 case

1、在 scala 目录下面,New -> Scala Class,新建命名 BaiduSimulation,然后添加以下代码:

package test.scala

import io.gatling.core.Predef._
import io.gatling.http.Predef._

class BaiduSimulation extends Simulation {
    // 设置请求的根路径
    val httpConf = http.baseUrl("https://www.baidu.com")
    /*
    运行10秒 during 默认单位秒,如果要用微秒 during(100 millisecond)
    */
    val scn = scenario("BaiduSimulation").during(10){
        exec(http("baidu_home").get("/"))
    }
    // 设置线程数
    setUp(scn.inject(atOnceUsers(10)).protocols(httpConf))
}

2、如何运行
方法一:选中 src/test/scala 下面的 Engine,右键,Run 'Engine',控制台显示如下:

这时候需要在控制台按一下 Enter 键才会继续执行,执行结束结果如下:

我们可以看到,最后一行提示我们在 target/gatling/目录下面可以找到对应结果报告打开它

双击打开 index.html,然后选择对应的浏览器打开报告


在图中我们可以看到,请求响应基本都在 800ms 以内,而 Total 的请求为 12491 个,OK 成功的 12489 个,KO 失败的 2 个,说明接口压测 10 个用户的结果是正常的。

五、其它问题

1、IDEA 无法 New Scala Class
解决办法:https://www.cnblogs.com/lingluo2017/p/8673243.html
2、scala sdk 安装失败,或安装不成功
解决办法:版本不对,可以换个版本再安装:https://blog.csdn.net/iamlihongwei/article/details/72783459
3、选中 Engine.scala 右键时,没有 run 选项
解决办法:选中 src 目录,右键,Mark Directory As → Source Root
4、选中 Engine.scala 右键 run 后,出现报错:Gatling 错误: 找不到或无法加载主类 Engine
解决办法:把 scala-sdk 删掉,重新添加,选择 File → Project Structure... → Global Libraries,选中 - 号,把 scala-sdk-x.x.x 删掉,然后选择 + 号,添加任意版本,建议使用低版本,高版本不够稳定可能会有新的问题,这里楼主选择 2.12.8 版本,最后 Apply 后,点 OK 保存。
5、选中 Engine.scala 右键 run 后,出现报错:

Exception in thread "main" java.lang.ExceptionInInitializerError
    at Engine$.delayedEndpoint$Engine$1(Engine.scala:7)
    at Engine$delayedInit$body.apply(Engine.scala:4)
    at scala.Function0.apply$mcV$sp(Function0.scala:34)
    at scala.Function0.apply$mcV$sp$(Function0.scala:34)
    at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
    at scala.App.$anonfun$main$1$adapted(App.scala:76)
    at scala.collection.immutable.List.foreach(List.scala:389)
    at scala.App.main(App.scala:76)
    at scala.App.main$(App.scala:74)
    at Engine$.main(Engine.scala:4)
    at Engine.main(Engine.scala)
Caused by: java.lang.NullPointerException
    at io.gatling.commons.util.PathHelper$.url2path(PathHelper.scala:34)
    at IDEPathHelper$.<init>(IDEPathHelper.scala:7)
    at IDEPathHelper$.<clinit>(IDEPathHelper.scala)
    ... 11 more

解决办法:选中 src 目录右键,选择 Mark Directory as... → Unmark as Sources Root,然后再选中 scala 目录右键,选择 Mark Directory as... → Test Sources Root。再次 run 一下 Engine.scala 即可。

共收到 8 条回复 时间 点赞

性能怎样 相比 python 的 locust

JonnySen 回复

locust 和 gatling 的单机并发能力都比 LoadRunner/Jmeter 高,至于到底谁最高,这个就不清楚了。gatling 比 locust 的优势在于有相对完善的测试报告。

我 locust 使用 Ubuntu16 核心 32G 内存的机器跑 6、7K 并发就很吃力了。。。

JonnySen 回复

单机并发貌似也就 8k 左右,顶多到 1 万,再多应该撑不住了😅 jmeter 就比这个低多了吧

我单机 使用的是 --process 启动的,要是主从并发的话怎么一次启动从节点的多个核心呢😀

JonnySen 回复

有空我再用 locust 试试看,比较下两者😀

JonnySen 回复

这个 6、7K 并发说的是 rps(requests per second) 么?我发现我之前可能理解错了,我这到不了这么高。我的 Mac 用 locust 也试了下访问的百度,最高只有 350rps😂 也试了下 gatling,大概设置 2000 用户访问没问题。果然还是 Linux 做性能测试相对比较好。😂

xiaoxiao 接口压测工具 Gatling 学习笔记 (二) 中提及了此贴 12月30日 20:38

https 的怎么写?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册