Перейти к содержимому

Фотография

Запуск семплера во время выполнения другого семплера


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 13

#1 axz

axz

    Новый участник

  • Members
  • Pip
  • 8 сообщений

Отправлено 07 августа 2011 - 18:19

Доброго времени суток!

В jmeter'е нужно реализовать следующий сценарий:
http request c post'ом выполняется определенное время (пусть 10 минут),
в течении этого времени надо периодически (каждую минуту) дергать другой request c post'ом к другой странице.

Каким образом можно этого добиться?

Шуршание документации ни к чему ни привело :sad:,
либо плохо шуршал, либо jmeter не позволяет такого (т.е. во время выполняется одного семплера никак не запустить другой)?
  • 0

#2 APC

APC

    Опытный участник

  • Members
  • PipPipPipPip
  • 293 сообщений
  • ФИО:Похилько Андрей Федорович
  • Город:Москва


Отправлено 07 августа 2011 - 19:51

Часть 1, высокопарная: ЖМетр может все, но трюки может только с помощью еще более хитрых трюков.

Часть 2, в общих чертах: Организовать это можно двумя параллельными тред-группами. В жметре есть Синхронизирующий таймер, с его помощью можно организовать синхронизацию событий.

Часть 3, нещасливый конец: В целом межтредовое взаимодействие в ЖМетре - болезненная штука, с трюками придется исхитряться совсем сильно, народ что-то там мутит с глобальными пропертями для этих целей... Я бы вообще посоветовал поставить под вопрос необходимость реализации такого непростого сценария - стоит ли тратить так много времени?
  • 1

#3 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 07 августа 2011 - 20:05

В данном конкретном случае не вижу никакой необходимости в синхронизации. Просто две параллельных тред-группы. Там запросы длительностью 10 минут, а тут надо дергать раз в минуту -- точно не промажешь.
  • 1
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#4 AxelM

AxelM

    Активный участник

  • Members
  • PipPip
  • 118 сообщений
  • ФИО:Зверев Дмитрий
  • Город:Санкт-Петербург


Отправлено 08 августа 2011 - 06:05

Доброго времени суток!

В jmeter'е нужно реализовать следующий сценарий:
http request c post'ом выполняется определенное время (пусть 10 минут),
в течении этого времени надо периодически (каждую минуту) дергать другой request c post'ом к другой странице.

Каким образом можно этого добиться?

Шуршание документации ни к чему ни привело :sad:,
либо плохо шуршал, либо jmeter не позволяет такого (т.е. во время выполняется одного семплера никак не запустить другой)?


Мне кажется, универсальным будет использовать следующее: не надо межтредового взаимодействия, посчитайте (прикиньте) сколько каждый тип запросов занимает в процентах от общего числа запросов, затем используйте "Throughput Controller"
  • 1

#5 axz

axz

    Новый участник

  • Members
  • Pip
  • 8 сообщений

Отправлено 09 августа 2011 - 08:57

Спасибо за параллельные тред-группы!

Запустить - запустил,
но боюсь, не очень корректно сформулировал изначальную задачу.
1.
Пример с 10 минутами был неудачен. Семплер в первом треде выполняется неизвестное время, (может и 10, а может и 30 минут).
(И самих запросов в тред-группе несколько, каждый с разным временем выполнения, изначально не известным).

Второй семплер дергается периодически с заданным интервалом.

Вот только как остановить второй тред по завершении работы первого?
Через "While Controller" для семплера во втором треде? Тогда затрудняюсь с условием, или по окончании первого треда в переменную записывать значение, и проверять через while. (Чувствуется, что уж очень тупо так будет.)
(Если "Синхронизирующий таймер", то не очень понял как он работает. Куда его вставить нужно, что задать?)


2.
Все семплеры первого треда выполняются от одного пользователя, с сессией и изменяемыми от запроса к запросу параметрами.
Запрос во врором треде без параметров, и мне надо выполнять его от этого же пользователя, с этой же сессией.

Вообще треды в jmeter выполняются от разных пользователей (похоже что так, т.к. в "Response headers:" разные сессии записаны)? Как завязать на одном?

Сообщение отредактировал axz: 09 августа 2011 - 09:40

  • 0

#6 APC

APC

    Опытный участник

  • Members
  • PipPipPipPip
  • 293 сообщений
  • ФИО:Похилько Андрей Федорович
  • Город:Москва


Отправлено 10 августа 2011 - 17:38

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

Йех, вообще надо бы написать какой-нить плагин на тему межтредового взаимодействия. Только пока не приложу ума, что именно надо дать людям... Может народ сформулирует, как было бы удобней всего видеть такую штуку?
  • 0

#7 AxelM

AxelM

    Активный участник

  • Members
  • PipPip
  • 118 сообщений
  • ФИО:Зверев Дмитрий
  • Город:Санкт-Петербург


Отправлено 11 августа 2011 - 06:10

Не всё так печально. Я делал похожий тест. Все тесты важны, но не всякие нужны.
axz, как я понял, Вы успешно запускаете тест, но не знаете, в какой момент его остановить, т.к. конец работы одного треда не означает остановку другого.
Используйте Test Action. Назовем первый тред управляющим. Управляющий тред подразумевает остановку всего теста при его завершении.
Запускаете управляющий тред на выполнение n секунд или n раз, после которых вызываете Test Action, где выставляете "Stop All Threads".
Пример в аттаче (используются плагины jmeter plugins).

Вторую проблему, думаю, каждый решает сам. Я не знаю можно ли прокинуть куки между тредами. Лично я (это позволяет тестируемая система) получаю session_id при первом запросе, а затем использую как параметр в каждом последующем.

Йех, вообще надо бы написать какой-нить плагин на тему межтредового взаимодействия. Только пока не приложу ума, что именно надо дать людям... Может народ сформулирует, как было бы удобней всего видеть такую штуку?


Может быть, сделать поочередное выполнение тредов, как в Load Runner. Я когда-то писал об этом.

Прикрепленные файлы


  • 1

#8 axz

axz

    Новый участник

  • Members
  • Pip
  • 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/пр.).

  • 0

#9 APC

APC

    Опытный участник

  • Members
  • PipPipPipPip
  • 293 сообщений
  • ФИО:Похилько Андрей Федорович
  • Город:Москва


Отправлено 12 августа 2011 - 06:06

Главный вопрос в межтредовом взаимодействии - как идентифицировать тред среди кучи других?

Про глобальное - не переменные, а проперти. Делается через функции __P и __setProperty
  • 0

#10 AxelM

AxelM

    Активный участник

  • Members
  • PipPip
  • 118 сообщений
  • ФИО:Зверев Дмитрий
  • Город:Санкт-Петербург


Отправлено 12 августа 2011 - 06:46

если что-то наподобие Test Action, но чтоб была возможность запускать и останавливать только один выборочный тред?

Возможно, не тред, а группу тредов.

Главный вопрос в межтредовом взаимодействии - как идентифицировать тред среди кучи других?

Тогда группу тредов можно идентифицировать по имени.
  • 0

#11 axz

axz

    Новый участник

  • Members
  • Pip
  • 8 сообщений

Отправлено 12 августа 2011 - 07:09

как идентифицировать тред среди кучи других?

А так же по названию треда нельзя?

2AlexIM: Что значит "группу тредов"? Как ее организовать?

а проперти. Делается через функции __P и __setProperty

Ясно, ушел читать. :)
  • 0

#12 APC

APC

    Опытный участник

  • Members
  • PipPipPipPip
  • 293 сообщений
  • ФИО:Похилько Андрей Федорович
  • Город:Москва


Отправлено 12 августа 2011 - 10:43

как идентифицировать тред среди кучи других?

А так же по названию треда нельзя?

2AlexIM: Что значит "группу тредов"? Как ее организовать?

а проперти. Делается через функции __P и __setProperty

Ясно, ушел читать. :)


Заглянул я в кишки ЖМетра, печально, но организовать взаимодействие между группами тредов не получится без патчинга ЖМетра. А вот внутри группы тредов можно сделать функцию, которая изнутри одного треда получит значение переменной другого треда. Но имхо это мало помогает...
  • 0

#13 axz

axz

    Новый участник

  • Members
  • Pip
  • 8 сообщений

Отправлено 13 августа 2011 - 09:52

С глобальными пропертями разобрался, и во второй тред-группе получил нужное значение (записанное в первой),
но само значение - sessionId, - задать в куки для реквестов второй тред-группы не получается.
Для первого реквеста в "Response headers" пишется:
Set-Cookie: sessionId=значнеие; path=...
И все отстальные уже выполняются с этим sessionId.

Не пойму, как указать, чтоб jmeter стартовал реквесты второй тред-группы с заданным sessionId.
В параметрах реквестов он не задается.
  • 0

#14 APC

APC

    Опытный участник

  • Members
  • PipPipPipPip
  • 293 сообщений
  • ФИО:Похилько Андрей Федорович
  • Город:Москва


Отправлено 13 августа 2011 - 10:23

С глобальными пропертями разобрался, и во второй тред-группе получил нужное значение (записанное в первой),
но само значение - sessionId, - задать в куки для реквестов второй тред-группы не получается.
Для первого реквеста в "Response headers" пишется:
Set-Cookie: sessionId=значнеие; path=...
И все отстальные уже выполняются с этим sessionId.

Не пойму, как указать, чтоб jmeter стартовал реквесты второй тред-группы с заданным sessionId.
В параметрах реквестов он не задается.


HTTP Raw Request ;)

Хотя, наверное, это слишком...
  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных