JMeter:在beanshell后处理器中使用正则表达式提取器值在另一个线程中使用它提取值

时间:2019-03-30 23:25:45

标签: jmeter

我设法将脚本设置为从令牌中提取值,并将其全局用于其他线程,但是不幸的是,默认情况下,我的脚本将值提取为1。

BeanShell PreProcessor

Regular Expression Extractor + logs printed

我的期望是打印从令牌请求中提取的值。

1 个答案:

答案 0 :(得分:0)

很难回答为什么您的脚本总是提取值1,直到我们知道返回的响应是什么,以及您的Regex Extractor在此响应中的表现如何。同样,最好在新版本的JMeter中使用Groovy而不是BeanShell

作为一个帮助您的示例,我在下面为我的一个旧项目发布了Regex ExtractorBeanshell 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")));