一般在测试中我们都希望能动态的传递参数进行请求,这样才更加贴近实际。本篇主要针对动态参数请求的脚本编写进行介绍。

Gatling参数处理

Gatling对参数的处理称为Feeder[供料器],支持主要有:

1.数组

val feeder = Array(
  Map("foo" -> "foo1", "bar" -> "bar1"),
  Map("foo" -> "foo2", "bar" -> "bar2"),
  Map("foo" -> "foo3", "bar" -> "bar3")).random

参数选取的形式,下面几个参数方式都可适用

queue // 顺序调用,加入我们循环执行请求100次,但是参数只有5个,当5个跑完后gatling测试就会报错终止
random // 随机调用
circular // 顺序循环调用
clipboard.png

2.CSV

val csvFeeder = csv("foo.csv")//文件路径在 %Gatling_Home%/user-files/data/

3.json

val jsonFileFeeder = jsonFile("foo.json")
//json的形式:
[
  {
    "id":19434,
    "foo":1
  },
  {
    "id":19435,
    "foo":2
  }
]

4.JDBC

jdbcFeeder("databaseUrl", "username", "password", "SELECT * FROM users")

5.redis

本篇主要针对前两种进行介绍,其它的我也没有用过,暂时就不卖了,可参看官方文档http://gatling.io/docs/2.1.7/session/feeder.html#feeder

参数Code实战

新建一个Scala类,注意继承Simulation。直接上代码了

import io.gatling.core.Predef._
import io.gatling.core.scenario.Simulation
import io.gatling.http.Predef._
import scala.concurrent.duration._
/**
  * region请求接口测试
  * Created by 青芒 on 16/4/21.
  */
class DynamicTest extends Simulation {
  val httpConf = http.baseURL("http://127.0.0.1:7001/test")
  //地区 feeder
  val regionFeeder = csv("region.csv").random
  //数组形式
  val mapTypeFeeder = Array(
    Map("type" -> ""),
    Map("type" -> "id_to_name"),
    Map("type" -> "name_to_id")).random
  //设置请求地址
  val regionRequest =
    exec(http("region_map").get("/region/map/get"))
      //加载mapType feeder
      .feed(mapTypeFeeder)
      //执行请求, feeder里key=type, 在下面可以直接使用${type}
      .exec(http("province_map").get("/region/provinces?mType=${type}"))
      //加载地区 feeder
      .feed(regionFeeder)
      //region.csv里title含有provinceId和cityId,所以请求中直接引用${cityId}/${provinceId}
      .exec(http("county_map").get("/region/countties/map?mType=${type}&cityId=${cityId}&provinceId=${provinceId}"))
  //声明scenario name=dynamic_test
  val scn = scenario("dynamic_test")
        .exec(during(180){ regionRequest
        })
  //在2秒内平滑启动150个线程(具体多少秒启动多少线程大家自己评估哈,我这里瞎写的)
  setUp(scn.inject(rampUsers(150) over (2 seconds)).protocols(httpConf))
}

我的csv文件给大家截个图
clipboard.png
clipboard.png

小贴士:在发起一次请求的时候我们用到csv多个字段,入参的值是当前随机的同一行。
举个例子,当我请求/region/countties/map?mType=${type}&cityId=${cityId}&provinceId=${provinceId},刚好随机或者顺序到 北京市,北京市,朝阳区的时候,那么cityeId,provinceId也都是该行的,不会说每次取变量都再随机一次。

最后

参数的传入已经介绍完毕,后面的json,jdbc,redis等的处理详细页大同小异,如果哪位朋友遇到什么问题可以一起交流下,或者和我分享下^_^。


青芒
205 声望60 粉丝

java骚年


引用和评论

0 条评论