通常在測試中咱們都但願能動態的傳遞參數進行請求,這樣才更加貼近實際。本篇主要針對動態參數請求的腳本編寫進行介紹。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等的處理詳細頁大同小異,若是哪位朋友遇到什麼問題能夠一塊兒交流下,或者和我分享下^_^。