jmeter - JMeter:在 beanshell 后处理器中使用正则表达式提取器值来提取在另一个线程中使用它的值
问题描述
我设法设置了一个脚本来从令牌中提取值并将其全局用于其他线程,但不幸的是,我的脚本默认将值提取为 1。
我的期望是打印从令牌请求中提取的值。
解决方案
很难回答为什么您的脚本总是提取值 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")));
推荐阅读
- python - 仅更改 Python 乌龟中的填充或线条颜色
- c# - 如何在 C# 中发送之前替换邮件模板中的某些内容?
- sql - 将 getdate()-1 插入到日期类型的表字段中会引发错误:从字符串转换日期和/或时间时转换失败
- php - 通过分离视图和模型检索数据并显示在我的网页中
- android - 复制类禁止运行应用程序。如何解决?
- python - Python 计数器只显示单个字母而不是单词
- android - 当不在查询中的对象发生更改时,RoomDatabase 通知流
- javascript - Nashorn 与 Java 1.8 到 15 的兼容性?
- dpdk - DPDK:运行 TestPMD 时 Tx 或 Rx 数据包为零
- javascript - Splice (index,1) 正在从数组中删除多个元素