一般在测试中我们都希望能动态的传递参数进行请求,这样才更加贴近实际。本篇主要针对动态参数请求的脚本编写进行介绍。
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
// 顺序循环调用
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文件给大家截个图
小贴士:在发起一次请求的时候我们用到csv多个字段,入参的值是当前随机的同一行。
举个例子,当我请求/region/countties/map?mType=${type}&cityId=${cityId}&provinceId=${provinceId},刚好随机或者顺序到 北京市,北京市,朝阳区的时候,那么cityeId,provinceId也都是该行的,不会说每次取变量都再随机一次。
最后
参数的传入已经介绍完毕,后面的json,jdbc,redis等的处理详细页大同小异,如果哪位朋友遇到什么问题可以一起交流下,或者和我分享下^_^。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。