2014-02-18 2 views
3

Я был успешно отправлен запрос POST для моей конечной точки входа в журнал и был создан JSESSIONID. Я знаю, что JSESSIONID хранится в HTTP Cookie Manager, который у меня на вершине моего потока, потому что я вижу, что он используется в нескольких запросах GET, которые у меня есть в моем потоке.jmeter - второй пост не использует JSESSIONID, созданный при моем входе в систему.

Но когда я пытаюсь выполнить запрос POST, он не использует JSESSIONID и создает свой собственный идентификатор. Ниже приведены мои настройки:

Протокол HTTPS Метод: POST -Использование KeppAlive { "JSON": "Титулы"}

Sampler Результат: Имя Тема: сим тест 1-1 Sample Начало: время 2014-02-18 15:42:42 EST Нагрузка: 95 Задержка: 95 Размер в байтах: 239 Headers размер в байтах: 239 Размер тела в байтах: 0 Sample Count: 1 Количество Ошибка : 0 4444516410617451515053 Код 691368888 отклика: 302 Сообщение Ответ: Найдено

заголовки отклика: HTTP/1.1 302 Найдено сервер: Apache-Койот/1.1 Set-Cookie: JSESSIONID = F16BF82FD28A84F6E28DDE30DECDC48C; Path = /; Безопасный; HttpOnly Адрес: https: //api.zzzz ком/сайт/needsAuth Content-Length: 0 Дата: Вт, 18 февраля 2014 20:42:42 GMT

HTTPSampleResult поле: ТипСодержимый: DataEncoding: нулевой

Запрос: POST https: //api.zzz ком/отдых/Участники/347/пассажиров

POST данные: { "relationshipToMember": нулевая, "authorizedToBook": ложные, "authorizedToFly" : правда, "authorizedToGetInfo" ложь ", стр assenger ": {" Имя ":" Могучий», "MiddleName": нулевой, "LastName": "Макс", "DateOfBirth": 1380857200000}}

[нет печенье]

Заголовки запросов: соединения : поддержания активности Content-Type: приложения/JSON Content-Length: 20 хоста: api.zzz.com User-Agent: Apache-HttpClient/4.2.6 (Java 1.5)

-Примечание: Я не знаю, правильно ли я выполняю свои запросы GET, но они работают. У них есть Follow Redirects on, и он сначала отправляется на http: //api.zzz ... - 302 Найдено, затем идет https: //api.zzz ...

Редактировать: Я нашел это, что является точно моим проблема: Cookie Manager of Apache JMeter doesn't add the cookie to POST request, но я не понимаю его решения, если кто-то может подробно остановиться на шагах.

UPDATE Решено: я должен был держать тот же имя сервера, как мой Вход в POST и изменить свой путь

ответ

2

UPDATE !!!

Не нашли Ваш протокол https.

Все, что вам нужно установить либо CookieManager.save.cookies=true свойство в файле jmeter.properties или добавить его в качестве аргумента командной строки JMeter в

jmeter -JCookieManager.save.cookies=true -n -t path_to_jmx_script.jmx -l path_to_log_file.jtl 

Оставляя остальную часть моего ответа на всякий случай, если кто-то будет нужно, как руководство по обмену куки-файлами JMeter в разных группах тем.

Я не в состоянии воспроизвести ваш случай использования в моей среде, используя следующие сценарии:

  • HTTP Cookie Manager, жизнь в соответствии с планом испытаний (тот же уровень, как Thread Group (ов))
  • HTTP Cookie Manager живет на уровне группы Thread (тот же уровень, что и пробоотборники)

Это только воспроизводимое, если HTTP Cookie Manager добавлен как дочерний элемент запроса на вход. Если это ваш случай - переместите его на 1 уровень, чтобы расширить область действия.

Если по каким-либо причинам это не помогает - см. Ниже возможные детали обходных путей.

Ваш код ответа 204 не звучит как ошибка для меня. Я предполагаю, что сервер скорее ответит чем-то вроде 401 или 403, если возникли проблемы с аутентификацией на основе файлов cookie.

Если вы явно нужно установить кук он все еще может быть сделан с помощью т.е. Beanshell

Вам нужно сделать следующее:

  1. Если вы собираетесь делить печенье между различными группами резьбы или необходимостью их как JMeter переменные для любой другой причине установить CookieManager.save.cookies=true свойство либо в jmeter.properties файл или указать его при запуске JMeter в jmeter -JCookieManager.save.cookies=true
  2. Добавить Beanshell постпроцессор на ваш запрос Вход с помощью следующего кода:

    import org.apache.jmeter.protocol.http.control.CookieManager; 
    
    CookieManager manager = ctx.getCurrentSampler().getProperty("HTTPSampler.cookie_manager").getObjectValue(); 
    
    props.put("cookiecount", String.valueOf(manager.getCookieCount())); 
    
    for (int i = 0; i < manager.getCookieCount(); i++) { 
        props.put("cookie_name" + i, manager.get(i).getName()); 
        props.put("cookie_value" + i, manager.get(i).getValue()); 
        props.put("cookie_domain" + i, manager.get(i).getDomain()); 
        props.put("cookie_path" + i, manager.get(i).getPath()); 
        props.put("cookie_expires" + i, String.valueOf(manager.get(i).getExpires())); 
        props.put("cookie_secure" + i, String.valueOf(manager.get(i).getSecure())); 
    } 
    
  3. Добавить Beanshell Pre Processor вашему POST запроса с помощью следующего кода:

    import org.apache.jmeter.protocol.http.control.CookieManager; 
    import org.apache.jmeter.protocol.http.control.Cookie; 
    import org.apache.jmeter.testelement.property.JMeterProperty; 
    
    
    CookieManager manager = ctx.getCurrentSampler().getProperty("HTTPSampler.cookie_manager").getObjectValue(); 
    
    int count = Integer.parseInt(props.getProperty("cookiecount")); 
    
    for (int i = 0; i < count; i++) { 
        Cookie cookie = new Cookie(props.getProperty("cookie_name" + i), props.getProperty("cookie_value" + i), 
          props.getProperty("cookie_domain" + i), props.getProperty("cookie_path" + i), 
          Boolean.parseBoolean(props.getProperty("cookie_secure" + i)), 
          Long.parseLong(props.getProperty("cookie_expires" + i))); 
        manager.add(cookie); 
    } 
    
    JMeterProperty cookieprop = ctx.getCurrentSampler().getProperty("HTTPSampler.cookie_manager"); 
    
    cookieprop.setObjectValue(manager); 
    
    ctx.getCurrentSampler().setProperty(cookieprop); 
    

Объяснение:

код в точке 2 извлекает все доступные куки HTTP Cookie Manager и сохраняет их к свойствам JMeter с префиксом cookie_

Код в точке 3 считывает все свойства с префиксом cookie_, создает из них JMeter Cookies и добавляет их в HTTP Cookie Manager.

См. How to use BeanShell руководство для получения дополнительной информации о расширении JMeter с помощью скриптов.

+0

Спасибо за быстрый ответ! Я попробовал ваше направление выше, и мой второй запрос POST (после запроса POST-входа) по-прежнему создает собственный jsessionID. Результат запроса все еще говорит «[нет файлов cookie]». Мой менеджер файлов cookie находится на уровне потока кстати. Есть ли больше информации, которую я могу вам дать, что может помочь? –

+0

Чтобы подтвердить, если у меня есть автоматическая переадресация или переадресация на нее, она попыталась превратить мой запрос в запрос GET. Поэтому я не проверял ни один из них. Правильно ли это? –

+0

Чтобы отправить запрос на GET, вам необходимо изменить «Метод». Вы можете попробовать разместить изображение своего плана тестирования здесь, чтобы дать нам ключ, однако поведение выглядит странно. Вы уверены, что это тот же самый поток, делающий логин после публикации? –

0

Я должен был поддерживать одно и то же имя сервера/IP как мой Вход в систему POST и изменить мой путь

Смежные вопросы