【问题标题】:JMeter If Controller condition is not reached?JMeter 如果没有达到控制器条件?
【发布时间】:2016-02-17 09:33:07
【问题描述】:

我正在尝试在基于令牌的授权机制下创建测试。在访问令牌过期之前,一切都几乎正常工作。然后我正在尝试刷新它,但是似乎没有执行某些测试。

这是授权舞:

users.csv 中的 foreach 用户: { 获取授权码:Http采样器 在 ${authorizationcode} 上提取 AuthzCode:JSON 提取器 如果 ${JMeterThread.last_sample_ok} { 获取访问令牌:Http 采样器 在 ${accesstoken} 上提取 AccessToken:JSON 提取器 在 ${refreshtoken} 上提取 RefreshToken:JSON 提取器 如果 ${JMeterThread.last_sample_ok} { data.csv 中的 foreach 数据 { 在正文中发送数据:Http 采样器 如果 ${JMeterThread.last_sample_ok} == false ******************* { ${expiredaccesstokenerror} 上的提取错误:JSON 提取器 if (${expiredaccesstokenerror} == "expired_accesstoken") { 使用 ${refreshtoken} 获取新的 accessToken:Http 请求 在 ${accesstoken} 上提取 AccessToken:JSON 提取器 在 ${refreshtoken} 上提取 RefreshToken:JSON 提取器 } } } } } }

AccessToken 过期并且服务器返回我这个正文之前一切正常:

{
    "error_description":"Access token expired",
    "suberror":"expired_accesstoken",
    "error":"invalid_grant"
}

在那之后,我期待 JMeter 到达内部 if controller${JMeterThread.last_sample_ok} == false 然后下一个 if controller 条件 ${expiredaccesstokenerror} == "expired_accesstoken"。但是我无法弄清楚为什么没有达到此代码。

正如您在此处的图片中看到的那样,我在 JMeter 中将这个过程实现为:

【问题讨论】:

    标签: jmeter ruby-jmeter


    【解决方案1】:

    将您的第二个条件更改为:

    "${expiredaccesstokenerror}" == "expired_accesstoken"
    

    注意变量周围的引号。如果控制器的条件由 JavaScript 引擎(Rhino 或 Nashorn)评估,并且如果您将某些内容与字符串进行比较,您将得到“blabla is not defined”异常。当它是大约 2 种布尔类型(${JMeterThread.last_sample_ok}false)时 - 很好,但如果你想将 JMeter 变量与某个字符串进行比较 - 你需要将变量显式转换为字符串。有关详细信息,请参阅How to Use JMeter's 'IF' Controller and get Pie 文章。

    更多提示:

    • 在 JMeter 测试未按预期工作的所有情况下,请查看 jmeter.log 文件
    • 如果 jmeter.log 文件不包含任何可疑内容 - 选择 Debug SamplerView Results Tree 侦听器组合。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-28
      • 2019-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多