在Gatling场景和模拟之间传递参数

时间:2015-03-12 12:09:47

标签: scala rest gatling

我目前正在创建一些Gatling仿真来测试REST API。我真的不懂斯卡拉。

我创建了一个包含多个exec和pause的场景;

object MyScenario { 

  val ccData = ssv("cardcode_fr.csv").random
  val nameData = ssv("name.csv").random
  val mobileData = ssv("mobile.csv").random
  val emailData = ssv("email.csv").random
  val itemData = ssv("item_fr.csv").random  

  val scn = scenario("My use case")
    .feed(ccData)
    .feed(nameData)
    .feed(mobileData)
    .feed(emailData)
    .feed(itemData)
    .exec(
      http("GetCustomer")
        .get("/rest/customers/${CardCode}")
        .headers(Headers.headers)
        .check(
          status.is(200)
        )
     )
     .pause(3, 5)
     .exec(
      http("GetOffers")
        .get("/rest/offers")
        .queryParam("customercode", "${CardCode}")
        .headers(Headers.headers)
        .check(
          status.is(200)
        )
      )
}

我有一个简单的模拟:

class MySimulation extends Simulation {
  setUp(MyScenario.scn
    .inject(
        constantUsersPerSec (1 ) during (1)))
    .protocols(EsbHttpProtocol.httpProtocol)
    .assertions(
      global.successfulRequests.percent.is(100))

}

我正在尝试模拟的应用程序是一个多位置移动应用程序,所以我为每个Locale(US,FR,IT ......)准备了一组样本数据

我的REST API处理所有语言环境,因此我想让模拟同时执行 MyScenario 的多个实例,每个实例都有不同的语言环境示例,以模拟全局负载。

是否可以执行我的模拟而无需创建/复制场景并为每个场景更改 val ccData = ssv(“cardcode_fr.csv”)。random

此外,每个区域设置都有自己的负载,如何创建一个模拟,该模拟采用单个场景并与不同的负载和馈线同时执行多次?

提前致谢。

1 个答案:

答案 0 :(得分:2)

从你所说的话来看,我认为这可能是一个很好的方法:

首先将数据分组,以便您可以根据当前区域设置查找要发送的每个项目。为此,我建议使用与区域设置字符串匹配的地图(例如" FR")到与您要填写的字段匹配的项目。然后,在在场景的每次迭代开始时,您只需从列表中选择要用于当前迭代的区域设置。它看起来像这样:

val locales = List("US", "FR", "IT")
val names = Map( "US" -> "John", "FR" -> "Pierre", "IT" -> "Guillame")

object MyScenario {
    //These two lines pick a random locale from your list
    val random_index = rand.nextInt(locales.length);
    val currentLocale = locales(random_index);
    //This line gets the name
    val name = names(currentLocale)
    //Do the rest of your logic here
}

这是一个非常简单的示例 - 您必须弄清楚您实际上想要如何从文件中检索数据并将其放入Map结构中,因为我假设您不想要硬编码每个字段的每个项目都包含在您的代码中。