JMeter如果未达到控制器条件?

时间:2016-02-17 09:33:08

标签: jmeter ruby-jmeter

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

这是授权舞蹈:

  

     foreach user in users.csv:
     {
         Get Authorization Code: Http sampler
         Extract AuthzCode on ${authorizationcode}: JSON extractor
         if ${JMeterThread.last_sample_ok}
         {
             Get Access Token: Http sampler
             Extract AccessToken on ${accesstoken}: JSON extractor
             Extract RefreshToken on ${refreshtoken}: JSON extractor
             if ${JMeterThread.last_sample_ok}
             {
                 foreach data in data.csv
                 {
                     Send data in body: Http sampler
                     if ${JMeterThread.last_sample_ok} == false *******************
                     {
                         Extract error on ${expiredaccesstokenerror}: JSON extractor
                         if (${expiredaccesstokenerror} == "expired_accesstoken")
                         {
                             Get new accessToken using ${refreshtoken}: Http Request
                             Extract AccessToken on ${accesstoken}: JSON extractor
                             Extract RefreshToken on ${refreshtoken}: JSON extractor
                         }
                     }
                 }
             }
         }
     }
    

一切正常,直到 AccessToken 过期,服务器返回此身体:

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

enter image description here

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

正如您在herewith图片中看到的那样,我在JMeter中实现了这个过程:

enter image description here

1 个答案:

答案 0 :(得分:1)

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

"${expiredaccesstokenerror}" == "expired_accesstoken"

注意变量周围的引号。如果控制器的条件由JavaScript引擎(Rhino或Nashorn)评估,并且如果你用字符串比较某些东西,你将得到" blabla没有定义"例外。当它是大约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侦听器组合。