You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gatling模拟中URL含#符号时后续内容未被调用的问题咨询

核心原因解释

#是URL规范定义的片段分隔符,所有HTTP客户端(包括主流浏览器、Gatling、curl)在发送请求时,都会自动丢弃#及之后的片段内容,这是完全符合RFC 3986标准的默认行为,并非Gatling的特殊限制。
你观察到Gatling实际请求只会发送到https://orangehrm-demo-6x.orangehrmlive.com/client/,本质就是这个规则的体现。哪怕你在真实浏览器里输入那个带hash的完整URL,打开开发者工具查看网络请求,会发现发给服务器的请求同样只会到/client/,#后面的内容完全由本地前端JS脚本读取、处理,根本不会传输到后端服务器。
你测试的OrangeHRM是典型的单页应用(SPA),采用hash路由实现页面跳转,这种架构下#后面的路径纯粹是前端路由逻辑,不是后端的接口路径。原脚本试图靠请求带hash的路径拿到“Edit User Role”的页面内容,本身就和真实请求链路不匹配,自然无法匹配到对应的页面校验内容。

具体调整方案

  • 先理清真实请求链路
    测试这类hash路由的SPA应用时,首先要通过浏览器开发者工具的网络面板抓包,明确两类请求的边界:
    1. 静态入口资源:是真正会发送到服务器的部分,对应脚本里的/client/,后端返回的是通用的单页HTML模板
    2. 动态接口请求:HTML加载完成后,前端JS读取#后面的路由值/admin/edit_user_role/38,会自动调用对应的后端XHR接口获取页面数据、渲染动态内容,这部分才是Gatling脚本需要模拟的真实请求
  • 脚本调整逻辑
    1. 把原来写在get路径里的hash部分去掉,先正常请求静态入口/client/,校验这个页面的状态码、基础内容
    2. 按照抓包得到的、前端加载对应hash路由时实际发起的后端接口路径,补充对应的请求逻辑,不要试图靠带hash的路径去获取动态页面内容
    3. 如果测试目标只是验证入口页面可正常访问,不需要校验动态渲染的内容,直接将get路径修改为/client/即可,原有路径里的hash部分对后端请求没有任何实际作用
  • 避坑提醒
    不要试图通过修改Gatling配置,把#后面的内容强行传给服务器的方式解决问题。这种做法不仅不符合HTTP协议的通用规则,也和真实用户的浏览器行为完全脱节,压测结果不具备参考价值。

调整后的脚本参考写法

// 模拟请求SPA静态入口
http("userManagementUserRoleEdit入口")
  .get("/client/")
  .check(status.is(200))

// 模拟前端加载对应hash路由时,实际调用的后端数据接口(路径替换为实际抓包获取的真实接口地址)
http("用户角色编辑数据查询")
  .get("/admin/user_role/38")
  .check(status.is(200))

注:如果你的测试目标只是简单验证页面入口可访问,不需要校验动态渲染的页面内容,去掉路径里的hash部分即可满足基础请求要求。

内容的提问来源于stack exchange,提问作者Varghese John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.30 10:15:08