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

Фотография

HTTP Request. Распараллеливание цикла


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

#1 ntdim1973

ntdim1973

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

  • Members
  • Pip
  • 10 сообщений
  • ФИО:Никифоров Дмитрий

Отправлено 23 марта 2017 - 15:58

Добрый день.

С сайта запросом забирается JSON массив примерно на 10 000 строк.

Выбирая значения из этого массива необходимо выполнять другой HTTP запрос с параметром в виде значения из полученного массива.

Как реализовать это в один поток понятно.

Как можно распараллелить генерацию запросов второго вида ?


  • 0

#2 Little_CJIOH

Little_CJIOH

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 515 сообщений
  • ФИО:Власкин Павел
  • Город:Санкт-Петербург


Отправлено 23 марта 2017 - 16:13

Неправильный вопрос задаете.
Правильный будет: Как сделать запрос первого вида единожды?

ответ: setUp Thread Group


  • 0

#3 ntdim1973

ntdim1973

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

  • Members
  • Pip
  • 10 сообщений
  • ФИО:Никифоров Дмитрий

Отправлено 23 марта 2017 - 16:21

Неправильный вопрос задаете.
Правильный будет: Как сделать запрос первого вида единожды?

ответ: setUp Thread Group

Неверный ответ.

Запрос первого вида и так выполняется один раз, запрос второго вида бежит в отдельном цикле после него.

Вопрос про распараллеливание именно его(второго цикла).


  • 0

#4 Alex

Alex

    Постоянный участник

  • Members
  • PipPipPip
  • 237 сообщений
  • ФИО:Алексей

Отправлено 24 марта 2017 - 06:29

 

Неправильный вопрос задаете.
Правильный будет: Как сделать запрос первого вида единожды?

ответ: setUp Thread Group

Неверный ответ.

Запрос первого вида и так выполняется один раз, запрос второго вида бежит в отдельном цикле после него.

Вопрос про распараллеливание именно его(второго цикла).

 

Есть такой вариант https://www.blazemet...ed-sites-jmeter

Мне он не нравится, т.к. нельзя получить в отчет время выполнения каждого конкурентного запроса. Но если такой задачи не стоит, то это будет самый простой способ.

 

Для себя в свое время создавал в исходниках Jmeter Concurrent controller. Его можно только создать внутри jmeter, как плагин не сделаешь :(.


  • 0

#5 fesd

fesd

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

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

Отправлено 24 марта 2017 - 08:57

 

Неправильный вопрос задаете.
Правильный будет: Как сделать запрос первого вида единожды?

ответ: setUp Thread Group

Неверный ответ.

Запрос первого вида и так выполняется один раз, запрос второго вида бежит в отдельном цикле после него.

Вопрос про распараллеливание именно его(второго цикла).

 

Имхо логически верно для подобных целей использовать setup thread group. А вот как в другую тред группу передавать полученные данные? Можно задействовать https://jmeter-plugi...dCommunication/


  • 0

#6 Little_CJIOH

Little_CJIOH

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 515 сообщений
  • ФИО:Власкин Павел
  • Город:Санкт-Петербург


Отправлено 24 марта 2017 - 08:58

 

Неправильный вопрос задаете.
Правильный будет: Как сделать запрос первого вида единожды?

ответ: setUp Thread Group

Неверный ответ.

Запрос первого вида и так выполняется один раз, запрос второго вида бежит в отдельном цикле после него.

Вопрос про распараллеливание именно его(второго цикла).

 

У меня острое ощущение что вы собрались чесать нос через задний проход. 
Вы в инструменте нагрузочного тестирования пишите скрипт работаущий в 1 поток и внутри него  хотите распараллелить цикл.
Вы чтоли функциональные тесты пишете в Jmeter?


  • 0

#7 Spock

Spock

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 772 сообщений
  • ФИО:Роман

Отправлено 24 марта 2017 - 10:43

 

 

У меня острое ощущение что вы собрались чесать нос через задний проход. 
Вы в инструменте нагрузочного тестирования пишите скрипт работаущий в 1 поток и внутри него  хотите распараллелить цикл.
Вы чтоли функциональные тесты пишете в Jmeter?

может мы например товары покупаем. а для этого тест должен первым большим запросом получить товары, чтобы начать их покупать потом

 

сначала один запрос - взять товары

а потом уже треды пойдут, где покупки будут совершаться


  • 0

#8 Little_CJIOH

Little_CJIOH

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 515 сообщений
  • ФИО:Власкин Павел
  • Город:Санкт-Петербург


Отправлено 24 марта 2017 - 11:31

 

 

 

У меня острое ощущение что вы собрались чесать нос через задний проход. 
Вы в инструменте нагрузочного тестирования пишите скрипт работаущий в 1 поток и внутри него  хотите распараллелить цикл.
Вы чтоли функциональные тесты пишете в Jmeter?

может мы например товары покупаем. а для этого тест должен первым большим запросом получить товары, чтобы начать их покупать потом

 

сначала один запрос - взять товары

а потом уже треды пойдут, где покупки будут совершаться

Это как раз та схема, которую я предложил, и которая автора не устроила.


  • 0

#9 ntdim1973

ntdim1973

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

  • Members
  • Pip
  • 10 сообщений
  • ФИО:Никифоров Дмитрий

Отправлено 26 марта 2017 - 15:38

 

 

 

 

У меня острое ощущение что вы собрались чесать нос через задний проход. 
Вы в инструменте нагрузочного тестирования пишите скрипт работаущий в 1 поток и внутри него  хотите распараллелить цикл.
Вы чтоли функциональные тесты пишете в Jmeter?

может мы например товары покупаем. а для этого тест должен первым большим запросом получить товары, чтобы начать их покупать потом

 

сначала один запрос - взять товары

а потом уже треды пойдут, где покупки будут совершаться

Это как раз та схема, которую я предложил, и которая автора не устроила.

 

Не совсем так, как я и описывал:

Запрос первого вида и так выполняется один раз, запрос второго вида бежит в отдельном цикле после него.

Вопрос про распараллеливание именно его(второго цикла).

---

Зачем это нужно:

1. Первый запрос получает 30 000 объектов в JSON массиве.

2. В цикле пробегает последовательно все объекты.

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

Тестирование нагрузочное, предположение "Spock" верное, только там не товары :-)

Ближе к теме предложения "fesd" и "Alex"


  • 0

#10 checo

checo

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

  • Members
  • PipPipPipPip
  • 400 сообщений
  • Город:Н.Новгород

Отправлено 26 марта 2017 - 19:32

Некрасиво, но в принципе, должно работать.
Делаем 2 последовательно исполняемые тред-группы.
1-я в один поток получает JSON, парсит и записывает в CSV-файл.
2-я - на много тредов, использует этот файл в качестве источника данных.
  • 0

#11 Little_CJIOH

Little_CJIOH

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 515 сообщений
  • ФИО:Власкин Павел
  • Город:Санкт-Петербург


Отправлено 27 марта 2017 - 10:53

Не совсем так, как я и описывал:
Запрос первого вида и так выполняется один раз, запрос второго вида бежит в отдельном цикле после него.
Вопрос про распараллеливание именно его(второго цикла).
---
Зачем это нужно:
1. Первый запрос получает 30 000 объектов в JSON массиве.
2. В цикле пробегает последовательно все объекты.
Дак вот я и хочу понять как можно обработку массива запустить не в одну иттерацию, а в две или три разбив его на соответствующие части.
Тестирование нагрузочное, предположение "Spock" верное, только там не товары :-)
Ближе к теме предложения "fesd" и "Alex"

Насколько я понимаю то что вы делаете, проблема у вас в архитектуре решения.
Вы сначала отказываетесь от многопоточности предоставляемой системой, чтобы выполнить первый запрос единожды, А потом ищите как из одного потока получить многопоточность.
А надо: Использовать многопоточность предоставляемую системой и решать задачу подготовки данных в один поток, например с setUp Thread Group
  • 0

#12 ntdim1973

ntdim1973

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

  • Members
  • Pip
  • 10 сообщений
  • ФИО:Никифоров Дмитрий

Отправлено 28 марта 2017 - 12:49

 

Не совсем так, как я и описывал:
Запрос первого вида и так выполняется один раз, запрос второго вида бежит в отдельном цикле после него.
Вопрос про распараллеливание именно его(второго цикла).
---
Зачем это нужно:
1. Первый запрос получает 30 000 объектов в JSON массиве.
2. В цикле пробегает последовательно все объекты.
Дак вот я и хочу понять как можно обработку массива запустить не в одну иттерацию, а в две или три разбив его на соответствующие части.
Тестирование нагрузочное, предположение "Spock" верное, только там не товары :-)
Ближе к теме предложения "fesd" и "Alex"

Насколько я понимаю то что вы делаете, проблема у вас в архитектуре решения.
Вы сначала отказываетесь от многопоточности предоставляемой системой, чтобы выполнить первый запрос единожды, А потом ищите как из одного потока получить многопоточность.
А надо: Использовать многопоточность предоставляемую системой и решать задачу подготовки данных в один поток, например с setUp Thread Group

 

Вполне возможно, можете детальнее пояснить как ?


  • 0

#13 ntdim1973

ntdim1973

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

  • Members
  • Pip
  • 10 сообщений
  • ФИО:Никифоров Дмитрий

Отправлено 28 марта 2017 - 12:50

Некрасиво, но в принципе, должно работать.
Делаем 2 последовательно исполняемые тред-группы.
1-я в один поток получает JSON, парсит и записывает в CSV-файл.
2-я - на много тредов, использует этот файл в качестве источника данных.

Да, уже пробую так сделать ...


  • 0


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

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