Я пытаюсь сравнить значение JWT, возвращаемое вызовом API, в ожидаемое допустимое значение в JMeter. Для этого мне нужно генерировать ожидаемое значение в предварительном процессоре (либо предварительный процессор BSF, либо предварительный процессор оболочки Bean), а затем сравнить его с извлеченным из значения ответа на вызов. Кто-нибудь создал что-нибудь подобное раньше? В настоящее время я использую http://jwt.io/, чтобы вручную генерировать ожидаемые значения, но хотел бы динамически генерировать эти значения в JMeter.Генератор токенов JSON для JMeter
ответ
К сожалению, на данный момент нет готового решения для обработки JWT-подписанных запросов в JMeter.
Похоже, у вас есть по крайней мере, следующие параметры:
Попробуйте использовать gatling вместо JMeter. Gatling уже реализовал расширение для этой полезной нагрузки - gatling-jwt - но кажется, что он поддерживает в настоящее время только запросы GET.
Возможно, вы можете попробовать расширить стандартный HTTP Request Sampler или обычая REST Sampler с подписанием JWT с использованием любого java implementation of JWT - как это сделано в OAuth Sampler плагин для OAuth полезной нагрузки.
Но это может показаться довольно сложным, что требует немного опыта разработки, а также не будет подвержено ошибкам - неточная реализация может привести к ухудшению производительности и повлиять на результаты тестирования.Подход с предварительной и последующей обработкой для подтверждения 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
- это может быть чрезвычайно полезным для отладки и дальнейшей обработки, чтобы обновить в теле ответа постпроцессор с декодированного ответа, как в приведенном выше сценарии.