2015-06-25 2 views
4

Я пытаюсь сравнить значение JWT, возвращаемое вызовом API, в ожидаемое допустимое значение в JMeter. Для этого мне нужно генерировать ожидаемое значение в предварительном процессоре (либо предварительный процессор BSF, либо предварительный процессор оболочки Bean), а затем сравнить его с извлеченным из значения ответа на вызов. Кто-нибудь создал что-нибудь подобное раньше? В настоящее время я использую http://jwt.io/, чтобы вручную генерировать ожидаемые значения, но хотел бы динамически генерировать эти значения в JMeter.Генератор токенов JSON для JMeter

ответ

1

К сожалению, на данный момент нет готового решения для обработки JWT-подписанных запросов в JMeter.

Похоже, у вас есть по крайней мере, следующие параметры:

  1. Попробуйте использовать gatling вместо JMeter. Gatling уже реализовал расширение для этой полезной нагрузки - gatling-jwt - но кажется, что он поддерживает в настоящее время только запросы GET.

  2. Возможно, вы можете попробовать расширить стандартный HTTP Request Sampler или обычая REST Sampler с подписанием JWT с использованием любого java implementation of JWT - как это сделано в OAuth Sampler плагин для OAuth полезной нагрузки.
    Но это может показаться довольно сложным, что требует немного опыта разработки, а также не будет подвержено ошибкам - неточная реализация может привести к ухудшению производительности и повлиять на результаты тестирования.

  3. Подход с предварительной и последующей обработкой для подтверждения JWT и ответа на ответ, упомянутый в вашем вопросе, представляется разумным компромиссом.
    Когда я столкнулся с той же проблемой, мой первый и довольно успешный подход с использованием Pre- и PostProcessors.
    следует отметить несколько моментов:

    • использовать JSR233 (как PreProcessor и PostProcessor) + Groovy вместо Beanshell соображений производительности (подробнее вы можете посмотреть в this article);
    • выберите любую стабильную java-реализацию JWT от list of available;
      Я использовал jjwt и нашел его достаточно хорошим, простым в использовании;
    • выполнить запрос тела JWT-подпись в PreProcessor, сохранить подписанное тело в переменную, отправить его вместе с HTTP-запросом как данные тела и декодировать ответ в PostProcessor;
       
      HTTP Request// your http call 
      Body Data = ${jwtSignedBody} // variable with request body already signed in pre-processor 
          JSR233 PreProcessor// sign here your body data and put into variable 
          JSR233 PostProcessor// decode JWT-signed response 
      
    • это может быть чрезвычайно полезным для отладки и дальнейшей обработки, чтобы обновить в теле ответа постпроцессор с декодированного ответа, как в приведенном выше сценарии.