首页 > 解决方案 > JMeter:在 beanshell 后处理器中使用正则表达式提取器值来提取在另一个线程中使用它的值

问题描述

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

BeanShell 预处理器

正则表达式提取器 + 打印日志

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

标签: jmeter

解决方案


很难回答为什么您的脚本总是提取值 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 Extractor 之后)

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

BeanShell PreProcessor(在后续请求的header中添加)

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

推荐阅读