首页 > 解决方案 > Jmeter:如果令牌过期;那么只有我想重新运行授权 API 并更新令牌值

问题描述

如果令牌过期;那么只有我想重新运行授权 API 并更新令牌值。

为此,我使用了两个 CSV 文件;一个用于用户名,另一个用于令牌。

现在当我运行授权 API 时;我检查该用户是否存在令牌。

案例 1. 如果不存在,那么我将提取用户名、令牌、令牌类型、到期日期和发行日期。

情况 2。如果存在,那么我正在检查令牌是否过期,如果过期,则授权 API 将运行并在文件中更新相同的内容。

第一个条件工作正常,即 API 成功运行,提取的日期输入到 Token CSV 文件中。

我对第二种情况有疑问;即,如果过期日期小于当前日期,则针对相应用户,那么我想重新运行授权并更新令牌 csv 文件中的令牌、发行日期和到期日期。我怎样才能做到这一点。

我正在尝试实现这个 If Controller、JSON Extractor 和后处理器。在 if 条件下,我的表达式是

${__groovy((vars.get("UserName").equalsIgnoreCase(vars.get("UserName_1")) && (("${__groovy(TimeZone.setDefault(TimeZone.getTimeZone("GMT")); Date date = new Date(); date.format("EE'\,' dd MMM yyyy HH:mm:ss 'GMT'");,)}".compareTo(vars.get("ExpiresDate")) < 0)) || vars.get("ExpiresDate").equalsIgnoreCase("<EOF>"))
,)}

我在这个给定的链接中附加了 JMX 文件 [ https://filebin.net/gj0q3pyiaqlogt0w]

请帮助我实现这一目标。

标签: csvjmetertoken

解决方案


  1. If Controller 的“条件”区域中不能有 2 个__groovy() 函数,因为它不会被识别为有效条件
  2. Date.format()函数返回一个String,因此您的 compareTo() 函数实际上是在String object上调用的。我相信您应该比较两个日期,因此您需要将这部分条件修改为:]

    (new Date().compareTo(Date.parse("EE',' dd MMM yyyy HH:mm:ss 'GMT'", vars.get("ExpiresDate"))) < 0
    
  3. 一般来说,您可以有条件地运行请求,就像将相关模块控制器作为 If 控制器的子控制器一样简单,请查看在 JMeter文章中轻松编写 GOTO 语句以获取更多详细信息。

  4. 您的测试链接已断开,如果您需要进一步帮助,请考虑提供测试计划和所有相关数据(即 CSV 文件、可能的变量值等)


推荐阅读