Параллельные HTTP запросы в рамках одного потока
#1
Отправлено 28 декабря 2011 - 17:36
Кратко опишу проблему.
Сценарий, в котором предусмотрено до 1000 пользователей (потоков), действующих параллельно.
Каждый пользователь выполняет HTTP запросы.
В каждом запросе есть вложенные запросы. Тут и начинается проблема, т.к. 2/3 этих запросов формируются JS-скриптами, и не отрабатывают с помощью опции "Retrieve All Embedded Resources from HTML Files".
При этом, если их реализовать как отдельные НТТР сэмплеры, то они будут отрабатывать последовательно.
Хотелось бы (да что там "хотелось", надо!) чтобы каждый следующий запрос не ждал пока ответит предыдущий. Грубо говоря, запустить их параллельно или по таймеру.
Документацию перечитал, но очевидного решения не нашел (может, пропустил чего).
Если кто-то знает как это реализовать, пожалуйста, посоветуйте.
Заранее благодарен.
#2
Отправлено 29 декабря 2011 - 05:10
#3
Отправлено 29 декабря 2011 - 15:50
foo() { run() { // do work... } return this; } foo = foo(); // Start two threads on foo.run() new Thread( foo ).start(); new Thread( foo ).start(); ....
#4
Отправлено 30 декабря 2011 - 06:29
Можно попробовать сделать некий воркераунд используя BeanShell Sampler:
Тогда не понятно, чем это отличается от стандартной реализации Jmeter типа "Одна тред-группа со множеством тредов и один сэмплер".
troblem?, если у вас все сэмплеры разные (разные функции foo), то для параллельного запуска и тред-группы надо создавать разные. Если же Вы сможете все ваши сэмплеры описать в одном, например, BeanShell Sampler (в котором вызов чего-либо зависит от каких-то условий), то можно создать одну тред-группу, а Jmeter сам поднимет для сэмплера треды параллельно.
#5
Отправлено 30 декабря 2011 - 09:24
troblem?, если у вас все сэмплеры разные (разные функции foo), то для параллельного запуска и тред-группы надо создавать разные. Если же Вы сможете все ваши сэмплеры описать в одном, например, BeanShell Sampler (в котором вызов чего-либо зависит от каких-то условий), то можно создать одну тред-группу, а Jmeter сам поднимет для сэмплера треды параллельно.
У меня треды выделены под юзеров (у них там рамп-ап и расписание...). Не хотелось бы добавлять еще и треды, которые будут просто запросы по условиям делать. (Если я правильно понял, что Вы имеете в виду)
Troubleshooter, да я тоже пришел к выводу, что стоит попробовать с помощью биншела и потоков. Спасибо.
#6
Отправлено 30 декабря 2011 - 10:07
#7
Отправлено 31 декабря 2011 - 09:49
Хотелось бы (да что там "хотелось", надо!) чтобы каждый следующий запрос не ждал пока ответит предыдущий. Грубо говоря, запустить их параллельно или по таймеру.
Документацию перечитал, но очевидного решения не нашел (может, пропустил чего).
Для JMeter не существует хорошего решения этой задачи.
Но я хотел бы заметить, что любое решение этой задачи рождает кучу вопросов, как все это щастье будет работать. Мой опыт говорит что в такой ситуации не стоит стремиться к "функциональному тесту в 1000 потоков", а чуть абстрагироваться от функционального аспекта и оперировать потоком запросов. В конечном итоге окажется эффективней, как мне думается.
Говоря в терминах JMeter - одна тред-группа запрашивает основные страницы, а параллельно ей работает другая тред-группа, которая фигачит ajax-запросы.
Андрей Похилько
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных