JMeter: использование значения извлечения регулярных выражений в постпроцессоре beanshell для извлечения значения, используя его в других потоках

#jmeter

#jmeter

Вопрос:

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

Препроцессор BeanShell

Извлечение регулярных выражений распечатанные журналы

Я ожидаю напечатать значение, извлеченное из запроса токена.

Ответ №1:

Трудно ответить, почему ваш скрипт всегда извлекает значение 1, пока мы не узнаем, какой возвращается ответ и как ваш Regex Extractor ведет себя в этом ответе. Также лучше использовать Groovy в более новых версиях JMeter вместо BeanShell .

В качестве примера, который поможет вам, я опубликовал ниже использование Regex Extractor и Beanshell Preprocessor для одного из моих старых проектов, который извлекает cookie amp; CSRF значения из ответа на предыдущий запрос и передает следующему запросу.

HTTP-ответ:

{"responseMessage":{"messageObjects":[{"Authorization":"Bearer eyJhbGcxxxxxxxxxx.hsagdshvvdcwfdhwegdwdvbsqmshljkdhlqwkvnAJHFDBVGHWFHJDWBMNEHDJBSMNWBWJLHDKLJWHKJHDHWFVWDJGJKEWWBDNXVWGHDFWJHXKLBSNXVWFXWJEHXKWBXWDVXHGHWCDGXWDXCB0YXNrdcbwdgwegvcbwdvxbscxwfdvcwehgdwebwbvdcwdgckkhecdADGGHWFCVWBDVCGWCWVXNBSVXKWHCWVCBWCJWFGHECWECwgdhwvcwehhebdmnwwjhgnwvdcnbvwgvcwrehcwefnwecwghkevwe.abcdefghijklmnopqrst-poushfgabjwgjhwdvvttrudyqgd-CSGQGBkjgdjwhged","csrfToken":"adganm7ik39i6oclabce54154","ConnectedIP":"127.0.0.1","lastLoginIp":"null"}],"messageString":""},"responseStatus":200}

Средство извлечения регулярных выражений (имя используемой переменной — «authcsrfkey»)

{"responseMessage":{"messageObjects":[{"Authorization":(. ?),"csrfToken":"(. ?)"

Постпроцессор BeanShell (поскольку мне нужно объединить два извлеченных значения. Этот постпроцессор находится сразу после извлечения регулярных выражений)

 String authkey=vars.get("authcsrfkey_g1");
String csrf=vars.get("authcsrfkey_g2");
String cookie="Authorization="   authkey   "; csrfToken="   csrf;
vars.put("cookie",cookie);
  

Препроцессор BeanShell (будет добавлен в заголовок последующего запроса)

 import org.apache.jmeter.protocol.http.control.Header;
sampler.getHeaderManager().add(new Header("Cookie",vars.get("cookie")));