2015-03-12 2 views
2

В настоящее время я создаю моделирование Gatling для тестирования API REST. Я действительно не понимаю Скала.Передача аргументов между сценариями Gatling и имитацией

Я создал сценарий с несколькими 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)) 

} 

приложение Я пытаюсь моделировать является multilocation мобильных приложений, поэтому я подготовил набор выборок данных для каждой Locale (США, FR, IT ...)

Мой REST API обрабатывает все локали, поэтому я хочу, чтобы сделать имитацию одновременно выполнять несколько экземпляров из MyScenario, каждый с другим образцом локали, для имитации глобальной нагрузки.

Можно ли выполнить мое моделирование без необходимости создавать/дублировать сценарий и изменить Вали ccData = ПКА («cardcode_fr.csv»). Случайным образом для каждого из них?

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

Заранее спасибо.

ответ

1

Из того, что вы сказали, я думаю, что это может быть хороший подход:

Start, группируя данные таким образом, что вы можете посмотреть на каждый элемент, который вы хотите отправить на основе текущей локали. Для этого я бы рекомендовал использовать карту, соответствующую строке локали (например, «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 
} 

Это очень упрощенный пример - вы должны выяснить, как вы на самом деле хотите, чтобы извлечь данные из файлов и поместить его в структуру карты, как я предполагаю, что вы не хотите жестко кодировать каждый элемент для каждого поля в свой код.

+0

Я не думаю, что это отвечает на вопрос. Он обеспечивает решение с использованием случайных, но не помогает передавать параметры для моделирования в сценарий. – joniba

+0

Ну, для этого вам просто нужно вручную добавить параметры, возможно, с '.queryParam()' или (если вы поместите несколько параметров в последовательность) 'queryParamSeq()' – childofsoong