【问题标题】:JMETER (Beanshell): Token Parsing Error: Lexical error at line 4, column 25. Encountered: "u" (117), after : "\'s"JMETER(Beanshell):令牌解析错误:第 4 行第 25 列的词法错误。遇到:“u”(117),之后:“\'s”
【发布时间】:2014-11-14 14:03:11
【问题描述】:

在 JMETER 中,我有 HTTP 查询,它返回 JSON 字符串,如下所示:

{"url":"/some/path?Id=343\u0026"}

我正在尝试使用 BeanShell 采样器从中解析参数 Id:

url = prev.getResponseDataAsString();
int start=url.indexOf('Id=');
int end = url.indexOf('u0026')-1;
newId=url.substring(start,end);
vars.put("newId", newId);

并得到一个错误:Token Parsing Error: Lexical error at line 4, column 25. Encountered: "u" (117), after : "\'s"

有什么想法吗?

所以看起来反斜杠混淆了解析器。尝试了一些 Java String 操作(replaceAllURLEncoder.encode) - 它们似乎都没有帮助。

【问题讨论】:

    标签: java json jmeter beanshell


    【解决方案1】:

    JSON URL 包含额外参数:{"url":"/some/path?Id=343\u0026success=1"},因此以下代码有效:

    url = prev.getResponseDataAsString();
    int start=url.indexOf("Id=")+3;
    int end = url.indexOf("success=1")-6; //note: "\u0026" is 6 characters
    newId=url.substring(start,end);
    vars.put("newId", newId);
    

    【讨论】:

      【解决方案2】:

      \u0026 实际上是一个字符,而不是 6。将第 3 行更改为

      int end = url.indexOf("\u0026");
      

      顺便说一句,我不确定您对单引号的使用情况。我怀疑 BeanShell 正在从字符数组转换为字符串以使其工作。最好给它们加上双引号,以防万一。

      【讨论】:

      • 没用。虽然找到了解决方法。由于 url 包含更多参数,我使用另一个字符串 ("success=1") 来定位 Id: {"url":"/some/path?Id=343\u0026success=1"}。
      • 有趣,我在 Java 测试类中测试了代码,它运行良好。
      猜你喜欢
      • 1970-01-01
      • 2021-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-03
      相关资源
      最近更新 更多