【问题标题】:Unable to correlate value[token], from one sampler to another in JMeter无法在 JMeter 中将值 [token] 从一个采样器关联到另一个采样器
【发布时间】:2019-02-05 10:27:18
【问题描述】:

我已经使用 BlazeMeter 插件录制了脚本,我想在另一个请求中使用我在成功登录请求中收到的访问令牌。我的测试计划如下所示

Thread Group : [A]
      |- HTTP Sampler - Login Page
           |-Regular Expression Extractor [getToken]
      |-HTTP Sampler - Other Page
           |-Beanshell PreProcessor[Set Header in Authorization]
  1. 正则表达式提取器参数和值如下:

    Variable Name : token
    Regular Expression  : {“access_token”:”(.+?)"
    Template : $1$
    Match No. : 0
    
  2. 如下所示的 Beanshell 预处理器脚本

    import org.apache.jmeter.protocol.http.control.Header;
    log.info("Start");
    sampler.getHeaderManager().add(new Header("Authorization","Bearer"+vars.get("token")));
    log.info(vars.get("token"));
    

【问题讨论】:

    标签: jmeter


    【解决方案1】:
    1. 您的正则表达式提取器很可能失败,因为您的引号看起来完全可疑。您可以使用Debug Sampler and View Results Tree listener 组合仔细检查token 变量是否真的具有预期值。如果您的 Beanshell 脚本失败,请查看 jmeter.log file 是否有任何可疑条目 - 原因将在那里打印。
    2. Login Page 的响应数据似乎是JSON,因此使用JSON Extractor 而不是正则表达式提取器是有意义的。它允许使用JSON Path language 从响应中提取“有趣”的数据位。在您的情况下,相关的 JSON 路径表达式将是 $.access_token

    3. Since JMeter 3.1 it's recommended to use JSR223 Test Elements and Groovy language for scripting 所以考虑迁移到JSR223 PreProcessor 和 Groovy 语言(您可以重复使用相同的代码)

    4. 您甚至不需要脚本,您可以使用HTTP Header Manager 添加Authorization 标头(以及任何其他标头)

    【讨论】:

      【解决方案2】:

      您能否添加调试采样器并首先尝试确认您的正则表达式提取器按预期工作?它应该为您提供token 所需的值。

      如果您的token 具有所需的值,我建议您通过右键单击HTTP 采样器添加HTTP Header Manager 配置元素

      HTTP Request => Add => Config Element => HTTP Header Manager
      

      在此配置元素中,您可以直观地添加标题,如下所示:

      请注意:- 您没有提供任何 空格/连字符(-) 或关键字 Bear 和令牌之间。

      详情请参考此链接:- https://stackoverflow.com/a/24550552/1115090

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多