Как увеличить переменную в цикле Гатллинга

Я пытаюсь написать сценарий Гатлинга, в котором я читаю начальный номер из файла CSV и просматриваю его, скажем, 10 раз. На каждой итерации я хочу увеличивать значение параметра.

Похоже, что требуется некоторая математика Scala или Java, но не удалось найти информацию о том, как это сделать, или как и где объединить Gatling EL с Scala или Java.

Цените любую помощь или направление.

var numloop = new java.util.concurrent.atomic.AtomicInteger(0)

val scn = scenario("Scenario Name")

.asLongAs(_=> numloop.getAndIncrement() <3, exitASAP = false){
    feed(csv("ids.csv"))   //read ${ID} from the file
    .exec(http("request")
        .get("""http://finance.yahoo.com/q?s=${ID}""")
        .headers(headers_1))
    .pause(284 milliseconds)

    //How to increment ID for the next iteration and pass in the .get method?
}

person pparthi    schedule 11.06.2014    source источник


Ответы (2)


Вы скопировали этот код из группы Google Гатлинга, но этот вариант использования был очень конкретным. Вы сначала правильно прочитали документацию по циклам? Какой у вас вариант использования и как он не подходит для базовых циклов?

Изменить: Итак, вопрос: как мне получить уникальный идентификатор для каждой итерации цикла и для каждого виртуального пользователя?

Вы можете вычислить один для индекса цикла и идентификатора виртуального пользователя. У сеанса уже есть уникальный идентификатор, но это String UUID, поэтому это не очень удобно для того, что вы хотите делать.

// first, let's build a Feeder that set an numeric id:
val userIdFeeder = Iterator.from(0).map(i => Map("userId" -> i))

val iterations = 1000

// set this userId to every virtual user
feed(userIdFeeder)
// loop and define the loop index
.repeat(iterations, "index") {
  // set an new attribute named "id"
  exec{ session =>
    val userId = session("userId").as[Int]
    val index = session("index").as[Int]
    val id = iterations * userId + index
    session.set("id", id)
  }
  // use id attribute, for example with EL ${id}
}
person Stephane Landelle    schedule 12.06.2014
comment
Я также разместил этот вопрос в группе Гатлинга. - person pparthi; 14.06.2014
comment
Я также разместил этот вопрос в группе Гатлинга. Проблема, с которой я столкнулся, заключается в использовании в сценарии некоторых математических функций. ИМО, документация дает хорошую отправную точку. Однако у меня возникли проблемы с решением моей проблемы. Каждый пользователь должен отправить, скажем, 1000 GET, но значения ID в каждом GET должны быть увеличены. Итак, если первый пользователь начинает с ID = 1, он отправит от 1 до 1000 в GET. Следующий пользователь начнет, скажем, с 2001 года и отправит GET с 20001 на 3000 и так далее. Спасибо, что нашли время ответить, а также признательны за то, что вы активно помогаете другим. - person pparthi; 14.06.2014
comment
@StepphaneLandelle Это единственный вопрос по этому поводу в Stackoverflow, так почему бы просто не ответить на этот вопрос. Зачем жаловаться и спрашивать, читал ли парень хреновый мануал? - person AHH; 06.10.2020

Вот мой ответ на это: Постановка проблемы: мне пришлось повторить выполнение gatling заданное количество раз, и имя моего шага должно быть динамическим.

    object UrlVerifier {

  val count = new java.util.concurrent.atomic.AtomicInteger(0)
  val baseUrl = Params.applicationBaseUrl

  val accessUrl = repeat(Params.noOfPagesToBeVisited,"index") {
    exec(session=> {
      val randomUrls: List[String] = UrlFeeder.getUrlsToBeTested()
      session.set("index", count.getAndIncrement).set("pageToTest", randomUrls(session("index").as[Int]))
    }
    ).
    exec(http("Accessing Page ${pageToTest}")
      .get(baseUrl+"${pageToTest}")
      .check(status.is(200))).pause(Params.timeToPauseInSeconds)
  }

Итак, в основном UrlFeeder дает мне список String (URL-адреса для тестирования), а в exec мы используем count (AtomicInteger), и с его помощью мы заполняем переменную с именем 'index', значение которой будет начинаться с 0 и будет getAndIncremented в каждая итерация. Эта переменная index - это та, которая будет использоваться в цикле repeat (), поскольку мы указываем имя counterVariable, которое будет использоваться как index.

Надеюсь, это поможет и другим.

person Sanjay Bharwani    schedule 12.05.2017