Как параметризовать количество потоков в JMeter 5.2.1 - PullRequest
0 голосов
/ 07 марта 2020

У меня есть проект JMeter 5.2.1, в котором в потоке SetUp я генерирую свойства с именами, такими как ThreadGroupName1-NumberOfThreads, ThreadGroupName2-NumberOfThreads, et c. со значениями, представляющими целые числа.

Теперь я получу sh для доступа к этим свойствам в группах потоков с именами ThreadGroupName1, ThreadGroupName2, et c. параметризовать количество потоков. Я пробовал что-то вроде ${__jexl3(props.get(threadName + "-NumberOfThreads"))}, но это не удается, так как threadName оценивается как standardjmeterengine.

Также я пытался использовать ctx, но ctx.getThread() и ctx.getThreadGroup(), но они оцениваются как null .

Пока что «работает» для меня это ${__jexl3(props.get("ThreadGroupName1-NumberOfThreads"))}, но я хочу, чтобы это было параметризовано именем группы потоков.

Возможно ли это сделать?

Является ли это threadName возвратом standardjmeterengine ошибки?

Обновление: На самом деле, самое простое «решение», которое обеспечивает параметризованное количество потоков ${__P(ThreadGroupName1-NumberOfThreads)}, и я хочу создать это ключ ThreadGroupName1-NumberOfThreads должен быть чем-то вроде ${MyCurrentGroupName}-NumberOfThreads, эффективно предоставляя способ иметь абстрактный метод, такой как

int GetNumberOfThreads(string threadGroupName)
{
  return properties.get(threadGroupName + "-NumberOfThreads";
}

Аналогично, я sh буду использовать этот шаблон также в постоянном таймере пропускной способности с другим префикс типа -Rpm.

Ответы [ 2 ]

0 голосов
/ 09 марта 2020

Я не думаю, что вы можете использовать любую функцию JMeter в поле "Количество потоков" Группы потоков , так что это не то, что вы можете сделать через пользовательский интерфейс. Если вы считаете, что это то, что нужно всем, вы можете рассмотреть вопрос о запросе на улучшение

. В качестве обходного пути вы можете

  1. Установить количество потоков равным 1
  2. Добавьте If Controller к группе потоков и используйте в качестве условия следующую функцию __ groovy () :

    ${__groovy(ctx.getThreadNum() == 0 && vars.getIteration() == 1,)}
    
  3. Добавьте JSR223 Sampler как дочерний элемент If Controller и поместите следующий код в область «Сценарий»:

    SampleResult.setIgnore()
    2.upto(props.get(ctx.getThreadGroup().getName() + '-NumberOfThreads') as int, { ctx.getThreadGroup().addNewThread(0, ctx.getEngine()) })
    

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

0 голосов
/ 08 марта 2020

Вы можете использовать JMeterContext getThreadNum, чтобы получить номер потока (приращение, потому что оно начинается с 0)

${__jexl3(props.get("ThreadGroupName"))}${__jexl3((ctx.getThreadNum()+1) + "-NumberOfThreads" )} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...