Gatling使用的几个小技巧

栏目: Scala · 发布时间: 5年前

内容简介:Gatling是一个基于Scala,Akka和Netty的开源负载和性能测试框架,从功能上和JMeter很类似,只不过因为是基于DSL书写,从配置上来说灵活性比较好,当然相对的上手难度其实要大一些。最近项目上使用了一下Gatling,用的时候还是遇到一些小问题。Gatling官网的运行方式是下载整个Gatling,然后编写脚本以后,直接运行。这个操作不是很方便的,找到一个Gradle插件可以快速运行,其中Gatling的版本,参数等都可以通过build.gradle的参数配置,使用上是比较灵活的。

Gatling是一个基于Scala,Akka和Netty的开源负载和性能测试框架,从功能上和JMeter很类似,只不过因为是基于DSL书写,从配置上来说灵活性比较好,当然相对的上手难度其实要大一些。

最近项目上使用了一下Gatling,用的时候还是遇到一些小问题。

Gradle插件运行

Gatling官网的运行方式是下载整个Gatling,然后编写脚本以后,直接运行。这个操作不是很方便的,找到一个Gradle插件可以快速运行,其中Gatling的版本,参数等都可以通过build.gradle的参数配置,使用上是比较灵活的。

插件的配置如下:

plugins {
    id 'scala'
    id "com.github.lkishalmi.gatling" version "3.0.2"
}

gatling {
    toolVersion = '3.0.0'
    jvmArgs = [ '-server', '-Xms512M', '-Xmx512M' ]
    simulations = {
        include "**/*.scala"
    }
}

目录结构的要求是src/gatling/simulations,这个需要自己改一下

读取配置

配置可以是很多东西,比如比较常见的是不同环境不同的数据,比如URL,用户认证信息,或者是压测的压力情况都应该在配置,而不是硬编码在代码中。

配置文件地址src/galting/resource/application.properties

使用的时候直接调用

val conf = ConfigFactory.load()
val httpConf = http.baseUrl(conf.getString("baseUrl"))
  ...
  ...

配置的内容可以文本,也可以是数字等。

参数传递

有时候测试一些API需要有关联,会存在一些参数传递。比如首先调用创建API,获取返回值中的id,然后测试修改API,需要在请求数据中包含该id。

Gatling提供的方法是session,可以自己写入,也可以从返回中提取。

val xx = scenario("XX管理")
    .exec(
      http("新建XX")
        .post("/xx/create")
        .check(status.is(200))
        .check(jsonPath("$.code").is("0"))
        .check(jsonPath("$.data.id").saveAs("xxId"))
    )
    .exec(
      http("更新XX")
        .post("/xx/update")
        .formParam("id", session => session("xxId").as[Int])
        .check(status.is(200))
        .check(jsonPath("$.code").is("0"))
    )

然后需要把session中的值注入请求中,而请求比较大,是存放在文件中的,可以使用ElFileBody

.exec { session => session.set("title", "标题" + ThreadLocalRandom.current.nextInt(10000)) }
  .exec(
    http("添加内容")
      .post("/content/save")
      .body(ElFileBody("json/save.json")).asJson
      .check(status.is(200))
  )

用户配置

Gatling可以指定模拟的用户量,比较简单的是atOnceUsers,这是一次性模拟一定数量的用户,但是很多时候我们需要一个缓慢增长的过程,比如用户在3秒中从1增加到100

setUp(
    scn.inject(
        rampUsers(10) over (5 seconds), 
        constantUsersPerSec(20) during (15 seconds), 
        rampUsersPerSec(10) to 20 during (10 minutes), 
        splitUsers(1000) into (rampUsers(10) over (10 seconds)) separatedBy (10 seconds),
        heavisideUsers(1000) over (20 seconds)
    ).protocols(httpConf)
)

具体用哪种看情况,但是一定要引入如下的包,不然seconds这些时间控制会一直报错

import scala.concurrent.duration._

Gatling测试结果

Gatling的默认测试结果是一个网页,可视化效果比起来JMeter要方便不上,但是有时候需要自定义的情况,可以直接从Gatling的结果文件中进行加工。以下是一些加工效果

Gatling使用的几个小技巧

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

嵌入式Linux应用开发完全手册

嵌入式Linux应用开发完全手册

韦东山 主编 / 人民邮电出版社 / 2008-8 / 69.00元

本书全部实例代码及相关工具。 基于ARM 9+Linux 206平台,从基础讲起,引导读者快速入门,实例丰富,可直接应用于工程实践。 本书全面介绍了嵌入式Linux系统开发过程中,从底层系统支持到上层GUI应用的方方面面,内容涵盖Linux操作系统的安装及相关工具的使用、配置,嵌入式编程所需要的基础知识(交叉编译工具的选项设置、Makefile语法、ARM汇编指令等),硬件部件的使用及......一起来看看 《嵌入式Linux应用开发完全手册》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

随机密码生成器
随机密码生成器

多种字符组合密码

SHA 加密
SHA 加密

SHA 加密工具