通常在测试中咱们都但愿能动态的传递参数进行请求,这样才更加贴近实际。本篇主要针对动态参数请求的脚本编写进行介绍。html
Gatling对参数的处理称为Feeder[供料器],支持主要有:redis
1.数组json
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
// 顺序循环调用session
2.CSVdom
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.JDBCspa
jdbcFeeder("databaseUrl", "username", "password", "SELECT * FROM users")
5.redis线程
本篇主要针对前两种进行介绍,其它的我也没有用过,暂时就不卖了,可参看官方文档http://gatling.io/docs/2.1.7/session/feeder.html#feederscala
新建一个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文件给你们截个图
小贴士:在发起一次请求的时候咱们用到csv多个字段,入参的值是当前随机的同一行。
举个例子,当我请求/region/countties/map?mType=${type}&cityId=${cityId}&provinceId=${provinceId},恰好随机或者顺序到 北京市,北京市,朝阳区的时候,那么cityeId,provinceId也都是该行的,不会说每次取变量都再随机一次。
参数的传入已经介绍完毕,后面的json,jdbc,redis等的处理详细页大同小异,若是哪位朋友遇到什么问题能够一块儿交流下,或者和我分享下^_^。