JMeter请求参数未填充托管bean



我正在编写一个JMeter脚本来测试一些基于ajax的JSF 2.3页面。我可以针对我的应用程序进行身份验证并创建用户会话,但当我尝试向表单提供数据时,我通过JMeter提供的输入参数不会填充我的(ViewScoped(bean属性。但是,它们确实填充了请求参数。我知道这一点,因为当我打印这个地图时,我可以在bean中看到我的值:

HttpServletRequest req = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
Map<String, String[]> paramMap = req.getParameterMap();

但是我的值不会出现在bean的字段中。

我的测试计划:

User Defined Variables
HTTP Cookie Manager
HTTP Header Manager
Regular Expression Manager
Thread Group
--Transaction Controller
----HTTP Sampler 1
----HTTP Sampler 2
----HTTP Sampler 3
----View Results Tree

我确实在cookie管理器中设置了JSESSION cookie,它们运行良好,我可以验证并导航到表单。

我知道JMeter不能以传统的方式处理ajax。我已经设置了JMeter来进行POST提交。然而,我也有一些AJAX属性,例如,我为AJAX设置了请求头:

X-Requested-With=XMLHttpRequest

我的请求参数与Firefox Developers工具中的参数相匹配,它们是:

javax.faces.source  trackingForm:ctlSubmit  true    text/plain  true
trackingForm:ctlSubmit  trackingForm:ctlSubmit  true    text/plain  true
trackingForm    trackingForm    true    text/plain  true
ctlDtFrom_input 10/02/2021  true    text/plain  true
trackingForm:trackingTabs:ctlDtTo_input 10/07/2021  true    text/plain  true
trackingForm:trackingTabs:ctlCheckThisWeek_input    on  true    text/plain  true
trackingForm:trackingTabs:ctlOrderStatus    A   true    text/plain  true
trackingForm:trackingTabs:ctlSearchNumSimple_focus      true    text/plain  true
trackingForm:trackingTabs:ctlSearchNumSimple_input  sCustPO true    text/plain  true
trackingForm:trackingTabs:searchAndOperAdv  All true    text/plain  true
trackingForm:trackingTabs:searchTermListAdv:0:ctlSearchNumAdv_focus     true    text/plain  true
trackingForm:trackingTabs:searchTermListAdv:0:ctlSearchNumAdv_input sCustPO true    text/plain  true
trackingForm:trackingTabs_activeIndex   1   true    text/plain  true
javax.faces.ViewState   ${jsfViewState} true    text/plain  true
javax.faces.partial.ajax    true    true    text/plain  true
javax.faces.partial.execute @all    true    text/plain  true
javax.faces.partial.render  trackingForm    true    text/plain  true

我使用Regex Manager获取viewState并填充一个变量,然后在请求参数中使用该变量。据我所知,比较响应和请求,viewState似乎工作正常。这里的一个问题是,整个事务控制器的所有响应/请求(即从登录到随后的表单提交(的viewState必须相同吗?还是一次只有两个?

同样,我的主要问题是为什么我的托管Bean没有被填充,因为我可以清楚地看到请求参数正在到达它?非常感谢。

如果您观察到这些值,但它们没有按预期工作,则意味着您发送的请求与浏览器发送的请求不同。

不幸的是,如果没有看到来自浏览器和JMeter的完整请求,就不可能提供全面的答案,所以我只能建议使用Fiddler或Burp等第三方嗅探器工具,并将来自浏览器的完整请求与来自JMeter。

假设请求是相同的(除了需要关联的动态值(,您应该得到相同的(成功的(响应。

如果您能够使用浏览器成功执行请求,您只需使用JMeter的HTTP(s(测试脚本记录器记录即可

最新更新