#jmeter #jmeter-5.0 #blazemeter
#jmeter #jmeter-5.0 #blazemeter
Вопрос:
Я пытался выяснить, как измерить количество времени, которое требуется потоку (виртуальному пользователю) в JMeter для полного завершения. На данный момент меня не обязательно интересует время отклика. API, который я пытаюсь загрузить для тестирования, работает асинхронно. Я делаю запрос на запуск задания, мне присваивается идентификатор задания, затем я использую этот идентификатор задания для проверки статуса указанного задания до его завершения. Мне интересно узнать, сколько времени требуется для завершения каждого задания, т.Е. Когда задание запускается (поток создается) и когда задание завершено (поток завершен).
Я видел, как несколько человек предлагали использовать Transaction Controller
в подобных ситуациях, но это, если я не ошибаюсь, дает мне общее время отклика на все запросы в «транзакции», что мне не помогает.
Это то, что я настроил до сих пор в JMeter:
Что на самом деле отлично работает, я делаю первоначальный запрос на отправку задания и извлекаю идентификатор задания. В цикле while я проверяю статус задания, используя извлеченный идентификатор каждые 10 секунд (постоянный таймер), пока задание не будет завершено.
Вот как выглядит сводный отчет для 5 одновременных пользователей, я также могу сделать метки одинаковыми, чтобы они еще больше уплотнялись, но ни одна из этой информации не говорит мне, сколько времени занял поток. Исходя из количества выборок, я могу предположить, что для завершения половины потоков потребовалось примерно 10 секунд, а остальные я могу умножить на 10 секунд (таймер ожидания) и получить приблизительную оценку того, сколько времени потребовалось для завершения, но это было бы сложно сделать (или, по крайней мере, трудоемко) за пару сотенпотоки. Я действительно надеялся, что у JMeter есть что-то готовое, что даст мне эту информацию в удобном формате отчета.
Я также видел предложения о том, что единственный способ получить информацию такого типа — это проанализировать журналы, просто интересно, решил ли кто-нибудь подобную проблему.
Ответ №1:
Ваш вопрос содержит ответ, просто измерьте его
-
Добавьте пробоотборник JSR223 в начало вашей группы потоков и поместите следующий код в область «Сценарий»:
SampleResult.setIgnore() vars.putObject('startTime', System.currentTimeMillis())
первая строка сообщает JMeter, чтобы он не сохранял результат выборки JSR223 (поскольку я считаю, что вам это не нужно), а вторая строка сохраняет текущую временную метку в
${startTime}
переменной JMeter -
Добавьте еще один сэмплер JSR223 в конец вашей группы потоков и используйте там следующий код:
SampleResult.setIgnore() def end = System.currentTimeMillis() def start = vars.getObject('startTime') log.info('Thread ' (ctx.getThreadNum() 1) ' elapsed time: ' (end - start))
здесь мы получаем текущую временную метку после завершения задания и вычитаем ее из предыдущего хранилища временных меток в первом сэмплере JSR223. Дельта выводится в j meter.однако файл журнала, возможно, вы захотите сохранить его в другой переменной JMeter и предоставить его результатам через свойство Sample Variables, чтобы оно было добавлено.файл результатов jtl
ДЕМОНСТРАЦИЯ:
Смотрите 8 лучших классов Java JMeter, которые вы должны использовать с Groovy, чтобы узнать больше о том, что означают эти SampleResult
, vars
, и ctx
сокращения