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

Фотография

Параллельные HTTP запросы в рамках одного потока


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

#1 troblem?

troblem?

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

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

Отправлено 28 декабря 2011 - 17:36

Доброго Времени!

Кратко опишу проблему.
Сценарий, в котором предусмотрено до 1000 пользователей (потоков), действующих параллельно.
Каждый пользователь выполняет HTTP запросы.
В каждом запросе есть вложенные запросы. Тут и начинается проблема, т.к. 2/3 этих запросов формируются JS-скриптами, и не отрабатывают с помощью опции "Retrieve All Embedded Resources from HTML Files".
При этом, если их реализовать как отдельные НТТР сэмплеры, то они будут отрабатывать последовательно.

Хотелось бы (да что там "хотелось", надо!) чтобы каждый следующий запрос не ждал пока ответит предыдущий. Грубо говоря, запустить их параллельно или по таймеру.
Документацию перечитал, но очевидного решения не нашел (может, пропустил чего).

Если кто-то знает как это реализовать, пожалуйста, посоветуйте.
Заранее благодарен.
  • 0

#2 fesd

fesd

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

  • Members
  • PipPipPipPip
  • 262 сообщений

Отправлено 29 декабря 2011 - 05:10

Насколько я знаю, стандратными средствами жметра параллельно пускать семплеры в рамках одного потока нельзя. Если кто знает решение, присоединюсь к благодарностям :help:
  • 0

#3 Troubleshooter

Troubleshooter

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

  • Members
  • PipPipPipPip
  • 398 сообщений
  • Город:Киев

Отправлено 29 декабря 2011 - 15:50

Cтандартного решения для данного сценария действительно нету. Можно попробовать сделать некий воркераунд используя BeanShell Sampler:
foo() {
    run() {
        // do work...
    }
    return this;
}

foo = foo();
// Start two threads on foo.run()
new Thread( foo ).start();
new Thread( foo ).start();
....

  • 0

#4 AxelM

AxelM

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

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


Отправлено 30 декабря 2011 - 06:29

Можно попробовать сделать некий воркераунд используя BeanShell Sampler:


Тогда не понятно, чем это отличается от стандартной реализации Jmeter типа "Одна тред-группа со множеством тредов и один сэмплер".

troblem?, если у вас все сэмплеры разные (разные функции foo), то для параллельного запуска и тред-группы надо создавать разные. Если же Вы сможете все ваши сэмплеры описать в одном, например, BeanShell Sampler (в котором вызов чего-либо зависит от каких-то условий), то можно создать одну тред-группу, а Jmeter сам поднимет для сэмплера треды параллельно.




  • 0

#5 troblem?

troblem?

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

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

Отправлено 30 декабря 2011 - 09:24

troblem?, если у вас все сэмплеры разные (разные функции foo), то для параллельного запуска и тред-группы надо создавать разные. Если же Вы сможете все ваши сэмплеры описать в одном, например, BeanShell Sampler (в котором вызов чего-либо зависит от каких-то условий), то можно создать одну тред-группу, а Jmeter сам поднимет для сэмплера треды параллельно.


У меня треды выделены под юзеров (у них там рамп-ап и расписание...). Не хотелось бы добавлять еще и треды, которые будут просто запросы по условиям делать. (Если я правильно понял, что Вы имеете в виду)

Troubleshooter, да я тоже пришел к выводу, что стоит попробовать с помощью биншела и потоков. Спасибо.
  • 0

#6 Troubleshooter

Troubleshooter

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

  • Members
  • PipPipPipPip
  • 398 сообщений
  • Город:Киев

Отправлено 30 декабря 2011 - 10:07

Вот еще одна идея + реализация:
JMeter and AJAX
  • 0

#7 APC

APC

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

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


Отправлено 31 декабря 2011 - 09:49

Хотелось бы (да что там "хотелось", надо!) чтобы каждый следующий запрос не ждал пока ответит предыдущий. Грубо говоря, запустить их параллельно или по таймеру.
Документацию перечитал, но очевидного решения не нашел (может, пропустил чего).


Для JMeter не существует хорошего решения этой задачи.

Но я хотел бы заметить, что любое решение этой задачи рождает кучу вопросов, как все это щастье будет работать. Мой опыт говорит что в такой ситуации не стоит стремиться к "функциональному тесту в 1000 потоков", а чуть абстрагироваться от функционального аспекта и оперировать потоком запросов. В конечном итоге окажется эффективней, как мне думается.

Говоря в терминах JMeter - одна тред-группа запрашивает основные страницы, а параллельно ей работает другая тред-группа, которая фигачит ajax-запросы.
  • 0


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

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