JMeter回放录制脚本时PrimeFaces自动完成组件报错如何解决
问题根因
两个报错均由JMeter回放时未匹配JSF+PrimeFaces应用的状态依赖规则导致:
PropertyNotFoundException:渲染页面时后端托管Beanalta未完成初始化,读取nombre属性时返回空- 自动完成组件空指针:
completeMethod="#{alta.completeTextPrimeraVia}"返回null,组件渲染下拉列表时无判空处理触发异常
解决步骤
- 补全JSF视图状态参数关联
JSF所有请求都携带动态生成的javax.faces.ViewState隐藏参数,录制脚本中该值为固定值,回放时会和服务端会话状态不匹配。在JMeter中添加正则表达式提取器,从上一个页面响应中提取javax.faces.ViewState的动态值,替换后续所有请求中写死的该参数值。 - 补充自动完成组件的预请求
该自动完成组件配置了onfocus/onclick触发空搜索拉取选项列表,用户正常操作时浏览器会先发送该AJAX请求,后端同步初始化altaBean属性。录制脚本大概率跳过了该前置请求,直接发送保存请求导致alta未初始化。在保存请求之前,新增该自动完成组件的搜索AJAX请求,参数匹配组件调用规则。 - 修复后端与提交参数校验
- 在
completeTextPrimeraVia方法中添加判空逻辑,无匹配结果时返回空集合而非null,避免组件渲染异常 - 确认提交的
nombre参数值属于completeTextPrimeraVia返回的可选值范围,组件开启了forceSelection="true",非法值会触发校验失败清空alta属性
- 在
- 补全AJAX请求标识头
对比浏览器正常请求头,补全JMeter请求中的Faces-Request: partial/ajax、X-Requested-With: XMLHttpRequest等AJAX标识头,避免服务端错误识别请求类型导致状态初始化失败。
内容的提问来源于stack exchange,提问作者Marta
相关产品推荐
相关产品推荐

