Automated tests JMeter";“忘记”;通过正则表达式在提取器中定义的变量值

Automated tests JMeter";“忘记”;通过正则表达式在提取器中定义的变量值,automated-tests,jmeter,Automated Tests,Jmeter,我确实在JMeter中创建了一个简单的测试用例 打开表单及其所有内容(css、图像等): 得到/ 获取/css/site.css GET/favicon.ico 获取/font/specific-fonts.woff 获取/images/banner.png 稍等一下… 张贴价值观 职位/ 收到“谢谢”页面。 -收到/谢谢 在第一个GET的响应中,有一个隐藏的输入字段,其中包含一个令牌。这个令牌也需要包含在帖子中。 现在我使用JMeter的“正则表达式提取器”从响应中获取令牌。到目前为止

我确实在JMeter中创建了一个简单的测试用例

打开表单及其所有内容(css、图像等):

  • 得到/
  • 获取/css/site.css
  • GET/favicon.ico
  • 获取/font/specific-fonts.woff
  • 获取/images/banner.png
稍等一下…
张贴价值观

  • 职位/
收到“谢谢”页面。 -收到/谢谢

在第一个GET的响应中,有一个隐藏的输入字段,其中包含一个令牌。这个令牌也需要包含在帖子中。 现在我使用JMeter的“正则表达式提取器”从响应中获取令牌。到目前为止,一切顺利。 然后,在检索所有其他内容之后,我使用令牌参数值字段中RegExp提取器中的变量名创建POST消息。 但是当执行testcase时,它将填充给定的默认值,而不是令牌的实际值

所以。。。调试此问题的第一步是在获取令牌后直接添加一个伪HTTP GET请求。在这个GET请求中,我还添加了token参数,token变量作为值,但是现在我可以通过查看Web服务器上的访问日志轻松地检查参数。 在这种情况下。。。这个URL看起来很有希望。它在GET中包含实际的令牌值,但在POST中仍然使用默认值

调试的第二步是使用“调试采样器”和“查看结果树”。 通过在不同步骤之间移动调试采样器,我发现在收到CSS后,令牌变量的值回到了默认值

所以。。。现在最大的问题是。。。 如何使JMeter在测试脚本结束之前记住变量值?

JMeter不会“忘记”变量。但是,变量范围仅限于当前线程组。您可以将JMeter变量转换为具有“全局”作用域的JMeter属性,即与以下代码一起使用:

props.put("myVar", vars.get("myVar"));

或者使用函数。有关详细信息,请参阅指南

正如您所发现的,您的问题来自于对jmeter中范围规则的误解

在您的情况下,只需放置请求的后处理器,它将为您提供包含子节点的响应。
另外,我认为您不需要与其他线程共享此令牌,因此不要使用备选答案中建议的属性。

找到了解决此问题的方法:-)。。。我确实将第一个GET和正则表达式提取器放在了一个简单的控制器中。其余的(除了“稍等一下…”的计时器)仍在主流中。这就解决了问题。我不认为在这种情况下使用属性是一件好事,因为令牌只能在单个线程中共享,不是吗?