繁体   English   中英

使用JMeter的JSF ViewState错误

[英]JSF ViewState errors using JMeter

使用JMeter我需要提取JSF视图状态值。 我能够提取价值。

以下是viewstate表单响应:

   <input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id4" />

我的正则表达式提取器如下:

<input\s+type="hidden"\s+name="javax\.faces\.ViewState"\s+id="javax\.faces\.ViewState"\s+value="([^"]+)".*/>

这很好。 我正确地获得j_id4值并放置。

但是我最大的问题是每个API调用的值都会改变。 第一个API调用的视图状态值为j_id4 ,但是下一个API调用的视图状态将为j_id5

我该如何处理?

  1. 用正则表达式解析HTML不是最好的主意 ,我建议改为使用CSS / JQuery Extractor ,相关的配置将非常简单:

    • 参考名称:任何有意义的内容,即viewstate
    • CSS / JQuery表达式: input[name=javax.faces.ViewState]
    • 属性: value
  2. 如果您的测试假设2(或更多)的HTTP请求取样器,你要么需要应用CSS / JQuery的提取到他们每个人的ViewState的每一次调用改变,所以你需要每次都提取出来。 或者,您可以将CSS / JQuery提取器与HTTP请求采样器置于同一级别,JMeter的后处理器遵循范围规则,因此单个提取器将应用于其范围内的所有采样器。 就像是:

    JMeter CSS JQuery提取器

您可以添加2个正则表达式提取器,其中一个将提取j_id ,表达式将如下所示:

  • 正则表达式: value =“(。*?)\\ d”

第二个将提取数字4 ,表达式如下:

  • 正则表达式: value =“。+(\\ d)”

现在,使用以下代码为每个API添加一个beanshell后处理器:

String j_id = vars.get("j_id");// j_id is the reference name of the first regular expression extractor
int num = Integer.parseInt(vars.get("num"));// num is the reference name for the second regular expression extractor
num = num + 1;
vars.put("num",String.valueOf(num));
vars.put("JSF", j_id + num);

对于第一个API,您可以使用相同的正则表达式,将上述beanshell后处理器添加到需要从中提取JSF视图状态值的所有API中之后,请使用$ {JSf},它将保存值j_id5用于第二个API, j_id6用于第三个API,依此类推。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM