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

Фотография

Как получить данные из engine.js для AJAX запросов?


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

#1 Rizken

Rizken

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

  • Members
  • Pip
  • 9 сообщений
  • ФИО:Каспарова Катерина

Отправлено 26 июня 2017 - 14:39

Здравствуйте, я только начинаю постигать чудесный мир JMeter и столкнулась с проблемой. Вместо обычных HTTP запросов на проекте для любого действия используются .dwr запросы, для которых мне нехватает одного параметра. Пример такого запроса (записанный с помощью Test Script Recorder):

callCount=1
c0-scriptName=Server
c0-methodName=renameCategory
c0-id=0
c0-param0=number:4005
c0-param1=string:Test_Performance
batchId=27
instanceId=0
page=%2FWebSpace%2F
scriptSessionId=Z7XEy4eL1OPr2m6ZP4AtNK77rUbChYGWePl/d6dLfPl-BWV1tFK1b

Вопрос в том, что я не могу получить сам scriptSessionId. 

Чтобы его получить, к запросу engine.js я добавила Regular Expression Extractor, но это не правильно, а как сделать правильно я не знаю:). Почему неправильно это - потому что ответ engine.js - это скрипт и, соответственно, мой экстрактор возвращает выражение, а не результат (dwr.engine._scriptSessionId = dwrsess + "/" + dwr.engine._pageId;). Подскажите, пожалуйста, как можно это решить?


  • 0

#2 checo

checo

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

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

Отправлено 26 июня 2017 - 16:12

Если верить скрипту, то составляющая dwrsess приходит с каким-то из запросов в составе куки как DWRSESSIONID=([^;]+).

Составляющая _pageId - уникальный токен, который вычисляется на стороне клиента, так что можно попробовать подставлять произвольный набор символов в том же формате c помощью __RandomString.

Плохо будет, если на стороне сервера этот токен как-то всё же проверяется, тогда придется сочинять скрипт, делающий что-то подобное.

 

Еще обратите внимание, что в dwr номер запроса нужно инкрементировать. То ли callCount, то ли batchId - не помню уже, но он для каждого нового запроса должен быть больше на единицу.


  • 0

#3 Rizken

Rizken

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

  • Members
  • Pip
  • 9 сообщений
  • ФИО:Каспарова Катерина

Отправлено 27 июня 2017 - 08:56

Спасибо за оперативность.

Еще обратите внимание, что в dwr номер запроса нужно инкрементировать. То ли callCount, то ли batchId - не помню уже, но он для каждого нового запроса должен быть больше на единицу.

 

По консоли в браузере выходит, что scriptSessionId постоянный в рамках одной сессии (логин - логаут), то есть все операции происходят с этим единственным id-шником. А DWRSESSIONID я почему-то никак не могу вычленить из куки, пыталась. Вообще, вот глупый вопрос: одним запросом я залогинилась, вторым делаю какое-то действие. Подразумевает ли это второе действие, что я уже залогинена? Не совсем понимаю этот механизм.


  • 0

#4 checo

checo

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

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

Отправлено 27 июня 2017 - 09:36

Спасибо за оперативность.

Еще обратите внимание, что в dwr номер запроса нужно инкрементировать. То ли callCount, то ли batchId - не помню уже, но он для каждого нового запроса должен быть больше на единицу.

 

По консоли в браузере выходит, что scriptSessionId постоянный в рамках одной сессии (логин - логаут), то есть все операции происходят с этим единственным id-шником. А DWRSESSIONID я почему-то никак не могу вычленить из куки, пыталась. Вообще, вот глупый вопрос: одним запросом я залогинилась, вторым делаю какое-то действие. Подразумевает ли это второе действие, что я уже залогинена? Не совсем понимаю этот механизм.

Может приходить не в куки, а в теле какого-то скрипта или HTML. Запишите все ответы с момента захода на сайт, где-то должно быть.

 

Авторизация работает просто: есть некий токен (или сочетание нескольких токенов). Сервер запоминает, что сессия с этим токеном авторизована. Когда этот токен приходит серверу со следующими запросами, сервер их пропустит.

Как реализована авторизация - зависит от сайта. Может, одного DWR достаточно. Может быть, возникает дополнительный куки или заголовок (например, JSESSIONID).


  • 0

#5 Rizken

Rizken

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

  • Members
  • Pip
  • 9 сообщений
  • ФИО:Каспарова Катерина

Отправлено 27 июня 2017 - 11:38

Как в принципе работает авторизация я понимаю, просто думала, может, JMeter считает юзера авторизованым только в пределах Лог Ин реквеста. Хорошо, с этим разобрались. А DWRSESSIONID вижу только в рамках куки в Request headers. Буду искать, как мы его получаем. То есть нет возможности получить сразу готовый scriptsessionid? :(


  • 0

#6 checo

checo

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

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

Отправлено 27 июня 2017 - 12:32

То есть нет возможности получить сразу готовый scriptsessionid? :(

Как-то делал "Hello World" для проекта с DWR. До реальных тестов тогда дело не дошло, пример не сохранился.

Но насколько помню, я долго искал первую часть, и где она - в теле или в заголовке, уже не скажу. Через скрипт в BeanShell Post-processor добавлял вторую часть и запоминал в переменной.


  • 0

#7 Rizken

Rizken

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

  • Members
  • Pip
  • 9 сообщений
  • ФИО:Каспарова Катерина

Отправлено 27 июня 2017 - 15:22

Спасибо за наводку. После длительного наблюдения было установлено, что DWRSESSIONID - константа и, видимо, я его просто захардкоду в JMeter. А вот после него идет: dwr.engine.util.tokenify(new Date().getTime()) + "-" + dwr.engine.util.tokenify(Math.random() * 1E16); - для этого попробую использовать BeanShell Post-processor, как и советовал.


  • 0


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

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