У меня есть сценарии jmeter для увеличения 20 пользователей в течение 20 минут (1 пользователь каждую минуту), удержания в течение 30 минут и снижения 1 пользователя в минуту.
Как мне добиться этого в Гатлинге?
Я пробовал ниже настройки в гатлинге,
SAAPIBase.scn_SA_Auth.inject(rampUsers(20) during (20 minutes)).protocols(httpConf)
).maxDuration(50 minutes)
Это увеличивает 20 пользователей на 20 минут и удерживает 30 минут с 20 пользователями. Но после этого вдруг падает до нуля.
Как постепенно уменьшать количество пользователей на 1 на 1 каждую минуту?
Обратите внимание на то, насколько продолжительность выполнения симуляции сильно зависит от сценариев, которые вы выполняете — все этапы внедрения Gatling DSL управляют началом работы пользователей когда, и это все. Поэтому, если у вас есть сценарии, которые очень долго выполняются или непредсказуемы, трудно гарантировать что-то точно такое, как вы указали.
В вашем примере
.inject(rampUsers(20) during (20 minutes)).protocols(httpConf)
).maxDuration(50 minutes)
вы вводите 20 пользователей равномерно в течение 20 минут (по одному в минуту). Если это действительно удерживается в течение 30 минут после рампы, то ваши сценарии, вероятно, зацикливаются, и пользователи останавливаются оператором maxDuration.
для замедления вы можете изменить впрыск на
.inject(
rampConcurrentUsers(1) to(20) during(20 minutes),
constantConcurrentUsers(20) during (30 minutes),
rampConcurrentUsers(20) to(1) during(20 minutes)
)
это даст вам такое же увеличение в течение 20 минут, затем будет продолжать вводить пользователей, пока другие заканчивают поддерживать 20 одновременных пользователей в течение следующих 30 минут, а затем постепенно замедлять скорость внедрения в течение последних 20 минут. Однако, если ваш сценарий использует циклы, такие как .forever, для продолжения работы, это постепенное снижение не будет работать, поскольку пользователи, введенные в 1-ю команду, никогда не остановятся.
что должен работает... можете ли вы опубликовать точный фрагмент кода?
Я попробовал следующее, и все, что я вижу, это либо плоская пользовательская инъекция, либо нарастание, без сглаживания чего-либо. Я позаботился о том, чтобы не было вечности или циклов, которые могли бы помешать пользователям остановиться. setUp(scenario.inject(rampConcurrentUsers(1) to (10)) в течение (1 минуты),sInjection(10000): _* ).protocols(httpconf)
def sInjection(повторяет: Int) = { var seq = Seq[ClosedInjectionStep](rampConcurrentUsers(10) to (1) в течение (1 минуты)) var i = Repeats while (i > 0) { seq = seq ++ Seq(rampConcurrentUsers (1) до (10) в течение (1 минуты)) seq = seq ++ Seq(rampConcurrentUsers(10) to (1) в течение (1 минуты)) seq = seq ++ Seq(constantConcurrentUsers(1) в течение (1 минуты) ) я -= 1 } след }
Gatling не убивает пользователей из-за изменений в профиле инъекции — они просто контролируют, когда будут запущены новые пользователи. Поэтому, когда вы укажете rampConcurrentUsers (10) to (1) during (1 minute)
, гатлинг запустит 10 пользователей, а затем попытается постепенно добавить новых пользователей, чтобы количество одновременных пользователей оставалось на уровне 10, затем 9 и т. д. Так что, если ваш сценарий занимает больше минуты, вы никогда не увидите постепенное снижение.
Привет Джеймс, Спасибо, это помогает мне. Но как уточняющий вопрос. Мне нужно ввести время задержки перед запуском. Я делаю, как показано ниже: scn_x.inject( ничего для (5 секунд), от рампыConcurrentUsers (1) до (3) в течение (12 минут), ConstantConcurrentUsers (3) в течение (30 минут), от рампыConcurrentUsers (3) до (1) в течение ( 12 минут)).протоколы(OWSAPIBase.httpConf_prod). Но я получаю сообщение об ошибке: «Неявное не найдено для доказательства параметра $ 1: InjectionProfileFactory [продукт с серийным номером]