使用JMeter的JSF视图状态错误

使用JMeter的JSF视图状态错误,jsf,jmeter,performance-testing,viewstate,Jsf,Jmeter,Performance Testing,Viewstate,使用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\.Vie

使用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


如何处理此问题?

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

<input\s+type="hidden"\s+name="javax\.faces\.ViewState"\s+id="javax\.faces\.ViewState"\s+value="([^"]+)".*/>
正则表达式:值=.*?\d 第二个将提取数字4,表达式如下:

<input\s+type="hidden"\s+name="javax\.faces\.ViewState"\s+id="javax\.faces\.ViewState"\s+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},它将保存第二个API的值j_id5和第三个API的值j_id6,依此类推

,我建议改为,相关配置如下:

参考名称:任何有意义的内容,如viewstate CSS/JQuery表达式:输入[name=javax.faces.ViewState] 属性:值 如果您的测试假设有2个或更多的采样器,那么您需要对每个采样器应用CSS/JQuery提取器,因为每次调用都会发生变化,所以每次都需要提取它。或者,您可以将CSS/JQuery提取器与HTTP请求采样器放在同一个级别,JMeter的后处理器也会遵守,因此单个提取器将应用于其范围内的所有采样器。比如:


您能否共享响应和正则表达式提取器,以及JSF视图状态值是否在所有api调用中继续递增1?