我正在尝试在基于令牌的授权机制下创建测试。在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"
}
之后,我期待JMeter使用if controller
到达内部${JMeterThread.last_sample_ok} == false
,然后使用条件if controller
到达下一个${expiredaccesstokenerror} == "expired_accesstoken"
。但是我无法弄清楚为什么没有达到此代码。
正如您在herewith图片中看到的那样,我在JMeter中实现了这个过程:
答案 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文章。
更多提示: