提取javascript变量并传递给下一个Jmeter请求
脚本标记中的响应数据如下所示提取javascript变量并传递给下一个Jmeter请求,jmeter,Jmeter,脚本标记中的响应数据如下所示 var csrfParam = "SKtEMgZtO0H8EYHkAZIQ4tcS5bC8jKrD=y2G5Of06jgHbkNdHNleFKiXoBMC62veD"; var securityTokenName = "SKtEMgZtO0H8EYHkAZIQ4tcS5bC8jKrD"; var securityTokenValue = "y2G5Of06jgHbkNdHNleFKiXoBMC62veD"; 我使用正则表达式提取器,如下所示: R
var csrfParam =
"SKtEMgZtO0H8EYHkAZIQ4tcS5bC8jKrD=y2G5Of06jgHbkNdHNleFKiXoBMC62veD";
var securityTokenName = "SKtEMgZtO0H8EYHkAZIQ4tcS5bC8jKrD";
var securityTokenValue = "y2G5Of06jgHbkNdHNleFKiXoBMC62veD";
我使用正则表达式提取器,如下所示:
Reference name : MYREF
Regular Expression : securityTokenName ="(.+?)" securityTokenValue="(.+?)"
Template : $1$$2$
我将在下一个Jmeter请求中访问此变量以构建URL:
${MYREF_g1}
${MYREF_g2}
希望获得MYREF_g1=SKtEMgZtO0H8EYHkAZIQ4tcS5bC8jKrDMYREF_g2=y2G5Of06jgHbkNdHNleFKiXoBMC62veD
但这是行不通的
任何帮助都将不胜感激 看起来您误解了组和模板是什么 依照 模板。用于根据找到的匹配项创建字符串的模板。 这是一个带有特殊元素的任意字符串,用于引用组 在正则表达式中。引用组的语法为: “$1$”表示第1组“$2$”表示第2组,等等。$0$表示 无论整个表达式匹配什么。所以,如果你有回应的话 “经济学”一词和正则表达式搜索(ec)(经济学)以及 将模板$2$$1$应用到您将收到的输出变量中 “节拍” 因此,您的正则表达式应该如下所示:
var securityTokenName = "(.+?)"; var securityTokenValue = "(.+?)";
所以
- securityTokenName将存储在JMeter变量
MYREF_g1
- securityTokenValue将存储在JMeter变量
MYREF_g2
在ResponseData选项卡上有内置的RegExp Tester。您还可以使用查看正则表达式提取器设置了哪些变量 您需要多行正则表达式匹配。你的正则表达式看起来像这样
(?s)securityTokenName=“(.+?)”*?securityTokenValue=“(.+?)”代码>
下面是一个示例测试计划(它使用jmeter插件中的虚拟采样器,如果您没有它们,它将失败)
这篇文章讨论了简单地拥有。*?将匹配多行,但显然不起作用。他不是救世主
详细信息来自jmeter文档
请注意,为了简化示例,我删除了=周围的空格。请适当地更改正则表达式。我的建议是首先使用第一个正则表达式检查securityTokenName=“(.*)”
&使用beanshell脚本打印值(使用beanshell后处理器)log.info(vars.get(“regex_REF”)代码>如果工作正常,则转到second.securityTokenName=“(.*)”不返回任何匹配项。这就是我面临的问题。我不确定Jmeter是否没有看到它,因为它是javascript的一部分?请检查securityTokenName=“(.*)”
regex中“=”和(.*)之间的空格部分,因为您可能不认为regex中有空格部分。使用regexsecurityTokenName“(.*”
)尝试一个通配符测试,如果在输出jmeter正常工作时出现SKtEMgZtO0H8EYHkAZIQ4tcS5bC8jKrD,否则可能会出现另一个问题。没有在jmeter中使用正则表达式提取器,是否还有其他方法可以做到这一点?我知道SoapUI有几种方法。添加var securityTokenName=”(.+?)“建议的reg表达式提取器不会返回任何匹配项。感谢您建议使用调试采样器。不知何故,Jmeter无法识别securityTokenName和securityTokenValue