Параллелизм в нагрузочном тестировании Apache JMeter имеет странное поведение

Я выполняю нагрузочное тестирование API, используя базовую настройку в JMeter.

Идея здесь в том, что группа Thread порождает группу клиентов/потоков, и каждый из этих клиентов имеет группу циклов, которые выполняются параллельно (используя Bzm - параллельный контроллер).

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

Одно из действий состоит из двух вызовов, первый (1) извлекает некоторые идентификаторы, которые затем извлекаются с помощью экстрактора JSON и немного модифицируются с помощью постпроцессора BeanShell. Затем результат постпроцессора используется в качестве параметра для следующего вызова (2).

Проблема, с которой я столкнулся, заключается в том, что в моем сводном отчете отображается гораздо больше результатов первого HTTP-запроса (1), чем второго (2). Я ожидаю, что они всегда будут вызываться одинаковое количество раз.

Я предполагаю, что все это сводится к тому, что мне не хватает базового понимания потока и параллелизма (и, возможно, таймеров) в JMeter, но я не смог понять это, поэтому мне нужна помощь.

Это настройка, представьте, что есть несколько циклов.

 Thread group
      +
      |
      +------ ---+ Parallel controller
      |                    +
      |                    |
      |                    +-----------+ Loop
      |                                   +
      |                                   +----------+ Transaction
      |                                   |                +
      |                                   |                |
      |                                   |                +---------+ Uniform random timer
      |                                   |                                    +
      |                                   |                                    |
      |                                   |                                    |
      |                                   |                                    +
      |                                   |                             (1) HTTP request
      |                                   |                                    +
      |                                   |                                    +---------+ JSON extractor
      +                                   |                                    |                +
                                          |                                    |                |
Summary Report                            |                                    |                +
                                          |                                    |       BeanShell Post processor
                                          |                                    |
                                          |                                    |
                                          |                                    |
                                          |                                    +
                                          |
                                          |                              (2) HTTP request
                                          |
                                          |
                                          |
                                        Loop +----------------------------------+
                                          |
                                          |
         
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
98
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Итак, я понял это. Все сводится к пониманию структуры тестов, погружение в документацию очень помогло, так как она очень подробная.

Это соответствующая часть:

Обратите внимание, что таймеры обрабатываются перед каждым сэмплером в осциллографе в какие они обнаружены; если в одной области есть несколько таймеров, все таймеры будут обрабатываться перед каждым сэмплером. Таймеры только обрабатывается вместе с семплером. Таймер, которого нет в тот же объем, что и сэмплер, вообще не будет обрабатываться. Чтобы применить таймер к одному сэмплеру, добавьте таймер как дочерний элемент пробоотборник. Таймер будет применен до выполнения семплера. К применить таймер после семплера, либо добавить его к следующему семплеру, либо добавьте его как дочерний элемент сэмплера действий управления потоком.

https://jmeter.apache.org/usermanual/component_reference.html#таймеры

Еще одна чрезвычайно важная вещь, которую нужно понять, это то, что некоторые строительные блоки (по отношению к древовидной структуре) являются иерархическими, некоторые упорядочены, а некоторые являются и тем, и другим. Подробно это описано здесь https://jmeter.apache.org/usermanual/test_plan.html#scoping_rules

В целом мою проблему можно решить, поместив Единый случайный таймер в качестве дочернего элемента первого HTTP-вызова (1), заставив его влиять только на этот вызов, или добавив действие управления потоком в качестве родственного элемента после второго вызова (2) и добавление к нему универсального случайного таймера в качестве дочернего элемента.

Другие вопросы по теме