Gatling教程系列一實現GET請求動態參數(三)

通常在測試中咱們都但願能動態的傳遞參數進行請求,這樣才更加貼近實際。本篇主要針對動態參數請求的腳本編寫進行介紹。html

Gatling參數處理

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 // 順序循環調用
clipboard.pngsession

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

參數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等的處理詳細頁大同小異,若是哪位朋友遇到什麼問題能夠一塊兒交流下,或者和我分享下^_^。

相關文章
相關標籤/搜索