K6 Стресс-тест с перемешанными изображениями - PullRequest
1 голос
/ 08 мая 2020

Контекст

  • Я создаю файл javascript для загрузки и выполнения инструментом K6.
  • Он будет использоваться как для напряжения, так и для
  • Мои запросы POST будут содержать 1 изображение и 1 идентификатор
  • Я хочу использовать случайное изображение в пределах 7 известных вариантов
  • Я хочу генерировать идентификатор случайным образом

Вопрос

Где мне следует рандомизировать как изображение, так и де-идентификатор, которые будут использоваться в запросах? В «контексте инициализации» или «контексте vu»?

Код с учетом «контекста инициализации»

let rand_id = getRandomInt(10000,99999)
let image = open("face"+getRandomInt(0,6)+".jpg","b")

export default function() {
    group("post_request", function() {
        http.post("https://my_api", {
            "id": rand_id,
            "image": http.file(image),
        })
    });
}

Код с учетом «контекста vu»

let images = []
for (i=0; i <= 6; i++) {
  images.push(open("face"+i+".jpg","b"))
}

export default function() {
    group("post_request", function() {
        http.post("https://my_api", {
            "id": getRandomInt(10000,99999),
            "image": http.file(open(images[getRandomInt(0,6)],"b")),
        })
    });
}

1 Ответ

1 голос
/ 08 мая 2020

tl; dr Если вы хотите, чтобы он был случайным - «vu context»

Как объяснено в k6 жизненный цикл теста контекст инициализации выполняется один раз за VU (и как минимум еще 1 до начала теста).

Это означает, что если вы генерируете случайное число в контексте инициализации, вы получите одно и то же «случайное» число для каждой итерации различных VU. Это по-прежнему означает, что разные VU будут иметь разные случайные значения, которые они не будут менять между итерациями, если это нормально с вашим вариантом использования, который совершенно нормален.

Но я думаю, что вы хотите, это чтобы постоянно генерировать новый случайный идентификатор на каждой итерации и использовать соответствующий идентификатор и изображение. Однако это означает, что вам понадобится массив изображений, сгенерированный в контексте инициализации, поскольку open недоступен в коде vu. поэтому вместо open(....getRandomInt...) в коде vu вы должны иметь images[getRandomInt(0,6)].

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...