Gatling使用的几个小技巧

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

内容简介: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使用的几个小技巧

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

查看所有标签

猜你喜欢:

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

网络共和国

网络共和国

[美] 凯斯·桑斯坦 / 黄维明 / 上海人民出版社 / 2003-6-1 / 15.00元

本书主要讨论网络中的民主问题。网络技术已经深刻地影响了我们的生活,我们随时可以获得我们需要的信息,我们也随时可以与别人联系,那么网络技术是不是就是民主的福音呢?作者回答说不,他认为通过网络人们更容易获得的是自己喜欢的信息,而拒绝接受自己不喜欢的信息,事实上人们得到的是窄化的信息,很多的网站也不和与自己立场相反的网站链接。而在一个真正的民主的环境中,信息应是多元的并且不是我们事先选择的,在其中我们还......一起来看看 《网络共和国》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具