Запуск семплера во время выполнения другого семплера
#1
Отправлено 07 августа 2011 - 18:19
В jmeter'е нужно реализовать следующий сценарий:
http request c post'ом выполняется определенное время (пусть 10 минут),
в течении этого времени надо периодически (каждую минуту) дергать другой request c post'ом к другой странице.
Каким образом можно этого добиться?
Шуршание документации ни к чему ни привело ,
либо плохо шуршал, либо jmeter не позволяет такого (т.е. во время выполняется одного семплера никак не запустить другой)?
#2
Отправлено 07 августа 2011 - 19:51
Часть 2, в общих чертах: Организовать это можно двумя параллельными тред-группами. В жметре есть Синхронизирующий таймер, с его помощью можно организовать синхронизацию событий.
Часть 3, нещасливый конец: В целом межтредовое взаимодействие в ЖМетре - болезненная штука, с трюками придется исхитряться совсем сильно, народ что-то там мутит с глобальными пропертями для этих целей... Я бы вообще посоветовал поставить под вопрос необходимость реализации такого непростого сценария - стоит ли тратить так много времени?
Андрей Похилько
#3
Отправлено 07 августа 2011 - 20:05
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium
#4
Отправлено 08 августа 2011 - 06:05
Доброго времени суток!
В jmeter'е нужно реализовать следующий сценарий:
http request c post'ом выполняется определенное время (пусть 10 минут),
в течении этого времени надо периодически (каждую минуту) дергать другой request c post'ом к другой странице.
Каким образом можно этого добиться?
Шуршание документации ни к чему ни привело ,
либо плохо шуршал, либо jmeter не позволяет такого (т.е. во время выполняется одного семплера никак не запустить другой)?
Мне кажется, универсальным будет использовать следующее: не надо межтредового взаимодействия, посчитайте (прикиньте) сколько каждый тип запросов занимает в процентах от общего числа запросов, затем используйте "Throughput Controller"
#5
Отправлено 09 августа 2011 - 08:57
Запустить - запустил,
но боюсь, не очень корректно сформулировал изначальную задачу.
1.
Пример с 10 минутами был неудачен. Семплер в первом треде выполняется неизвестное время, (может и 10, а может и 30 минут).
(И самих запросов в тред-группе несколько, каждый с разным временем выполнения, изначально не известным).
Второй семплер дергается периодически с заданным интервалом.
Вот только как остановить второй тред по завершении работы первого?
Через "While Controller" для семплера во втором треде? Тогда затрудняюсь с условием, или по окончании первого треда в переменную записывать значение, и проверять через while. (Чувствуется, что уж очень тупо так будет.)
(Если "Синхронизирующий таймер", то не очень понял как он работает. Куда его вставить нужно, что задать?)
2.
Все семплеры первого треда выполняются от одного пользователя, с сессией и изменяемыми от запроса к запросу параметрами.
Запрос во врором треде без параметров, и мне надо выполнять его от этого же пользователя, с этой же сессией.
Вообще треды в jmeter выполняются от разных пользователей (похоже что так, т.к. в "Response headers:" разные сессии записаны)? Как завязать на одном?
Сообщение отредактировал axz: 09 августа 2011 - 09:40
#6
Отправлено 10 августа 2011 - 17:38
Йех, вообще надо бы написать какой-нить плагин на тему межтредового взаимодействия. Только пока не приложу ума, что именно надо дать людям... Может народ сформулирует, как было бы удобней всего видеть такую штуку?
Андрей Похилько
#7
Отправлено 11 августа 2011 - 06:10
axz, как я понял, Вы успешно запускаете тест, но не знаете, в какой момент его остановить, т.к. конец работы одного треда не означает остановку другого.
Используйте Test Action. Назовем первый тред управляющим. Управляющий тред подразумевает остановку всего теста при его завершении.
Запускаете управляющий тред на выполнение n секунд или n раз, после которых вызываете Test Action, где выставляете "Stop All Threads".
Пример в аттаче (используются плагины jmeter plugins).
Вторую проблему, думаю, каждый решает сам. Я не знаю можно ли прокинуть куки между тредами. Лично я (это позволяет тестируемая система) получаю session_id при первом запросе, а затем использую как параметр в каждом последующем.
Йех, вообще надо бы написать какой-нить плагин на тему межтредового взаимодействия. Только пока не приложу ума, что именно надо дать людям... Может народ сформулирует, как было бы удобней всего видеть такую штуку?
Может быть, сделать поочередное выполнение тредов, как в Load Runner. Я когда-то писал об этом.
Прикрепленные файлы
#8
Отправлено 11 августа 2011 - 13:23
Спасибо! В моем случае то что нужно.Используйте Test Action.
(А если усложнить задачу, для спортивного интереса, то было бы круто, если б Test Action умел запускать и останавливать один выборочный тред, если тредов больше двух.)
Глобальные переменные, насколько понимаю, - это "User Defined Variables" в корневом узле самого тест-плана? (Они же "Config elements -> User Defined Variables", если добавить перед всеми тредами?)Теперь про сессии и глобальные пропертя между тредами.
Тогда у меня проблема в следующем.
В запросе 1го треда я могу получить и записать session_id в такую переменную (глобальную).
Но в запросе второго треда берется не присвоенное в первом треде значение, а дефотное (которое в "User Defined Variables").
Т.е. для каждого треда берется изначальное значение переменной, а затем все переприсвоения видны только в пределах своего треда.
Что я делаю не так? ("HTTP Cookie Manager" добавлен в самом начале, перед первым тредом.)
Все дело в том, что jmeter я первый раз открыл незадолго до того как написал первый пост, т.е. 4 дня назад.Йех, вообще надо бы написать какой-нить плагин на тему межтредового взаимодействия. Только пока не приложу ума, что именно надо дать людям... Может народ сформулирует, как было бы удобней всего видеть такую штуку?
Поэтому сложно сформулировать более-менее детально, что именно нужно (особенно не в рамках конкретной задачи). Но как уже писал выше:
- если что-то наподобие Test Action, но чтоб была возможность запускать и останавливать только один выборочный тред?
- и пожалуй, чтоб при желании запросы в разных тредах отправлялись от одного и того же пользователя (с одним и тем же sessionId/пр.).
#9
Отправлено 12 августа 2011 - 06:06
Про глобальное - не переменные, а проперти. Делается через функции __P и __setProperty
Андрей Похилько
#10
Отправлено 12 августа 2011 - 06:46
Возможно, не тред, а группу тредов.если что-то наподобие Test Action, но чтоб была возможность запускать и останавливать только один выборочный тред?
Тогда группу тредов можно идентифицировать по имени.Главный вопрос в межтредовом взаимодействии - как идентифицировать тред среди кучи других?
#11
Отправлено 12 августа 2011 - 07:09
А так же по названию треда нельзя?как идентифицировать тред среди кучи других?
2AlexIM: Что значит "группу тредов"? Как ее организовать?
Ясно, ушел читать. :)а проперти. Делается через функции __P и __setProperty
#12
Отправлено 12 августа 2011 - 10:43
А так же по названию треда нельзя?как идентифицировать тред среди кучи других?
2AlexIM: Что значит "группу тредов"? Как ее организовать?Ясно, ушел читать. :)а проперти. Делается через функции __P и __setProperty
Заглянул я в кишки ЖМетра, печально, но организовать взаимодействие между группами тредов не получится без патчинга ЖМетра. А вот внутри группы тредов можно сделать функцию, которая изнутри одного треда получит значение переменной другого треда. Но имхо это мало помогает...
Андрей Похилько
#13
Отправлено 13 августа 2011 - 09:52
но само значение - sessionId, - задать в куки для реквестов второй тред-группы не получается.
Для первого реквеста в "Response headers" пишется:
Set-Cookie: sessionId=значнеие; path=...
И все отстальные уже выполняются с этим sessionId.
Не пойму, как указать, чтоб jmeter стартовал реквесты второй тред-группы с заданным sessionId.
В параметрах реквестов он не задается.
#14
Отправлено 13 августа 2011 - 10:23
С глобальными пропертями разобрался, и во второй тред-группе получил нужное значение (записанное в первой),
но само значение - sessionId, - задать в куки для реквестов второй тред-группы не получается.
Для первого реквеста в "Response headers" пишется:
Set-Cookie: sessionId=значнеие; path=...
И все отстальные уже выполняются с этим sessionId.
Не пойму, как указать, чтоб jmeter стартовал реквесты второй тред-группы с заданным sessionId.
В параметрах реквестов он не задается.
HTTP Raw Request ;)
Хотя, наверное, это слишком...
Андрей Похилько
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных