0

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

这是授权舞蹈:

     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 controllerwith condition ${expiredaccesstokenerror} == "expired_accesstoken"。但是我无法弄清楚为什么没有达到此代码。

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

在此处输入图像描述

4

1 回答 1

1

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

"${expiredaccesstokenerror}" == "expired_accesstoken"

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

还有一些提示:

  • 在 JMeter 测试未按预期工作的每种情况下,请查看jmeter.log文件
  • 如果jmeter.log文件不包含任何可疑内容 - 使用Debug SamplerView Results Tree listener 组合。
于 2016-02-17T19:19:16.993 回答