我设法将脚本设置为从令牌中提取值,并将其全局用于其他线程,但是不幸的是,默认情况下,我的脚本将值提取为1。
Regular Expression Extractor + logs printed
我的期望是打印从令牌请求中提取的值。
答案 0 :(得分:0)
很难回答为什么您的脚本总是提取值1,直到我们知道返回的响应是什么,以及您的Regex Extractor
在此响应中的表现如何。同样,最好在新版本的JMeter中使用Groovy
而不是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 (因为我需要连接两个提取的值。该后处理器位于正则表达式提取器之后)
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")));