Vaadin应用性能测试:Loadrunner录制脚本重放请求不一致问题求助
LoadRunner录制Vaadin应用重放异常解决方案
Vaadin属于服务端驱动的富客户端框架,前端交互事件全部通过标准化同步请求传递到服务端处理,默认的Web协议录制会硬编码大量动态会话参数,直接重放必然会被服务端拦截,可按以下步骤排查修复:
- 先确认所有需要关联的动态参数类型
- 会话级参数:
csrfToken(也叫Vaadin-Security-Key)、v-uiId、v-browserDetails,这三个参数在单会话内固定,从首次访问应用入口的页面响应或者响应头中提取即可 - 次请求级参数:
syncId、clientId、v-sharedKey,每次交互后服务端会返回更新后的数值,下一次请求必须携带最新值,硬编码旧值会直接被服务端判定为非法请求
- 会话级参数:
- 调整录制配置
不要使用默认的Web HTTP/HTML协议的HTML录制模式,切换为URL-based script录制模式,开启Record all headers选项,避免漏捕获Vaadin的异步同步请求 - 完成脚本关联逻辑
用LoadRunner的web_reg_save_param关联函数提前提取所有动态参数,参考示例写法:
另外需要关闭LoadRunner的请求头自动修改配置,Vaadin对// 提取csrf令牌 web_reg_save_param("CSRFToken", "LB=Vaadin-Security-Key: ", "RB=\r\n", "Search=Headers", LAST); // 提取同步序列号 web_reg_save_param("SyncId", "LB=\"syncId\":", "RB=,", "Search=Body", LAST); // 每次交互请求后,重新提取返回的最新syncId,更新到后续请求的参数位Content-Type、Accept等头字段校验严格,必须和录制时的头信息完全一致 - 重放调试
开启运行时设置中的扩展日志,勾选Data returned by server选项,若重放返回403/401状态码优先校验csrf参数是否正确,返回200但无业务效果优先校验syncId等动态参数的更新逻辑是否正确
内容的提问来源于stack exchange,提问作者user16770180
相关产品推荐
相关产品推荐

