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

Passing arguments between Gatling scenarios and simulation

我目前正在创建一些 Gatling 模拟来测试 REST API。我不太懂Scala。

我创建了一个包含多个 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))

}

我要模拟的应用程序是一个多位置移动应用程序,因此我为每个区域设置(美国、法国、意大利...)准备了一组示例数据

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

是否可以执行我的模拟而不必 create/duplicate 场景并更改 val ccData = ssv("cardcode_fr.csv").random 每个一个?

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

提前致谢。

根据你所说的,我认为这可能是一个很好的方法:

首先对您的数据进行分组,以便您可以根据当前区域设置查找要发送的每个项目。为此,我建议使用一个映射,该映射将语言环境字符串(例如 "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 结构中,因为我假设您不想对每个项目进行硬编码对于代码中的每个字段。