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

Фотография

Ограничение времени выполенения HTTP запроса.


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

#1 Lao-Ax

Lao-Ax

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

  • Members
  • Pip
  • 16 сообщений
  • ФИО:Алексей Плехов


Отправлено 21 сентября 2012 - 07:10

Приветствую всех.

Есть ну очень много разных http запросов. А на сайте где-то есть баг, из-за которого запрос виснет. Т.е. он передает страницу и вложенные в неё файлы ооооооочень медленно.

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

Я испробывал Runtime Controller на всей группе запросов (т.е. запросы - дети контроллера). В этом случае, если какой-то запрос сжирает все отведенное время, то Runtime Controller останавливает группу и переходит на следующий Loop Count. Таким образом отрабатывают лишь 2-3 запроса из всех.

Попытался использовать параметры Connect Timeout, Response Timeout в HTTP Request Defaults. Но они, как я понял, совсем не о том. Запрос все равно передается дольше указанного в них времени.

Перспектива ставить на каждый запрос Runtime Controller не радует.
Есть мысли, идеи или, может быть, готовые решения?
  • 0

#2 JohnSmith

JohnSmith

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

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

Отправлено 21 сентября 2012 - 07:59

Может использовать Duration Assertion? Если добавить его на уровне Thread Group, то по идее все запросы, выполняющиеся больше указанного времени, будут помечаться как failed.
  • 0

#3 Lao-Ax

Lao-Ax

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

  • Members
  • Pip
  • 16 сообщений
  • ФИО:Алексей Плехов


Отправлено 21 сентября 2012 - 08:10

Это я тоже пробывал.
Он именно помечает запросы, но не останавливает их. Т.е. запрос зафейлится и будет продолжать грузиться.
В связи с этой проверкой пытался настроить параметры самой ThreadGroup. Но любой error останавливает всю группу или тест в целом, но не конкретную проверку.
  • 0

#4 JohnSmith

JohnSmith

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

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

Отправлено 21 сентября 2012 - 09:12

Вот еще здесь пишут, что надо поставить httpclient.timeout=120000 в файле jmeter.properties.
  • 0

#5 Lao-Ax

Lao-Ax

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

  • Members
  • Pip
  • 16 сообщений
  • ФИО:Алексей Плехов


Отправлено 21 сентября 2012 - 09:29

Duration Assertion я испробывал в доль и поперек. И как ребенка запроса ставил, и прямо в гурппу - результата останова нет.
По поводу параметра. timeout - можно выставить в самом запросе (там есть два поля для этого).
Во вторых, "httpclient" не понятно какой, 3 или 4?

Попробую. Спасибо за ссылку!
  • 0

#6 JohnSmith

JohnSmith

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

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

Отправлено 21 сентября 2012 - 09:42

Во вторых, "httpclient" не понятно какой, 3 или 4?Попробую.

Что за версия httpclient? У меня в jmeter.properties нет версий. Вот что там написано:
# set the socket timeout (or use the parameter http.socket.timeout)
# Value is in milliseconds
#httpclient.timeout=0
# 0 == no timeout

  • 0

#7 Lao-Ax

Lao-Ax

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

  • Members
  • Pip
  • 16 сообщений
  • ФИО:Алексей Плехов


Отправлено 21 сентября 2012 - 09:56

Я наверное, неправильно понял.
В HTTP request есть поле Implementation. Я подумал, что они связаны.
  • 0

#8 ShortLegged

ShortLegged

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

  • Members
  • PipPipPip
  • 155 сообщений
  • Город:Moscow

Отправлено 21 сентября 2012 - 20:17

Response Timeout.
  • 0

#9 Lao-Ax

Lao-Ax

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

  • Members
  • Pip
  • 16 сообщений
  • ФИО:Алексей Плехов


Отправлено 24 сентября 2012 - 05:22

Response Timeout.


Попытался использовать параметры Connect Timeout, Response Timeout в HTTP Request Defaults. Но они, как я понял, совсем не о том. Запрос все равно передается дольше указанного в них времени.


Сообщение отредактировал Lao-Ax: 24 сентября 2012 - 08:57

  • 0

#10 ShortLegged

ShortLegged

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

  • Members
  • PipPipPip
  • 155 сообщений
  • Город:Moscow

Отправлено 24 сентября 2012 - 08:38

В 'Http Request Defaults', секция Timeout, поле Response. Или если надо для одного типа запросов, то же самое, только в 'Http Request'.
  • 0

#11 Lao-Ax

Lao-Ax

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

  • Members
  • Pip
  • 16 сообщений
  • ФИО:Алексей Плехов


Отправлено 24 сентября 2012 - 10:03

В 'Http Request Defaults', секция Timeout, поле Response. Или если надо для одного типа запросов, то же самое, только в 'Http Request'.



Да, у меня в первом сообщении написано, что я попытался использовать параметры Connect Timeout, Response Timeout в HTTP Request Defaults. Но они, как я понял, совсем не о том. Запрос все равно передается дольше указанного в них времени.

Я выставлял значнение в 60сек. Потом в tree results view вижу, что время запроса 87ооо или 120ооо.
  • 0

#12 ТимурТорубаров

ТимурТорубаров

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

  • Members
  • PipPip
  • 96 сообщений

Отправлено 24 сентября 2012 - 10:32

attach

[root@vps4111 html]# cat sleep.php
<?php
sleep(7);
?>

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

  • Прикрепленный файл  sleep.JPG   92,1К   38 Количество загрузок:

  • 0

#13 ShortLegged

ShortLegged

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

  • Members
  • PipPipPip
  • 155 сообщений
  • Город:Moscow

Отправлено 24 сентября 2012 - 11:00

Попробуйте посмотреть tcpdump-ом трафик и найти нужное значение таймаута для данного запроса. Возможно 60 сек. слишком много.
  • 0

#14 ТимурТорубаров

ТимурТорубаров

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

  • Members
  • PipPip
  • 96 сообщений

Отправлено 24 сентября 2012 - 11:09

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

Почему не поможет, когда мне помог?
Я создал пхп скрипт, выполняющийся 7 секунд. Указал в семплере 5000мс респонс таймаут. Отправил запрос, через 5 секунд запрос отвалился по таймауту.
С чем, собственно, проблемы у топикстартера?
  • 0

#15 ShortLegged

ShortLegged

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

  • Members
  • PipPipPip
  • 155 сообщений
  • Город:Moscow

Отправлено 24 сентября 2012 - 11:56

Скорее всего поможет, но придется помучиться с выбором таймаута. Не факт, что при каждом следующем запуске он будет одинаковый.
Зависит от того как именно сервер посылает данные в tcp пакетах.

У Вас в скрипте sleep, сервер ничего не отправляет клиенту, поэтому на сокете и возникает таймаут. Если отправлять немного данных каждые 4 сек. то запрос может обрабатываться достаточно долго и без таймаута.

@Lao-Ax
Можно посмотреть вот это - http://code.google.c...putShapingTimer
  • 0

#16 Lao-Ax

Lao-Ax

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

  • Members
  • Pip
  • 16 сообщений
  • ФИО:Алексей Плехов


Отправлено 25 сентября 2012 - 05:11

Спасибо, почитаю.
А пока читаю, попробую переформулировать запрос.

Предположим. В ходе теста я постоянно выкачиваю файлы. Мне известно, что каждый файл не должен передавать более чем за 2 минуты. Чтобы сократить время тестирования, я хочу передавать управление следующему элементу теста как только запрос превысит 2.5 минуты.
  • 0

#17 Lao-Ax

Lao-Ax

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

  • Members
  • Pip
  • 16 сообщений
  • ФИО:Алексей Плехов


Отправлено 25 сентября 2012 - 05:46

В общем, понял я, почему не помогает мне таймаут.
У меня запрос с галкой retrieve all embedded resources from html files. И время головного запроса складывается как сумма его дочерних. :( так что все приведенные тут ответы в целом правильные. За что вам спасибо!

Мне нужно как-то сделать так, что он резался по общей сумме :)
  • 0

#18 ShortLegged

ShortLegged

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

  • Members
  • PipPipPip
  • 155 сообщений
  • Город:Moscow

Отправлено 25 сентября 2012 - 09:07

Cтандартных способов не знаю. Можно подкрутить в JMeter метод чтения из сокета, задать в параметрах нужный таймаут и перед каждым чтением проверять вышли за порог или нет, если вышли кидать эксепшен.
Я бы просто отключил или вынес в отдельную группу потоков.
  • 0

#19 barancev

barancev

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

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


Отправлено 25 сентября 2012 - 11:36

Берёте код JMeter, кастомизируете класс, который реализует HTTP Sampler, или пишете свой на его основе, собираете кастомизированную версию JMeter -- и получаете профит!
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#20 Lao-Ax

Lao-Ax

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

  • Members
  • Pip
  • 16 сообщений
  • ФИО:Алексей Плехов


Отправлено 26 сентября 2012 - 05:25

Берёте код JMeter, кастомизируете класс, который реализует HTTP Sampler, или пишете свой на его основе, собираете кастомизированную версию JMeter -- и получаете профит!


Пока это сделаешь 100 раз все сроки зафейлишь :)
Жаль, что нет методов проще :(
  • 0


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

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