提取javascript变量并传递给下一个Jmeter请求

时间:2014-03-02 22:03:11

标签: jmeter

响应数据在脚本标记

中如下所示
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 = SKtEMgZtO0H8EYHkAZIQ4tcS5bC8jKrD
和MYREF_g2 = y2G5Of06jgHbkNdHNleFKiXoBMC62veD
但这不起作用。

任何帮助都会受到赞赏!

2 个答案:

答案 0 :(得分:0)

您似乎误解了哪些群组和模板。

根据Using RegEx (Regular Expression Extractor) with JMeter

  

模板。用于从找到的匹配项创建字符串的模板。   这是一个任意字符串,带有用于引用组的特殊元素   在正则表达式中。引用组的语法是:   ' $ 1 $'引用第1组,' $ 2 $' $ 2 $指的是第2组等   无论整个表达式匹配。所以,如果你有回应   单词“经济学”并寻找正则表达式“(ec)(onomics)”和   将模板$ 2 $$ 1 $应用于您将收到的输出变量   “onomicsec”。

所以你的RegEx应该是这样的:

var securityTokenName = "(.+?)"; var securityTokenValue = "(.+?)";

所以

  • securityTokenName将存储在JMeter变量MYREF_g1
  • securityTokenValue将存储在JMeter变量MYREF_g2

View Results Tree Listener在ResponseData选项卡上有内置的RegExp Tester。您还可以使用Debug Sampler查看正则表达式提取器设置的变量。

答案 1 :(得分:0)

您需要多行正则表达式匹配。你的正则表达式看起来像这样

(?s)securityTokenName="(.+?)".*?securityTokenValue="(.+?)";

样本测试计划(它使用来自jmeter插件的虚拟采样器,如果你没有它将会失效)是here

这篇文章here讨论了简单的。*?将匹配多行,但显然它不起作用。 This post是救世主。

来自jmeter文档的详细信息是here

请注意,我删除了=周围的空格以简化我的样本。请适当更改正则表达式。