Сложно ответить, почему ваш сценарий всегда извлекает значение 1, пока мы не узнаем, какой ответ был возвращен и как ваш Regex Extractor
ведет себя в этом ответе. Также лучше использовать Groovy
в новых версиях JMeter вместо BeanShell
.
В качестве примера, чтобы помочь вам, я разместил ниже использование Regex Extractor
и Beanshell Preprocessor
для одного из моих старых проектов, который извлекает значения cookie & 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 PostProcessor (так как мне нужно соединить два извлеченных значения. Этот постпроцессор находится сразу за экстрактором Regex)
String authkey=vars.get("authcsrfkey_g1");
String csrf=vars.get("authcsrfkey_g2");
String cookie="Authorization=" + authkey + "; csrfToken=" + csrf;
vars.put("cookie",cookie);
BeanShell PreProcessor (будет добавлено в заголовок последующего запроса)
import org.apache.jmeter.protocol.http.control.Header;
sampler.getHeaderManager().add(new Header("Cookie",vars.get("cookie")));