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使用的几个小技巧

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

查看所有标签

猜你喜欢:

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

营销三大算法

营销三大算法

刘学林、刘逸春、张新春、王颖、余彬晶、刘锦炽、董少灵、沈逸超、王锐睿、孙静若 / 上海交通大学出版社 / 2018-1-31 / 88.00元

未来的营销应该是数字化的,即数字营销。以数据为本,用演算做根,数字营销能够演算生活的方方面面。在数字营销领域,市场的整个投入、产出带来什么东西?企业一定要狠清楚地知道,这是做数字营销的本质。数字营销和企业做生意的本质是一样的,目的都是以投入换取产出。 本书由正和岛数字营销部落编写,基于大量企业的案例与数据,提出了营销三大核心算法与一套全局营销系统,帮助企业CEO与营销人员科学化建立全局营销系......一起来看看 《营销三大算法》 这本书的介绍吧!

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具